]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/NetworkDrawingNode.java
Some more added functionality to simantics district editor etc
[simantics/district.git] / org.simantics.district.network.ui / src / org / simantics / district / network / ui / nodes / NetworkDrawingNode.java
index a9c96e9b37c3e295b452c33eb521374079af9f3d..147442343c13b6b7c3dfa42ab04694757aa4f834 100644 (file)
@@ -24,6 +24,7 @@ import org.simantics.g2d.canvas.IToolMode;
 import org.simantics.g2d.diagram.IDiagram;
 import org.simantics.scenegraph.g2d.G2DNode;
 import org.simantics.scenegraph.g2d.events.EventTypes;
+import org.simantics.scenegraph.g2d.events.KeyEvent.KeyPressedEvent;
 import org.simantics.scenegraph.g2d.events.MouseEvent;
 import org.simantics.scenegraph.g2d.events.MouseEvent.MouseClickEvent;
 import org.simantics.scenegraph.g2d.events.MouseEvent.MouseDoubleClickedEvent;
@@ -35,6 +36,8 @@ public class NetworkDrawingNode extends G2DNode {
 
     private static final long serialVersionUID = -3475301184009620573L;
     
+    private Point2D currentMousePos = null;
+    
     private List<Point2D> nodes = new ArrayList<>();
 
     private Resource diagramResource;
@@ -73,6 +76,8 @@ public class NetworkDrawingNode extends G2DNode {
 
     @Override
     public void render(Graphics2D g2d) {
+        if (nodes.isEmpty())
+            return;
         
         Path2D path = new Path2D.Double();
         Iterator<Point2D> nodeIter = nodes.iterator();
@@ -84,6 +89,8 @@ public class NetworkDrawingNode extends G2DNode {
             Point2D node = nodeIter.next();
             path.lineTo(node.getX(), node.getY());
         }
+        if (currentMousePos != null)
+            path.lineTo(currentMousePos.getX(), currentMousePos.getY());
         
         Color old = g2d.getColor();
         Stroke oldStroke = g2d.getStroke();
@@ -112,7 +119,7 @@ public class NetworkDrawingNode extends G2DNode {
     
     @Override
     public int getEventMask() {
-        return EventTypes.MouseMask;
+        return EventTypes.AnyMask;
     }
     
     @Override
@@ -145,6 +152,9 @@ public class NetworkDrawingNode extends G2DNode {
     }
     
     private void createEdge(Point2D start, Point2D end) {
+        
+        double padding = GeometryUtils.getScale(getTransform());
+        
         double[] startCoords = new double[] { start.getX(), start.getY() };
         double[] endCoords = new double[] { end.getX(), end.getY() };
         
@@ -153,12 +163,12 @@ public class NetworkDrawingNode extends G2DNode {
             
             @Override
             public void perform(WriteGraph graph) throws DatabaseException {
-                builder.create(graph, startCoords, endCoords);
+                builder.create(graph, startCoords, endCoords, padding);
             }
         });
         
     }
-    
+
     @Override
     protected boolean mouseClicked(MouseClickEvent e) {
         // check ToolMode
@@ -168,9 +178,12 @@ public class NetworkDrawingNode extends G2DNode {
                 committed = false;
                 return false;
             }
-            Point2D localPos = NodeUtil.worldToLocal(this, e.controlPosition, new Point2D.Double());
-            nodes.add(new Point2D.Double(localPos.getX(), localPos.getY()));
-            
+            if (e.button == MouseEvent.RIGHT_BUTTON && !nodes.isEmpty()) {
+                nodes.remove(nodes.size() - 1);
+            } else if (e.button == MouseEvent.LEFT_BUTTON) {
+                Point2D localPos = NodeUtil.worldToLocal(this, e.controlPosition, new Point2D.Double());
+                nodes.add(new Point2D.Double(localPos.getX(), localPos.getY()));
+            }
             repaint();
             return true;
         }
@@ -183,6 +196,34 @@ public class NetworkDrawingNode extends G2DNode {
 
     @Override
     protected boolean mouseMoved(MouseMovedEvent e) {
+        IToolMode mode = getToolMode();
+        if (mode == Hints.CONNECTTOOL || e.hasAnyModifier(MouseEvent.ALT_MASK | MouseEvent.ALT_GRAPH_MASK)) {
+            boolean repaint = false;
+            Point2D p = NodeUtil.worldToLocal(this, e.controlPosition, new Point2D.Double());
+            if (participant.pickHoveredElement(p)) {
+                repaint = true;
+            }
+            if (!nodes.isEmpty()) {
+                currentMousePos = p;
+                
+                repaint();
+                return true;
+            }
+            currentMousePos = null;
+            if (repaint == true)
+                repaint();
+        }
         return super.mouseMoved(e);
     }
+    
+    @Override
+    protected boolean keyPressed(KeyPressedEvent e) {
+        if (e.keyCode == java.awt.event.KeyEvent.VK_ESCAPE) {
+            nodes.clear();
+            repaint();
+            return true;
+        }
+        return super.keyPressed(e);
+            
+    }
 }
\ No newline at end of file