X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.district.network.ui%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Fnetwork%2Fui%2Fadapters%2FDistrictNetworkVertexElement.java;h=7be6a14faa659abb28df213e694b14e9094dd848;hb=refs%2Fchanges%2F54%2F2654%2F1;hp=3e64bc3193957d249df2d6371cc5dfbcbc422d65;hpb=16ee01dc5a40981c58fd5b478b89552e5814e8bb;p=simantics%2Fdistrict.git diff --git a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/adapters/DistrictNetworkVertexElement.java b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/adapters/DistrictNetworkVertexElement.java index 3e64bc31..7be6a14f 100644 --- a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/adapters/DistrictNetworkVertexElement.java +++ b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/adapters/DistrictNetworkVertexElement.java @@ -1,5 +1,6 @@ package org.simantics.district.network.ui.adapters; +import java.awt.Color; import java.awt.geom.AffineTransform; import java.awt.geom.Rectangle2D; @@ -12,7 +13,9 @@ import org.simantics.g2d.element.handler.InternalSize; import org.simantics.g2d.element.handler.SceneGraph; import org.simantics.g2d.element.handler.impl.DefaultTransform; import org.simantics.g2d.element.handler.impl.SimpleElementLayers; +import org.simantics.scenegraph.INode; import org.simantics.scenegraph.g2d.G2DParentNode; +import org.simantics.scenegraph.g2d.nodes.SVGNode; import org.simantics.utils.datastructures.hints.IHintContext.Key; import org.simantics.utils.datastructures.hints.IHintContext.KeyOf; @@ -20,13 +23,15 @@ public class DistrictNetworkVertexElement { public static final Key KEY_DN_VERTEX = new KeyOf(DistrictNetworkVertex.class, "DN_VERTEX"); public static final Key KEY_DN_VERTEX_NODE = new SceneGraphNodeKey(DistrictNetworkVertexNode.class, "DN_VERTEX_NODE"); + public static final Key KEY_DN_VERTEX_SYMBOL_NODE = new SceneGraphNodeKey(SVGNode.class, "DN_VERTEX_SYMBOL_NODE"); public static final ElementClass CLASS = ElementClass.compile( DefaultTransform.INSTANCE, DNVertexInternalSize.INSTANCE, DNVertexSceneGraph.INSTANCE, - SimpleElementLayers.INSTANCE + SimpleElementLayers.INSTANCE, + DistrictNetworkAdditionalColor.INSTANCE ).setId(DistrictNetworkVertexElement.class.getSimpleName()); static final class DNVertexSceneGraph implements SceneGraph { @@ -36,19 +41,25 @@ public class DistrictNetworkVertexElement { private static final long serialVersionUID = 8894367073815556871L; @Override - public void init(IElement edgeElement, G2DParentNode parent) { - DistrictNetworkVertex vertex = edgeElement.getHint(KEY_DN_VERTEX); + public void init(IElement vertexElement, G2DParentNode parent) { + DistrictNetworkVertex vertex = vertexElement.getHint(KEY_DN_VERTEX); if (vertex == null) { - cleanup(edgeElement); + cleanup(vertexElement); } else { - DistrictNetworkVertexNode node = edgeElement.getHint(KEY_DN_VERTEX_NODE); + DistrictNetworkVertexNode node = vertexElement.getHint(KEY_DN_VERTEX_NODE); if (node == null) { - node = parent.addNode(ElementUtils.generateNodeId(edgeElement), DistrictNetworkVertexNode.class); - edgeElement.setHint(KEY_DN_VERTEX_NODE, node); + node = parent.addNode(ElementUtils.generateNodeId(vertexElement), DistrictNetworkVertexNode.class); + vertexElement.setHint(KEY_DN_VERTEX_NODE, node); + + SVGNode symbol = node.addNode(ElementUtils.generateNodeId(vertexElement), SVGNode.class); + vertexElement.setHint(KEY_DN_VERTEX_SYMBOL_NODE, symbol); } + node.setVertex(vertex); - AffineTransform at = ElementUtils.getTransform(edgeElement); + node.setColor(ElementUtils.getAdditionalColor(vertexElement, Color.BLUE)); + + AffineTransform at = ElementUtils.getTransform(vertexElement); if(at != null) node.setTransform(at); } @@ -56,8 +67,13 @@ public class DistrictNetworkVertexElement { @Override public void cleanup(IElement edge) { - ElementUtils.removePossibleNode(edge, KEY_DN_VERTEX_NODE); + ElementUtils.removePossibleNode(edge, KEY_DN_VERTEX_SYMBOL_NODE); + INode node = ElementUtils.removePossibleNode(edge, KEY_DN_VERTEX_NODE); + if (node != null) + node.getParent().remove(); + edge.removeHint(KEY_DN_VERTEX_NODE); + edge.removeHint(KEY_DN_VERTEX_SYMBOL_NODE); } } @@ -69,9 +85,9 @@ public class DistrictNetworkVertexElement { @Override public Rectangle2D getBounds(IElement e, Rectangle2D size) { - if (size == null) - size = new Rectangle2D.Double(); - size.setFrame(-0.5, -0.5, 1, 1); + DistrictNetworkVertexNode node = e.getHint(KEY_DN_VERTEX_NODE); + Rectangle2D boundsInLocal = node.getBoundsInLocal(); + size.setFrame(boundsInLocal); return size; }