From 5470347ed71acab16568fcdcee9cf1dc7b1fe457 Mon Sep 17 00:00:00 2001 From: Simon Barner <barner@fortiss.org> Date: Thu, 21 Oct 2021 01:07:15 +0200 Subject: [PATCH] Add context menu entries for zooming in diagram editors Issue-Ref: 3843 Issue-Url: https://git.fortiss.org/af3/af3/-/issues/3843 Signed-off-by: Simon Barner <barner@fortiss.org> --- .../base/ui/editor/fx/controller/.ratings | 2 +- .../controller/EObjectDiagramController.java | 2 +- .../ui/javafx/lwfxef/controller/base/.ratings | 2 +- .../base/DefaultDiagramController.java | 69 ++++++++++++++++--- 4 files changed, 64 insertions(+), 11 deletions(-) diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/.ratings b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/.ratings index fabef4c49..391dec0bc 100644 --- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/.ratings +++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/.ratings @@ -1,6 +1,6 @@ CurvedLinkLayoutedContentAnchorangeController.java e22faedbe98c3dab660b5d2df8ebd004e116c5ba GREEN CurvedLinkLayoutedDiagramAnchorangeController.java f2e5e2a7cc9b6a070871e200e57371286bb15222 GREEN -EObjectDiagramController.java 7fe2cd69ee8449b0ecaeb42e4fe2b65fffd9b6c3 GREEN +EObjectDiagramController.java 45f5b1439f33685523b035d2603e8329b647b62a YELLOW EObjectEllipticResizableContentControllerBase.java f12e8f5a646a23fe428ed4768bf041c8b885ec81 GREEN EObjectModelChangeProvider.java f4b60cebb088a5c81ca92a41614e1a5d40030502 GREEN EObjectRectangularResizableContentControllerBase.java cde6c13659611d927691c03ecd2621cff2414b03 GREEN diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/EObjectDiagramController.java b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/EObjectDiagramController.java index 7fe2cd69e..45f5b1439 100644 --- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/EObjectDiagramController.java +++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/EObjectDiagramController.java @@ -85,7 +85,7 @@ public class EObjectDiagramController<T extends EObject> extends DefaultDiagramC IElementCompositionContext edc = createElementCompositionContext(modelParent, x, y, true, getViewer().getFeatures().getCurrentZoomFactor()); List<MenuItem> result = createPrototypeMenu(modelParent, edc); - // Adds "Display" menu + // Adds "Display" and "Zoom" menus result.addAll(super.contextMenuContributions(node, diagramLocation)); if(modelParent instanceof IHierarchicElement && enableAutoLayout()) { result.add(createAutoLayoutMenu((IHierarchicElement)modelParent)); diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/controller/base/.ratings b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/controller/base/.ratings index c1f077e5e..f81faf3b9 100644 --- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/controller/base/.ratings +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/controller/base/.ratings @@ -2,7 +2,7 @@ AnchorageContentControllerBase.java da56b10cbf2711b5da69f0b59f43eacbe54f4eea GRE ClickControllerBase.java 8e5861ed5f9318008ad0fdd5497ed320cd5bd647 GREEN ContentAnchorageMoveControllerBase.java c18e7915ce23e124757f5b736086ecc46694800a GREEN ControllerBase.java 9311521b252e46640e26d409610e527fd5ed6922 GREEN -DefaultDiagramController.java 3a0c4c4c28e6306dcaf70c5c1c7f8ad22bb86d73 GREEN +DefaultDiagramController.java 57cc1bbde64c22d0dfb4832755d50e9491261072 YELLOW DelegatingContentAnchorageController.java 1889628a346a2183082ffe213978f9d15a949494 GREEN DragControllerBase.java b15ff874304f679fe494d85f57cc8cbe4d0d1d15 GREEN DraggingUtils.java 95117e2ea4c36b6c6a31f8088bb95b484e0e6612 GREEN diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/controller/base/DefaultDiagramController.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/controller/base/DefaultDiagramController.java index 3a0c4c4c2..57cc1bbde 100644 --- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/controller/base/DefaultDiagramController.java +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/controller/base/DefaultDiagramController.java @@ -9,8 +9,7 @@ *******************************************************************************/ package org.fortiss.tooling.common.ui.javafx.lwfxef.controller.base; -import static java.util.Arrays.asList; - +import java.util.ArrayList; import java.util.List; import org.fortiss.tooling.common.ui.javafx.lwfxef.DiagramCoordinate; @@ -100,21 +99,75 @@ public class DefaultDiagramController extends ControllerBase { return gridMenuItem; } + /** Creates a {@link MenuItem} to zoom in. */ + private MenuItem createZoomInMenuItem(DiagramViewerFeatures features) { + MenuItem zoomInMenuItem = new MenuItem("Zoom in"); + zoomInMenuItem.setOnAction(evt -> { + features.zoomIn(); + }); + return zoomInMenuItem; + } + + /** Creates a {@link MenuItem} to zoom out. */ + private MenuItem createZoomOutMenuItem(DiagramViewerFeatures features) { + MenuItem zoomInMenuItem = new MenuItem("Zoom out"); + zoomInMenuItem.setOnAction(evt -> { + features.zoomOut(); + }); + return zoomInMenuItem; + } + + /** Creates a {@link MenuItem} to set the zoom factor. */ + private MenuItem createZoomFactorMenuItem(DiagramViewerFeatures features, int zoomFactorIndex, + String prefix) { + MenuItem zoomFactorMenuItem = null; + if(zoomFactorIndex < features.getZoomFactors().length) { + double zoomFactor = features.getZoomFactors()[zoomFactorIndex]; + zoomFactorMenuItem = new MenuItem(prefix + zoomFactor * 100 + " %"); + zoomFactorMenuItem.setOnAction(evt -> { + features.setZoomFactorIndex(zoomFactorIndex); + }); + } + return zoomFactorMenuItem; + } + /** {@inheritDoc} */ @Override public List<MenuItem> contextMenuContributions(Node node, DiagramCoordinate diagramLocation) { - Menu menu = new Menu("Display ..."); - ObservableList<MenuItem> menuItems = menu.getItems(); + List<MenuItem> rval = new ArrayList<>(); + Menu gridMenu = new Menu("Display ..."); + ObservableList<MenuItem> gridMenuItems = gridMenu.getItems(); DiagramViewerFeatures features = getViewer().getFeatures(); - menuItems.add(createLinkHighlightingMenuItem(features)); - menuItems.add(createInteractionAreaShadingMenuItem(features)); + gridMenuItems.add(createLinkHighlightingMenuItem(features)); + gridMenuItems.add(createInteractionAreaShadingMenuItem(features)); MenuItem gridMenuItem = createGridMenuItem(features); if(gridMenuItem != null) { - menuItems.add(gridMenuItem); + gridMenuItems.add(gridMenuItem); + } + rval.add(gridMenu); + + Menu zoomMenu = new Menu("Zoom ..."); + ObservableList<MenuItem> zoomMenuItems = zoomMenu.getItems(); + double[] zoomFactors = features.getZoomFactors(); + int normalZoomIndex = -1; + for(int i = 0; i < zoomFactors.length; ++i) { + MenuItem zoomFactorMenuItem = createZoomFactorMenuItem(features, i, ""); + if(zoomFactorMenuItem != null) { + zoomMenuItems.add(zoomFactorMenuItem); + } + if(zoomFactors[i] == 1.0) { + normalZoomIndex = i; + } + } + rval.add(createZoomInMenuItem(features)); + rval.add(createZoomOutMenuItem(features)); + if(normalZoomIndex != -1) { + rval.add(createZoomFactorMenuItem(features, normalZoomIndex, "Zoom ")); } + rval.add(zoomMenu); - return asList(menu); + return rval; } /** {@inheritDoc} */ -- GitLab