X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=bundles%2Forg.simantics.diagram%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Fparticipant%2FRouteGraphConnectTool.java;h=8f99207e19c77cb00f55288f8bd4d218aca06cdf;hb=refs%2Fchanges%2F69%2F1969%2F7;hp=2c6c9961a822ea5d539e75a216b2807226b67346;hpb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;p=simantics%2Fplatform.git
diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/participant/RouteGraphConnectTool.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/participant/RouteGraphConnectTool.java
index 2c6c9961a..8f99207e1 100644
--- a/bundles/org.simantics.diagram/src/org/simantics/diagram/participant/RouteGraphConnectTool.java
+++ b/bundles/org.simantics.diagram/src/org/simantics/diagram/participant/RouteGraphConnectTool.java
@@ -85,6 +85,7 @@ import org.simantics.scenegraph.g2d.events.KeyEvent.KeyPressedEvent;
import org.simantics.scenegraph.g2d.events.MouseEvent;
import org.simantics.scenegraph.g2d.events.MouseEvent.MouseButtonEvent;
import org.simantics.scenegraph.g2d.events.MouseEvent.MouseButtonPressedEvent;
+import org.simantics.scenegraph.g2d.events.MouseEvent.MouseButtonReleasedEvent;
import org.simantics.scenegraph.g2d.events.MouseEvent.MouseMovedEvent;
import org.simantics.scenegraph.g2d.events.command.CommandEvent;
import org.simantics.scenegraph.g2d.events.command.Commands;
@@ -94,7 +95,6 @@ import org.simantics.scenegraph.g2d.nodes.connection.RouteGraphNode;
import org.simantics.scenegraph.g2d.snap.ISnapAdvisor;
import org.simantics.scenegraph.utils.GeometryUtils;
import org.simantics.structural2.modelingRules.ConnectionJudgement;
-import org.simantics.utils.datastructures.Callback;
import org.simantics.utils.datastructures.Pair;
import org.simantics.utils.datastructures.Triple;
import org.simantics.utils.logging.TimeLogger;
@@ -478,6 +478,10 @@ public class RouteGraphConnectTool extends AbstractMode {
if (me instanceof MouseButtonPressedEvent)
return processMouseButtonPress((MouseButtonPressedEvent) me);
+ // #7653: Support creating connections between terminals without lifting mouse button in between.
+ if (me instanceof MouseButtonReleasedEvent)
+ return processMouseButtonRelease((MouseButtonReleasedEvent) me);
+
return false;
}
@@ -567,10 +571,8 @@ public class RouteGraphConnectTool extends AbstractMode {
protected void disconnect(Point2D mouseCanvasPos) {
setEndTerminal(mouseCanvasPos.getX(), mouseCanvasPos.getY(), null, 0xf);
}
-
- protected boolean processMouseButtonPress(MouseButtonPressedEvent e) {
- MouseButtonEvent me = e;
+ protected boolean processMouseButtonPress(MouseButtonEvent me) {
// Do nothing before the mouse has moved at least a little.
// This prevents the user from ending the connection right where
// it started.
@@ -586,9 +588,7 @@ public class RouteGraphConnectTool extends AbstractMode {
snapAdvisor.snap(mouseCanvasPos);
// Clicked on an allowed end terminal. End connection & end mode.
- if (isEndTerminalDefined()) {
- createConnection();
- remove();
+ if (tryEndConnection()) {
return true;
} else {
// Finish connection in thin air only if the
@@ -618,6 +618,28 @@ public class RouteGraphConnectTool extends AbstractMode {
return false;
}
+ private int mouseLeftReleaseCount = 0;
+
+ protected boolean processMouseButtonRelease(MouseButtonReleasedEvent me) {
+ if (me.button == MouseEvent.LEFT_BUTTON
+ && ++mouseLeftReleaseCount == 1) {
+ return tryEndConnection();
+ }
+ return false;
+ }
+
+ /**
+ * @return true
if connection was successfully ended
+ */
+ private boolean tryEndConnection() {
+ if (isEndTerminalDefined()) {
+ createConnection();
+ remove();
+ return true;
+ }
+ return false;
+ }
+
protected boolean cancelPreviousBend() {
if (!routePointsAllowed())
return false;
@@ -765,12 +787,9 @@ public class RouteGraphConnectTool extends AbstractMode {
Resource attachToLine = RouteGraphConnection.deserialize(graph, attachedToRouteLine.getData());
builder.attachToRouteGraph(graph, judgment, connection, attachToLine, controlPoints, endTerminal, FlagClass.Type.Out);
}
- }, new Callback() {
- @Override
- public void run(DatabaseException parameter) {
- if (parameter != null)
- ExceptionUtils.logAndShowError(parameter);
- }
+ }, e -> {
+ if (e != null)
+ ExceptionUtils.logAndShowError(e);
});
}