use of org.osate.ge.gef.LabelNode in project osate2 by osate.
the class AgeFxTest method start.
@Override
public void start(final Stage primaryStage) throws Exception {
container = new GridPane();
container.setHgap(10.0);
container.setVgap(10.0);
container.setBackground(new Background(new BackgroundFill(Color.LIGHTGRAY, CornerRadii.EMPTY, Insets.EMPTY)));
final Graphic[] graphics = new Graphic[] { RectangleBuilder.create().build(), RectangleBuilder.create().rounded().build(), EllipseBuilder.create().build(), FolderGraphicBuilder.create().build(), DeviceGraphicBuilder.create().build(), ParallelogramBuilder.create().horizontalOffset(20).build(), BusGraphicBuilder.create().build(), PolyBuilder.create().polygon().points(new Point(0.0, 1.0), new Point(1.0, 1.0), new Point(0.5, 0.0)).build(), PolyBuilder.create().polyline().points(new Point(0.0, 0.0), new Point(1.0, 0.5), new Point(0.0, 1.0)).build(), ProcessorGraphicBuilder.create().build(), MemoryGraphicBuilder.create().build(), FeatureGroupTypeGraphicBuilder.create().build(), ModeGraphicBuilder.create().build(), ModeGraphicBuilder.create().initialMode().build(), NoteGraphicBuilder.create().build(), LabelBuilder.create().build(), FeatureGraphicBuilder.create().abstractFeature().bidirectional().build(), FeatureGraphicBuilder.create().abstractFeature().input().build(), FeatureGraphicBuilder.create().abstractFeature().output().build(), FeatureGraphicBuilder.create().eventPort().bidirectional().build(), FeatureGraphicBuilder.create().eventPort().input().build(), FeatureGraphicBuilder.create().eventPort().output().build(), FeatureGraphicBuilder.create().dataPort().bidirectional().build(), FeatureGraphicBuilder.create().dataPort().input().build(), FeatureGraphicBuilder.create().dataPort().output().build(), FeatureGraphicBuilder.create().eventDataPort().bidirectional().build(), FeatureGraphicBuilder.create().eventDataPort().input().build(), FeatureGraphicBuilder.create().eventDataPort().output().build(), FeatureGraphicBuilder.create().subprogramAccess().input().build(), FeatureGraphicBuilder.create().subprogramAccess().output().build(), FeatureGraphicBuilder.create().subprogramGroupAccess().input().build(), FeatureGraphicBuilder.create().subprogramGroupAccess().output().build(), FeatureGraphicBuilder.create().dataAccess().input().build(), FeatureGraphicBuilder.create().dataAccess().output().build(), FeatureGraphicBuilder.create().featureGroup().build(), ConnectionBuilder.create().build(), ConnectionBuilder.create().sourceTerminator(OrthogonalLineBuilder.create().build()).build(), ConnectionBuilder.create().sourceTerminator(ArrowBuilder.create().filled().build()).destinationTerminator(ArrowBuilder.create().filled().small().build()).build(), ConnectionBuilder.create().destinationTerminator(ArrowBuilder.create().line().build()).build(), FlowIndicatorBuilder.create().build(), FlowIndicatorBuilder.create().sourceTerminator(ArrowBuilder.create().small().reverse().build()).destinationTerminator(OrthogonalLineBuilder.create().build()).build() };
final List<Node> nodes = Arrays.stream(graphics).map(GraphicToFx::createNode).collect(Collectors.toList());
// Create a container shape. This is useful for ensuring image in style is applied,.
final ContainerShape cs = new ContainerShape();
cs.setGraphic(new EllipseNode());
nodes.add(cs);
final CheckBox dashedCheckBox = new CheckBox("Dashed");
nodes.add(dashedCheckBox);
dashedCheckBox.selectedProperty().addListener((ChangeListener<Boolean>) (observable, oldValue, newValue) -> {
dashed = newValue;
refreshStyle();
});
// Finish additional configuraton for labels and connections
for (final Node n : nodes) {
if (n instanceof LabelNode) {
((LabelNode) n).setText("This is a test");
} else if (n instanceof ConnectionNode) {
final ConnectionNode cn = (ConnectionNode) n;
final StaticAnchor start = new StaticAnchor(new org.eclipse.gef.geometry.planar.Point(0, 5));
final StaticAnchor end = new StaticAnchor(new org.eclipse.gef.geometry.planar.Point(100, 5));
cn.setStartAnchor(start);
cn.setEndAnchor(end);
} else if (n instanceof FlowIndicatorNode) {
final FlowIndicatorNode fi = (FlowIndicatorNode) n;
final StaticAnchor startAnchor = new StaticAnchor(new org.eclipse.gef.geometry.planar.Point(0, 5));
fi.setTranslateX(100.0);
fi.setTranslateY(5.0);
fi.setStartAnchor(startAnchor);
}
}
final List<String> args = getParameters().getRaw();
final IPath imagePath = args.size() > 0 ? new Path(args.get(0)) : null;
baseStyle = StyleBuilder.create(Style.DEFAULT).fontSize(20.0).outlineColor(org.osate.ge.graphics.Color.BLUE).backgroundColor(org.osate.ge.graphics.Color.CYAN).imagePath(imagePath).build();
// Add Nodes and Assign them to Rows and Columns
final int numberOfColumns = 4;
int row = 0, col = -1;
for (final Node node : nodes) {
// Increment the row and column first so that the final values will be the indices of the last node
col++;
if (col > (numberOfColumns - 1)) {
col = 0;
row++;
}
container.add(node, col, row);
}
// Create Row and Column Constraints
for (int i = 0; i < numberOfColumns; i++) {
ColumnConstraints c = new ColumnConstraints(100, 100, Double.MAX_VALUE);
c.setHgrow(Priority.SOMETIMES);
container.getColumnConstraints().add(c);
}
for (int i = 0; i <= row; i++) {
RowConstraints rc = new RowConstraints(20, 20, Double.MAX_VALUE);
rc.setVgrow(Priority.SOMETIMES);
container.getRowConstraints().add(rc);
}
// Style the nodes
refreshStyle();
primaryStage.setScene(new Scene(container));
// Setup the stage
primaryStage.setResizable(true);
primaryStage.setWidth(1920);
primaryStage.setHeight(1080);
primaryStage.setTitle("GEF Graphics");
primaryStage.show();
}
use of org.osate.ge.gef.LabelNode in project osate2 by osate.
the class SelectedElementsMover method handleEvent.
@Override
public HandledEvent handleEvent(final InputEvent e) {
if (!editor.getPaletteModel().isSelectToolActive()) {
return null;
}
if (e instanceof MouseEvent) {
final MouseEvent mouseEvent = (MouseEvent) e;
if ((mouseEvent.getEventType() != MouseEvent.MOUSE_PRESSED && mouseEvent.getEventType() != MouseEvent.MOUSE_DRAGGED) || mouseEvent.getButton() != MouseButton.PRIMARY) {
return null;
}
final DiagramElement clickedDiagramElement = InputEventHandlerUtil.getTargetDiagramElement(editor.getGefDiagram(), e.getTarget());
if (clickedDiagramElement == null) {
return null;
}
if (e.getEventType() == MouseEvent.MOUSE_PRESSED) {
// Store the starting position.
mousePressLocationDiagram = editor.getGefDiagram().getSceneNode().getSceneToLocalTransform().transform(mouseEvent.getSceneX(), mouseEvent.getSceneY());
// Determine if the primary label is the node being moved
mousePressPrimaryConnectionLabel = null;
if (DiagramElementPredicates.isConnection(clickedDiagramElement)) {
for (Node tmp = (Node) e.getTarget(); tmp != null; tmp = tmp.getParent()) {
if (tmp instanceof BaseConnectionNode) {
break;
}
if (tmp instanceof LabelNode) {
mousePressPrimaryConnectionLabel = tmp;
break;
}
}
}
} else if (e.getEventType() == MouseEvent.MOUSE_DRAGGED && mousePressLocationDiagram != null) {
final Point2D newPositionDiagram = editor.getGefDiagram().getSceneNode().getSceneToLocalTransform().transform(mouseEvent.getSceneX(), mouseEvent.getSceneY());
final double d = mousePressLocationDiagram.distance(newPositionDiagram);
if (d > MIN_MOUSE_DRAGGED_DISTANCE) {
try {
if (mousePressPrimaryConnectionLabel == null) {
final MouseMoveSelectedElementsInteraction newInteraction = new MouseMoveSelectedElementsInteraction(editor, mousePressLocationDiagram);
return HandledEvent.newInteraction(newInteraction);
} else {
final BaseConnectionNode cn = InputEventHandlerUtil.getClosestConnection(mousePressPrimaryConnectionLabel);
if (cn == null) {
return null;
}
final MovePrimaryConnectionLabelInteraction newInteraction = new MovePrimaryConnectionLabelInteraction(editor, mousePressLocationDiagram, cn, mousePressPrimaryConnectionLabel);
return HandledEvent.newInteraction(newInteraction);
}
} finally {
mousePressLocationDiagram = null;
}
}
}
return HandledEvent.consumed();
} else if (e instanceof KeyEvent) {
if (e.getEventType() != KeyEvent.KEY_PRESSED) {
return null;
}
final KeyEvent keyEvent = (KeyEvent) e;
if (keyEvent.getCode() != KeyCode.PERIOD) {
return null;
}
final KeyboardMoveSelectedElementsInteraction newInteraction = new KeyboardMoveSelectedElementsInteraction(editor);
return HandledEvent.newInteraction(newInteraction);
} else {
return null;
}
}
use of org.osate.ge.gef.LabelNode in project osate2 by osate.
the class Overlays method refresh.
/**
* Refreshes the overlays based on the current selection
* This should be called by the editor whenever a change could affect the overlay.
* Specifically, it needs to be called whenever the diagram changes. Connection diagram elements may change to shapes and vice versa
* which would cause the nodes to change without changing the selected diagram elements.
* @param selection the current selection.
*/
@SuppressWarnings("unchecked")
public void refresh(final IStructuredSelection selection) {
Display.getCurrent().asyncExec(() -> {
final ImmutableMap.Builder<DiagramElement, SelectedNodeOverlay> newDiagramElementToSelectedNodeOverlayMapBuilder = ImmutableMap.builderWithExpectedSize(selection.size());
final ArrayList<DiagramElement> selectedDiagramElements = selectionToDiagramElements(selection);
// Add existing selected node overlays for selected diagram elements to new map.
for (final Entry<DiagramElement, SelectedNodeOverlay> existingEntry : diagramElementToSelectedNodeOverlayMap.entrySet()) {
if (selectedDiagramElements.contains(existingEntry.getKey()) && gefDiagram.getSceneNode(existingEntry.getKey()) == existingEntry.getValue().getSelectedNode()) {
newDiagramElementToSelectedNodeOverlayMapBuilder.put(existingEntry.getKey(), existingEntry.getValue());
}
}
// Create selected node overlays for newly selected nodes.
for (int i = 0; i < selectedDiagramElements.size(); i++) {
final DiagramElement selectedDiagramElement = selectedDiagramElements.get(i);
final boolean primary = i == selectedDiagramElements.size() - 1;
final SelectedNodeOverlay existingOverlay = diagramElementToSelectedNodeOverlayMap.get(selectedDiagramElement);
if (diagramElementToSelectedNodeOverlayMap.containsKey(selectedDiagramElement)) {
// Set whether it is primary
existingOverlay.setPrimary(primary);
} else {
final Node selectedNode = gefDiagram.getSceneNode(selectedDiagramElement);
if (selectedNode != null) {
if (selectedNode instanceof ContainerShape || selectedNode instanceof DockedShape || selectedNode instanceof LabelNode) {
newDiagramElementToSelectedNodeOverlayMapBuilder.put(selectedDiagramElement, new SelectedShapeOverlay(this, selectedDiagramElement, selectedNode, primary));
} else if (selectedNode instanceof BaseConnectionNode) {
// Create overlay for connection nodes
newDiagramElementToSelectedNodeOverlayMapBuilder.put(selectedDiagramElement, new SelectedConnectionOverlay(this, selectedDiagramElement, (BaseConnectionNode) selectedNode, primary));
}
}
}
}
diagramElementToSelectedNodeOverlayMap = newDiagramElementToSelectedNodeOverlayMapBuilder.build();
// Update children to reflect the new nodes.
selectionOverlays.getChildren().setAll((Collection<? extends Node>) diagramElementToSelectedNodeOverlayMap.values());
});
}
use of org.osate.ge.gef.LabelNode in project osate2 by osate.
the class GefAgeDiagram method getPrimaryLabelSize.
@Override
public Dimension getPrimaryLabelSize(final DiagramElement de) {
final LabelNode primaryLabel = getPrimaryLabelSceneNode(de);
if (primaryLabel == null) {
return Dimension.ZERO;
}
final double width = primaryLabel.computePrefWidth(-1);
return new Dimension(width, primaryLabel.computePrefHeight(width));
}
Aggregations