Пример #1
0
  private void removeListeners(VNode flowNode) {
    flowNode.titleProperty().removeListener(modelTitleListener);
    flowNode.xProperty().removeListener(modelXListener);
    flowNode.yProperty().removeListener(modelYListener);
    flowNode.widthProperty().removeListener(modelWidthListener);
    flowNode.heightProperty().removeListener(modelHeightListener);

    node.layoutXProperty().removeListener(nodeXListener);
    node.layoutYProperty().removeListener(nodeXListener);
    node.prefWidthProperty().removeListener(nodeWidthListener);
    node.prefHeightProperty().removeListener(nodeHeightListener);
  }
Пример #2
0
  @Override
  public void remove() {
    removeSkinOnly = true;

    List<Connector> delList = new ArrayList<>(connectorList);

    for (Connector c : delList) {
      removeConnector(c);
    }
    if (node != null && node.getParent() != null) {
      NodeUtil.removeFromParent(node);
    }
  }
Пример #3
0
  private double computeConnectorSize(double inset, int numConnectors) {

    double maxSize = 10;

    double connectorHeight = maxSize * 2;
    double originalConnectorHeight = connectorHeight;
    double gap = 5;

    double totalHeight = numConnectors * connectorHeight + (numConnectors - 1) * gap;

    connectorHeight = Math.min(totalHeight, node.getPrefHeight() - inset) / (numConnectors);
    connectorHeight = Math.min(connectorHeight, maxSize * 2);

    if (numConnectors == 1) {
      connectorHeight = originalConnectorHeight;
    }

    return connectorHeight;
  }
Пример #4
0
  private void initListeners() {
    modelTitleListener =
        new ChangeListener<String>() {
          @Override
          public void changed(ObservableValue<? extends String> ov, String oldVal, String newVal) {
            node.setTitle(newVal);
          }
        };

    modelXListener =
        new ChangeListener<Number>() {
          @Override
          public void changed(ObservableValue<? extends Number> ov, Number oldVal, Number newVal) {
            node.setLayoutX((double) newVal);
          }
        };

    modelYListener =
        new ChangeListener<Number>() {
          @Override
          public void changed(ObservableValue<? extends Number> ov, Number oldVal, Number newVal) {
            node.setLayoutY((double) newVal);
          }
        };

    modelWidthListener =
        new ChangeListener<Number>() {
          @Override
          public void changed(ObservableValue<? extends Number> ov, Number oldVal, Number newVal) {
            node.setPrefWidth((double) newVal);
          }
        };

    modelHeightListener =
        new ChangeListener<Number>() {
          @Override
          public void changed(ObservableValue<? extends Number> ov, Number oldVal, Number newVal) {
            node.setPrefHeight((double) newVal);
          }
        };

    nodeXListener =
        new ChangeListener<Number>() {
          @Override
          public void changed(ObservableValue<? extends Number> ov, Number oldVal, Number newVal) {
            getModel().setX((double) newVal);
          }
        };

    nodeYListener =
        new ChangeListener<Number>() {
          @Override
          public void changed(ObservableValue<? extends Number> ov, Number oldVal, Number newVal) {
            getModel().setY((double) newVal);
          }
        };

    nodeWidthListener =
        new ChangeListener<Number>() {
          @Override
          public void changed(ObservableValue<? extends Number> ov, Number oldVal, Number newVal) {
            getModel().setWidth((double) newVal);
          }
        };

    nodeHeightListener =
        new ChangeListener<Number>() {
          @Override
          public void changed(ObservableValue<? extends Number> ov, Number oldVal, Number newVal) {
            getModel().setHeight((double) newVal);
          }
        };

    node.onCloseActionProperty()
        .set(
            new EventHandler<ActionEvent>() {
              @Override
              public void handle(ActionEvent t) {
                if (!removeSkinOnly) {
                  modelProperty().get().getFlow().remove(modelProperty().get());
                }
              }
            });
  }
Пример #5
0
 @Override
 public Parent getContentNode() {
   return node.getWorkflowContentPane();
 }
