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 35d4a47b22d51108206b17a0c5fd46a6d06a71d1..798154d110a99284d25310518bcd99884153e67b 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 @@ -3,7 +3,7 @@ ClickControllerBase.java 8e5861ed5f9318008ad0fdd5497ed320cd5bd647 GREEN ContentAnchorageMoveControllerBase.java c18e7915ce23e124757f5b736086ecc46694800a GREEN ControllerBase.java 0ab6cf1b36cf3618a70c1666fd8747c59e90dbc6 GREEN DefaultDiagramController.java 0e083b89a08f63967102a384d66ebc1d64d203af GREEN -DelegatingContentAnchorageController.java 2e3b1b4e14402a3503233f816b21ef3e4aa09edc GREEN +DelegatingContentAnchorageController.java 1889628a346a2183082ffe213978f9d15a949494 GREEN DragControllerBase.java b15ff874304f679fe494d85f57cc8cbe4d0d1d15 GREEN DraggingUtils.java 95117e2ea4c36b6c6a31f8088bb95b484e0e6612 GREEN LinkControllerBase.java c2232100230997f1ba7f2686a2f0626f85d223ed GREEN diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/controller/base/DelegatingContentAnchorageController.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/controller/base/DelegatingContentAnchorageController.java index 2e3b1b4e14402a3503233f816b21ef3e4aa09edc..1889628a346a2183082ffe213978f9d15a949494 100644 --- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/controller/base/DelegatingContentAnchorageController.java +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/controller/base/DelegatingContentAnchorageController.java @@ -12,14 +12,20 @@ package org.fortiss.tooling.common.ui.javafx.lwfxef.controller.base; import static org.fortiss.tooling.common.ui.javafx.lwfxef.EDragGesture.MOVE; import org.fortiss.tooling.common.ui.javafx.lwfxef.DiagramCoordinate; +import org.fortiss.tooling.common.ui.javafx.lwfxef.DiagramViewer; import org.fortiss.tooling.common.ui.javafx.lwfxef.EDragGesture; +import org.fortiss.tooling.common.ui.javafx.lwfxef.change.Change; import org.fortiss.tooling.common.ui.javafx.lwfxef.controller.IController; import org.fortiss.tooling.common.ui.javafx.lwfxef.controller.IDragController; +import org.fortiss.tooling.common.ui.javafx.lwfxef.controller.IKeyPressController; import org.fortiss.tooling.common.ui.javafx.lwfxef.mvc.IContentAnchorageMVCBundle; import org.fortiss.tooling.common.ui.javafx.lwfxef.mvc.IContentMVCBundle; +import org.fortiss.tooling.common.ui.javafx.lwfxef.mvc.IMVCBundle; import javafx.scene.Cursor; import javafx.scene.Node; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; /** * Default {@link IController} implementation for moving anchorage visuals attached to a parent @@ -56,6 +62,46 @@ public class DelegatingContentAnchorageController extends ControllerBase { return super.getDragController(gesture, node, diagramLocation); } + /** {@inheritDoc} */ + @Override + public IKeyPressController getKeyPressController(Node node, + DiagramCoordinate lastMouseLocation) { + return defaultKeyPressControllerWithMove; + } + + /** + * The default implementation for key press controller allowing move with cursor keys and delete + * with the delete key. + */ + private final IKeyPressController defaultKeyPressControllerWithMove = + new IKeyPressController() { + @Override + public Change keyEvent(KeyEvent event, IMVCBundle bundle, Node source, + DiagramCoordinate mouseLocation) { + DiagramViewer viewer = getViewer(); + KeyCode code = event.getCode(); + if(code == KeyCode.DELETE) { + return new Change() { + @Override + public void applyChange() { + delete(); + } + }; + } + if(code == KeyCode.A && event.isControlDown()) { + viewer.selectAll(); + return null; + } + if(allowMove()) { + if(code == KeyCode.UP || code == KeyCode.DOWN || code == KeyCode.LEFT || + code == KeyCode.RIGHT) { + return keyMove(code); + } + } + return null; + } + }; + /** {@inheritDoc} */ @Override public Cursor getCurrentCursor(Node node, DiagramCoordinate diagramLocation) { @@ -70,4 +116,15 @@ public class DelegatingContentAnchorageController extends ControllerBase { protected boolean allowMove() { return true; } + + /** + * Performs the keyboard move by returning a corresponding {@link Change}. + * + * @param code + * the arrow key code + * @return the {@link Change}, which executes the move operation. + */ + protected Change keyMove(KeyCode code) { + return null; + } }