Package com.slmn.visitor.gui

Source Code of com.slmn.visitor.gui.VComposite

package com.slmn.visitor.gui;

import com.slmn.visitor.gui.Component.HChild;

import javafx.geometry.Bounds;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.scene.text.Text;

public class VComposite extends Composite implements HChild {

  private final BorderPane bp = new GrowPane();
  private final VBox vbox = new VBox();
  private Text open = new Text("(");
  private Text close = new Text(")");

  public VComposite() {
    super();
    vbox.setPadding(new Insets(SPACE, 0, SPACE, 0));
    vbox.setSpacing(SPACE);
    vbox.setAlignment(Pos.CENTER);
    // vbox.setStyle("-fx-border-color: yellowgreen;");
    vbox.setOnMouseClicked(event -> {
      if (!FormulaFrame.isSelecting) {
        vbox.requestFocus();
        event.consume();
      }
    });
    vbox.focusedProperty().addListener(
        (observable, oldValue, newValue) -> {
          if (newValue == oldValue) {
            return;
          }
          if (oldValue) {
            Cursor.clearCursor();
          }
          if (newValue) {
            Cursor.setCursor(this);
          }
        });
    bp.setLeft(open);
    bp.setCenter(vbox);
    bp.setRight(close);
    BorderPane.setMargin(bp.getLeft(), new Insets(0, SPACE, 0, SPACE));
    BorderPane.setMargin(bp.getRight(), new Insets(0, SPACE, 0, SPACE));
    BorderPane.setAlignment(bp.getLeft(), Pos.CENTER);
    BorderPane.setAlignment(bp.getRight(), Pos.CENTER);
  }

  @Override
  protected final boolean isValid(Component c) {
    return c instanceof HComposite;
  };

  @Override
  public final Node getNode() {
    return bp;
  }

  @Override
  public HComposite getHParent() {
    return (HComposite) getParent();
  }

  @Override
  public Bounds getCBounds() {
    return bp.localToScene(bp.getLayoutBounds());
  }

  @Override
  public void addCursor() {
    HComposite parent = getHParent();
    if (parent != null) {
      parent.addCursor(this);
    } else {
      Cursor.prompt.setVisible(false);
      Cursor.prompt.setHeight(SPACE);
    }
  }

  @Override
  public void setCNodesBG(CNodeState state) {
    vbox.setStyle(state.getStyle());
    bp.setStyle(state.getStyle());
  }

  @Override
  protected boolean add(Component c) {
    this.children.add(c);
    return vbox.getChildren().add(c.getNode());
  }

  @Override
  protected boolean remove(Component c) {
    this.children.remove(c);
    return vbox.getChildren().remove(c.getNode());
  }

  private static class GrowPane extends BorderPane {
    GrowPane() {
      super();
    }

    @Override
    protected void layoutChildren() {
      super.layoutChildren();
      Node right = getRight();
      Node left = getLeft();
      double ratio = getHeight() / right.getLayoutBounds().getHeight();
      right.setScaleY(ratio);
      right.setScaleX(ratio / 3);
      left.setScaleY(ratio);
      left.setScaleX(ratio / 3);
    }
  }
}
TOP

Related Classes of com.slmn.visitor.gui.VComposite

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.