]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.diagram.connection/src/org/simantics/diagram/connection/RouteTerminal.java
Support for dynamic transforms for both elements and terminals
[simantics/platform.git] / bundles / org.simantics.diagram.connection / src / org / simantics / diagram / connection / RouteTerminal.java
index 2f3fc9f86ec7ce7668c0dc12e87f741a4ae4c74e..c43c7de1c4996914d8ac6bbc5c208e4c9b2c64ff 100644 (file)
@@ -13,6 +13,7 @@ package org.simantics.diagram.connection;
 
 import gnu.trove.map.hash.THashMap;
 
+import java.awt.geom.AffineTransform;
 import java.awt.geom.Rectangle2D;
 import java.io.PrintStream;
 import java.io.Serializable;
@@ -39,13 +40,14 @@ public class RouteTerminal extends RoutePoint implements RouteNode, Serializable
     private ILineEndStyle style;
     private ILineEndStyle dynamicStyle;
     private boolean routeToBounds;
+    private RouteTerminalPosition dynamicPosition;
 
     RouteLine line;
 
     RouteTerminal(double x, double y, double minX, double minY,
             double maxX, double maxY, int allowedDirections,
             boolean routeToBounds,
-            ILineEndStyle style) {
+            ILineEndStyle style, RouteTerminalPosition dynamicPosition) {
         super(x, y);
         this.minX = minX;
         this.minY = minY;
@@ -54,8 +56,9 @@ public class RouteTerminal extends RoutePoint implements RouteNode, Serializable
         this.allowedDirections = allowedDirections;
         this.routeToBounds = routeToBounds;
         this.style = style;
+        this.dynamicPosition = dynamicPosition;
     }
-    
+
     @Override
     public void setData(Object data) {
         this.data = data;
@@ -378,7 +381,7 @@ public class RouteTerminal extends RoutePoint implements RouteNode, Serializable
        RouteTerminal copy = (RouteTerminal)map.get(this);
        if(copy == null) {      
                copy = new RouteTerminal(x,  y, minX, minY, maxX, maxY, 
-                               allowedDirections, routeToBounds, style);
+                               allowedDirections, routeToBounds, style, dynamicPosition);
                copy.setDynamicStyle(dynamicStyle);
                map.put(this, copy);
                copy.data = data;
@@ -449,4 +452,25 @@ public class RouteTerminal extends RoutePoint implements RouteNode, Serializable
     public void setDynamicStyle(ILineEndStyle dynamicStyle) {
                this.dynamicStyle = dynamicStyle;
        }
+
+    public RouteTerminalPosition getDynamicPosition() {
+        return dynamicPosition;
+    }
+
+    public boolean updateDynamicPosition() {
+        boolean changed = false;
+        if (dynamicPosition != null) {
+            AffineTransform tr = dynamicPosition.getTransform();
+            if (tr != null) {
+                double nx = tr.getTranslateX();
+                changed |= x != nx;
+                x = nx;
+                double ny = tr.getTranslateY();
+                changed |= y != ny;
+                y = ny;
+            }
+        }
+        return changed;
+    }
+
 }