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