]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network.ui/src/org/simantics/district/network/ui/participants/DNPointerInteractor.java
Implement district features to Simantics platform
[simantics/district.git] / org.simantics.district.network.ui / src / org / simantics / district / network / ui / participants / DNPointerInteractor.java
index e8b8337b72845aed2b75fa119b34c7483c0c9818..acb0acacba55246f739a174c9d3d850de4835201 100644 (file)
@@ -1,22 +1,56 @@
-package org.simantics.district.network.ui.participants;\r
-\r
-import java.awt.geom.Point2D;\r
-import java.util.Set;\r
-\r
-import org.simantics.g2d.canvas.ICanvasParticipant;\r
-import org.simantics.g2d.diagram.participant.pointertool.PointerInteractor;\r
-import org.simantics.g2d.diagram.participant.pointertool.TerminalUtil.TerminalInfo;\r
-import org.simantics.g2d.element.IElement;\r
-\r
-public class DNPointerInteractor extends PointerInteractor {\r
-\r
-    @Override\r
-    protected ICanvasParticipant createConnectTool(TerminalInfo ti, int mouseId, Point2D startCanvasPos) {\r
-        return super.createConnectTool(ti, mouseId, startCanvasPos);\r
-    }\r
-    \r
-    @Override\r
-    protected ICanvasParticipant createTranslateTool(int mouseId, Point2D startCanvasPos, Point2D curCanvasPos, Set<IElement> elementsToDrag) {\r
-        return new DNTranslateMode(startCanvasPos, curCanvasPos, mouseId, elementsToDrag);\r
-    }\r
-}\r
+package org.simantics.district.network.ui.participants;
+
+import java.awt.geom.Point2D;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+import org.simantics.district.network.ui.adapters.DistrictNetworkEdgeElement;
+import org.simantics.district.network.ui.adapters.DistrictNetworkVertexElement;
+import org.simantics.g2d.canvas.ICanvasParticipant;
+import org.simantics.g2d.diagram.handler.PickRequest.PickSorter;
+import org.simantics.g2d.diagram.participant.pointertool.PointerInteractor;
+import org.simantics.g2d.diagram.participant.pointertool.TerminalUtil.TerminalInfo;
+import org.simantics.g2d.element.IElement;
+import org.simantics.scenegraph.g2d.G2DNode;
+
+public class DNPointerInteractor extends PointerInteractor {
+
+    private static class DNPickSorter implements PickSorter {
+
+        @Override
+        public void sort(List<IElement> elements) {
+            Collections.sort(elements, (e1, e2) -> {
+                G2DNode e1node = getNode(e1);
+                G2DNode e2node = getNode(e2);
+                if (e1node.getZIndex() < e2node.getZIndex())
+                    return -1;
+                else if (e1node.getZIndex() > e2node.getZIndex())
+                    return 1;
+                return 0;
+            });
+        }
+
+        private static G2DNode getNode(IElement element) {
+            G2DNode node = element.getHint(DistrictNetworkEdgeElement.KEY_DN_EDGE_NODE);
+            if (node == null)
+                node = element.getHint(DistrictNetworkVertexElement.KEY_DN_VERTEX_NODE);
+            return node;
+        }
+    }
+
+    public DNPointerInteractor() {
+        super(new DNPickSorter());
+    }
+
+    @Override
+    protected ICanvasParticipant createConnectTool(TerminalInfo ti, int mouseId, Point2D startCanvasPos) {
+        return super.createConnectTool(ti, mouseId, startCanvasPos);
+    }
+
+    @Override
+    protected ICanvasParticipant createTranslateTool(int mouseId, Point2D startCanvasPos, Point2D curCanvasPos,
+            Set<IElement> elementsToDrag) {
+        return new DNTranslateMode(startCanvasPos, curCanvasPos, mouseId, elementsToDrag);
+    }
+}