X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.district.network.ui%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Fnetwork%2Fui%2Fnodes%2FNetworkDrawingNode.java;h=147442343c13b6b7c3dfa42ab04694757aa4f834;hb=16ee01dc5a40981c58fd5b478b89552e5814e8bb;hp=a9c96e9b37c3e295b452c33eb521374079af9f3d;hpb=9dace20146d19dd0541480a80fd289de45b6cfc8;p=simantics%2Fdistrict.git diff --git a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/NetworkDrawingNode.java b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/NetworkDrawingNode.java index a9c96e9b..14744234 100644 --- a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/NetworkDrawingNode.java +++ b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/NetworkDrawingNode.java @@ -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 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 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