]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.diagram/src/org/simantics/diagram/participant/PointerInteractor2.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / participant / PointerInteractor2.java
diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/participant/PointerInteractor2.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/participant/PointerInteractor2.java
new file mode 100644 (file)
index 0000000..64b3647
--- /dev/null
@@ -0,0 +1,117 @@
+/*******************************************************************************\r
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
+ * in Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ *     VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.diagram.participant;\r
+\r
+import java.awt.geom.Point2D;\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+import org.simantics.g2d.canvas.Hints;\r
+import org.simantics.g2d.canvas.ICanvasParticipant;\r
+import org.simantics.g2d.canvas.IToolMode;\r
+import org.simantics.g2d.diagram.DiagramHints;\r
+import org.simantics.g2d.diagram.participant.pointertool.PointerInteractor;\r
+import org.simantics.g2d.diagram.participant.pointertool.TerminalUtil;\r
+import org.simantics.g2d.diagram.participant.pointertool.TerminalUtil.TerminalInfo;\r
+import org.simantics.g2d.element.ElementClassProviders;\r
+import org.simantics.g2d.element.IElement;\r
+import org.simantics.g2d.element.IElementClassProvider;\r
+import org.simantics.scenegraph.g2d.events.MouseEvent;\r
+import org.simantics.scenegraph.g2d.snap.ISnapAdvisor;\r
+\r
+/**\r
+ * Adds support for drawing connections through {@link ConnectTool2} and\r
+ * {@link RouteGraphConnectTool} to {@link PointerInteractor}.\r
+ * \r
+ * @author Tuukka Lehtonen\r
+ */\r
+public class PointerInteractor2 extends PointerInteractor {\r
+\r
+    public PointerInteractor2() {\r
+        this(true, true, true, false, true, false, ElementClassProviders.staticProvider(null));\r
+    }\r
+\r
+    public PointerInteractor2(boolean clickSelect, boolean boxSelect, boolean dragElement, boolean dndDragElement, boolean connect, IElementClassProvider newConnectionClassProvider) {\r
+        this(clickSelect, boxSelect, dragElement, dndDragElement, connect, false, newConnectionClassProvider);\r
+    }\r
+\r
+    public PointerInteractor2(boolean clickSelect, boolean boxSelect, boolean dragElement, boolean dndDragElement, boolean connect, boolean doubleClickEdit, IElementClassProvider newConnectionClassProvider) {\r
+        super(clickSelect, boxSelect, dragElement, dndDragElement, connect, doubleClickEdit, newConnectionClassProvider, null); \r
+    }\r
+\r
+    @Override\r
+    protected ICanvasParticipant createConnectTool(TerminalInfo ti, int mouseId, Point2D startCanvasPos) {\r
+        return new ConnectTool2(ti, mouseId, startCanvasPos);\r
+    }\r
+\r
+    @Override\r
+    protected ICanvasParticipant createConnectToolWithTerminals(List<TerminalInfo> tis, int mouseId, Point2D startCanvasPos) {\r
+        return new ConnectTool2(tis, mouseId, startCanvasPos);\r
+    }\r
+\r
+    protected ICanvasParticipant initiateRouteGraphConnectTool(RouteGraphTarget target, int mouseId) {\r
+        return new RouteGraphConnectTool(target, mouseId);\r
+    }\r
+\r
+    @Override\r
+    protected ICanvasParticipant createTranslateTool(int mouseId, Point2D startCanvasPos, Point2D curCanvasPos, Set<IElement> elementsToDrag) {\r
+        return new TranslateMode2(startCanvasPos, curCanvasPos, mouseId, elementsToDrag);\r
+    }\r
+\r
+    protected boolean checkInitiateConnectTool(MouseEvent me, Point2D mouseCanvasPos) {\r
+        // Pick Terminal\r
+        IToolMode mode = getToolMode();\r
+        if (mode == Hints.CONNECTTOOL || me.hasAnyModifier(MouseEvent.ALT_MASK | MouseEvent.ALT_GRAPH_MASK)) {\r
+            //IConnectionAdvisor advisor = diagram.getHint(DiagramHints.CONNECTION_ADVISOR);\r
+            List<TerminalInfo> tis = pickTerminals(me.controlPosition);\r
+\r
+            ICanvasParticipant bsi = null;\r
+\r
+            if (tis.isEmpty()) {\r
+                // Look for potential connection to branch.\r
+                RouteGraphTarget cp = RouteGraphConnectTool.pickRouteGraphConnection(diagram,\r
+                        getCanvasPickShape(me.controlPosition), getPickDistance());\r
+                if (cp != null) {\r
+                    bsi = initiateRouteGraphConnectTool(cp, me.mouseId);\r
+                } else {\r
+                    ISnapAdvisor snapAdvisor = getHint(DiagramHints.SNAP_ADVISOR);\r
+                    if (snapAdvisor != null)\r
+                        snapAdvisor.snap(mouseCanvasPos);\r
+\r
+                    // Start connection out of thin air, without a terminal.\r
+                    bsi = createConnectTool(null, me.mouseId, mouseCanvasPos);\r
+                }\r
+            } else {\r
+                // Find the terminals that are equally close\r
+                tis = TerminalUtil.findNearestOverlappingTerminals(tis);\r
+                int tcount = tis.size();\r
+                if (tcount > 0) {\r
+                    if (tcount == 1) {\r
+                        bsi = createConnectTool(tis.get(0), me.mouseId, mouseCanvasPos);\r
+                    } else {\r
+                        //System.out.println("many terminals (" + tcount + "):\n" + EString.implode(tis));\r
+                        bsi = createConnectToolWithTerminals(tis, me.mouseId, mouseCanvasPos);\r
+                    }\r
+                }\r
+            }\r
+\r
+            // Did we catch anything?\r
+            if (bsi != null) {\r
+                startConnectTool(bsi);\r
+                return true;\r
+            }\r
+        }\r
+\r
+        return false;\r
+    }\r
+\r
+}\r