]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.diagram/src/org/simantics/diagram/participant/RouteGraphConnectTool.java
Moved RouteGraphConnectionClass to org.simantics.g2d.elementclass
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / participant / RouteGraphConnectTool.java
index d1ba2174143f17aec8d14e98cae838136793a6d7..f4add638742601fd3737cdee33fd44776e8a7f1b 100644 (file)
@@ -24,6 +24,7 @@ import java.util.Collection;
 import java.util.Deque;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Set;
 
 import org.simantics.Simantics;
@@ -32,7 +33,6 @@ import org.simantics.db.WriteGraph;
 import org.simantics.db.common.request.WriteRequest;
 import org.simantics.db.exception.DatabaseException;
 import org.simantics.diagram.connection.RouteGraph;
-import org.simantics.diagram.connection.RouteGraphConnectionClass;
 import org.simantics.diagram.connection.RouteLine;
 import org.simantics.diagram.connection.RoutePoint;
 import org.simantics.diagram.connection.RouteTerminal;
@@ -76,6 +76,7 @@ import org.simantics.g2d.element.handler.impl.BranchPointTerminal;
 import org.simantics.g2d.element.impl.Element;
 import org.simantics.g2d.elementclass.FlagClass;
 import org.simantics.g2d.elementclass.FlagHandler;
+import org.simantics.g2d.elementclass.RouteGraphConnectionClass;
 import org.simantics.g2d.participant.TransformUtil;
 import org.simantics.g2d.utils.geom.DirectionSet;
 import org.simantics.scenegraph.g2d.G2DParentNode;
@@ -502,29 +503,31 @@ public class RouteGraphConnectTool extends AbstractMode {
             endFlagNode.setTransform(AffineTransform.getTranslateInstance(mouseCanvasPos.getX(), mouseCanvasPos.getY()));
         }
 
-        TerminalInfo ti = pi.pickTerminal(me.controlPosition);
-        if (ti != null) {
-            Object canConnect = canConnect(ti.e, ti.t);
-            if (canConnect != null) {
-                connectionJudgment = (ConnectionJudgement) canConnect;
+        List<TerminalInfo> tis = pi.pickTerminals(me.controlPosition);
+        tis = TerminalUtil.findNearestOverlappingTerminals(tis);
+        if (!tis.isEmpty()) {
+            for (TerminalInfo ti : tis) {
+                Object canConnect = canConnect(ti.e, ti.t);
 
-                if (!isEndingInFlag() || !TerminalUtil.isSameTerminal(ti, endTerminal)) {
-                    controlPoints.getLast()
-                    .setPosition(ti.posDia)
-                    .setAttachedToTerminal(ti);
+                if (canConnect != null) {
+                    connectionJudgment = (ConnectionJudgement) canConnect;
 
-                    endTerminal = ti;
+                    if (!isEndingInFlag() || !TerminalUtil.isSameTerminal(ti, endTerminal)) {
+                        controlPoints.getLast().setPosition(ti.posDia).setAttachedToTerminal(ti);
 
-                    connect(ti);
-                    
-                }
+                        endTerminal = ti;
+
+                        connect(ti);
 
-                // Make sure that we are ending with a flag if ALT is pressed
-                // and no end terminal is defined.
-                endWithoutTerminal(lastMouseCanvasPos, shouldEndWithFlag(me));
+                    }
 
-                updateSG(new Point2D.Double(ti.posDia.getTranslateX(), ti.posDia.getTranslateY()));
-                return false;
+                    // Make sure that we are ending with a flag if ALT is pressed
+                    // and no end terminal is defined.
+                    endWithoutTerminal(lastMouseCanvasPos, shouldEndWithFlag(me));
+
+                    updateSG(new Point2D.Double(ti.posDia.getTranslateX(), ti.posDia.getTranslateY()));
+                    return false;
+                }
             }
         }