Пример #6
0
  private void addConnector(final Connector connector) {
    connectorList.add(connector);
    ConnectorCircle circle = new ConnectorCircle(controller, getSkinFactory(), connector, 20);

    //        Color fillColor = skinFactory.getConnectionFillColor(connector.getType());
    //        Color strokeColor = skinFactory.getConnectionStrokeColor(connector.getType());
    //
    //        if (fillColor == null) {
    //            fillColor = new Color(0.1, 0.1, 0.1, 0.5);
    //        }
    //
    //        if (strokeColor == null) {
    //            strokeColor = new Color(120 / 255.0, 140 / 255.0, 1, 0.42);
    //        }
    //
    //
    //        circle.setFill(fillColor);
    //        circle.setStroke(strokeColor);
    //
    //        circle.setStrokeWidth(3);

    final Circle connectorNode = circle;

    connectors.put(connector.getId(), connectorNode);

    if (connector.isInput()) {
      inputList.add(connectorNode);
    }
    if (connector.isOutput()) {
      outputList.add(connectorNode);
    }

    DoubleBinding startXBinding =
        new DoubleBinding() {
          {
            super.bind(node.layoutXProperty(), node.widthProperty());
          }

          @Override
          protected double computeValue() {
            double posX = node.getLayoutX();

            if (connector.isOutput()) {
              posX += node.getWidth();
            }

            return posX;
          }
        };

    DoubleBinding startYBinding =
        new DoubleBinding() {
          {
            super.bind(node.layoutYProperty(), node.heightProperty());
          }

          @Override
          protected double computeValue() {

            double connectorHeight = connectorNode.getRadius() * 2;
            double gap = 5;

            double numConnectors = inputList.size();

            int connectorIndex = inputList.indexOf(connectorNode);

            if (connector.isOutput()) {
              numConnectors = outputList.size();
              connectorIndex = outputList.indexOf(connectorNode);
            }

            double totalHeight = numConnectors * connectorHeight + (numConnectors - 1) * gap;

            double midPointOfNode = node.getLayoutY() + node.getHeight() / 2;

            double startY = midPointOfNode - totalHeight / 2;

            double y =
                startY + (connectorHeight + gap) * connectorIndex + (connectorHeight + gap) / 2;

            return y;
          }
        };

    connectorNode.layoutXProperty().bind(startXBinding);
    connectorNode.layoutYProperty().bind(startYBinding);

    node.boundsInLocalProperty()
        .addListener(
            new ChangeListener<Bounds>() {
              @Override
              public void changed(
                  ObservableValue<? extends Bounds> observable, Bounds oldValue, Bounds newValue) {
                computeInputConnectorSize();
                computeOutputConnectorSize();
                adjustConnectorSize();
              }
            });

    NodeUtil.addToParent(getParent(), connectorNode);

    connectorNode
        .onMouseEnteredProperty()
        .set(
            new EventHandler<MouseEvent>() {
              @Override
              public void handle(MouseEvent t) {
                connectorNode.toFront();
              }
            });

    connectorNode
        .onMousePressedProperty()
        .set(
            new EventHandler<MouseEvent>() {
              @Override
              public void handle(MouseEvent t) {

                // we are already connected and manipulate the existing connection
                // rather than creating a new one
                if (controller
                    .getConnections(connector.getType())
                    .isInputConnected(connector.getId())) {
                  return;
                }

                newConnectionSkin =
                    new FXNewConnectionSkin(
                        getSkinFactory(),
                        getParent(),
                        connector,
                        getController(),
                        connector.getType());

                newConnectionSkin.add();

                t.consume();
                MouseEvent.fireEvent(newConnectionSkin.getReceiverConnector(), t);
              }
            });

    connectorNode
        .onMouseDraggedProperty()
        .set(
            new EventHandler<MouseEvent>() {
              @Override
              public void handle(MouseEvent t) {

                // we are already connected and manipulate the existing connection
                // rather than creating a new one
                if (controller
                    .getConnections(connector.getType())
                    .isInputConnected(connector.getId())) {
                  return;
                }

                t.consume();
                MouseEvent.fireEvent(newConnectionSkin.getReceiverConnector(), t);
              }
            });

    connectorNode
        .onMouseReleasedProperty()
        .set(
            new EventHandler<MouseEvent>() {
              @Override
              public void handle(MouseEvent t) {

                // we are already connected and manipulate the existing connection
                // rather than creating a new one
                if (controller
                    .getConnections(connector.getType())
                    .isInputConnected(connector.getId())) {
                  return;
                }

                t.consume();
                try {
                  MouseEvent.fireEvent(newConnectionSkin.getReceiverConnector(), t);
                } catch (Exception ex) {
                  // TODO exception is not critical here (node already removed)
                }
              }
            });
  }
Пример #7
0
  private void init() {
    node = new FlowNodeWindow(this);

    node.setTitle(getModel().getTitle());
    node.setLayoutX(getModel().getX());
    node.setLayoutY(getModel().getY());
    node.setPrefWidth(getModel().getWidth());
    node.setPrefHeight(getModel().getHeight());

    registerListeners(getModel());

    modelProperty.addListener(
        new ChangeListener<VNode>() {
          @Override
          public void changed(ObservableValue<? extends VNode> ov, VNode oldVal, VNode newVal) {

            removeListeners(oldVal);
            registerListeners(newVal);
          }
        });

    for (Connector connector : getModel().getConnectors()) {
      addConnector(connector);
    }

    getModel()
        .getConnectors()
        .addListener(
            new ListChangeListener<Connector>() {
              @Override
              public void onChanged(ListChangeListener.Change<? extends Connector> change) {
                while (change.next()) {
                  if (change.wasPermutated()) {
                    for (int i = change.getFrom(); i < change.getTo(); ++i) {
                      // permutate
                    }
                  } else if (change.wasUpdated()) {
                    // update item
                  } else if (change.wasRemoved()) {
                    // removed
                    for (Connector connector : change.getRemoved()) {
                      removeConnector(connector);
                    }
                  } else if (change.wasAdded()) {
                    // added
                    for (Connector connector : change.getAddedSubList()) {
                      addConnector(connector);
                    }
                  }
                } // end while change.next()
              }
            });

    //        skinFactory.connectionFillColorTypes().addListener(new MapChangeListener<String,
    // Color>() {
    //            @Override
    //            public void onChanged(MapChangeListener.Change<? extends String, ? extends Color>
    // change) {
    //                if (change.wasAdded()) {
    //                    for (Connector connector : getModel().getConnectors()) {
    //
    //                        if (connector.getType().equals(change.getKey())) {
    //                            Shape cN = connectors.get(connector.getId());
    //                            cN.setFill(change.getValueAdded());
    //                        }
    //                    }
    //                }
    //            }
    //        });
    //
    //        skinFactory.connectionStrokeColorTypes().addListener(new MapChangeListener<String,
    // Color>() {
    //            @Override
    //            public void onChanged(MapChangeListener.Change<? extends String, ? extends Color>
    // change) {
    //                if (change.wasAdded()) {
    //                    for (Connector connector : getModel().getConnectors()) {
    //
    //                        if (connector.getType().equals(change.getKey())) {
    //                            Shape cN = connectors.get(connector.getId());
    //                            cN.setStroke(change.getValueAdded());
    //                        }
    //                    }
    //                }
    //            }
    //        });
  }