Add customisation possibilities for SelectionNode 47/2447/1
authorAntti Villberg <antti.villberg@semantum.fi>
Mon, 12 Nov 2018 07:19:58 +0000 (09:19 +0200)
committerAntti Villberg <antti.villberg@semantum.fi>
Mon, 12 Nov 2018 07:19:58 +0000 (09:19 +0200)
gitlab #191

Change-Id: I400ef4099128845792498377e058103e8fbff065

bundles/org.simantics.g2d/src/org/simantics/g2d/diagram/participant/ElementPainter.java
bundles/org.simantics.g2d/src/org/simantics/g2d/gallery/GalleryViewer.java
bundles/org.simantics.modeling/src/org/simantics/modeling/SCLScenegraph.java
bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/SelectionNode.java

index 6e9ff85b1f62c9fb75f4552e346c956cad80113a..71b87c7141006cd5f114c7e779a047af93e785b9 100644 (file)
@@ -137,7 +137,7 @@ public class ElementPainter extends AbstractDiagramParticipant implements Compos
      * ElementPainter.
      */
     public static interface ISelectionProvider {
-        public void init(final IElement e, final G2DParentNode parentNode, final String nodeId,
+        public void init(int selectionId, final IElement e, final G2DParentNode parentNode, final String nodeId,
                 final AffineTransform transform, final Rectangle2D bounds, final Color color);
     }
 
@@ -953,7 +953,7 @@ public class ElementPainter extends AbstractDiagramParticipant implements Compos
                     continue;
 
                 if (NodeUtil.needSelectionPaint(elementNode))
-                    paintSelectionFrame(elementNode, selectionNode, el, color);
+                    paintSelectionFrame(selectionId, elementNode, selectionNode, el, color);
 
                 nodesUpdated = true;
             }
@@ -999,7 +999,7 @@ public class ElementPainter extends AbstractDiagramParticipant implements Compos
                 createSelectionReference(selectionsNode, elementNode);
 
                 if (NodeUtil.needSelectionPaint(elementNode))
-                    paintSelectionFrame(en, selectionNode, e, color);
+                    paintSelectionFrame(selectionId, en, selectionNode, e, color);
 
             } else {
                 if (elementNode != null) {
@@ -1027,7 +1027,7 @@ public class ElementPainter extends AbstractDiagramParticipant implements Compos
         return result;
     }
 
-    public void paintSelectionFrame(G2DParentNode elementNode, G2DParentNode selectionNode, final IElement e, Color color) {
+    public void paintSelectionFrame(int selectionId, G2DParentNode elementNode, G2DParentNode selectionNode, final IElement e, Color color) {
         // The element node already has the correct transform.
         AffineTransform selectionTransform = ElementUtils.getTransform(e);// no it doesnt ... new AffineTransform();
         Shape shape = ElementUtils.getElementShapeOrBounds(e);
@@ -1104,10 +1104,10 @@ public class ElementPainter extends AbstractDiagramParticipant implements Compos
 
         ISelectionProvider provider = this.getContext().getDefaultHintContext().getHint(KEY_SELECTION_PROVIDER);
         if (provider != null) {
-            provider.init(e, selectionNode, getNodeId("shape", e), selectionTransform, bounds, color);
+            provider.init(selectionId, e, selectionNode, getNodeId("shape", e), selectionTransform, bounds, color);
         } else {
             SelectionNode s = selectionNode.getOrCreateNode(getNodeId("shape", e), SelectionNode.class);
-            s.init(selectionTransform, bounds, color);
+            s.init(selectionId, selectionTransform, bounds, color);
             Double paddingFactor = diagram.getHint(DiagramHints.SELECTION_PADDING_SCALE_FACTOR);
             if (paddingFactor != null)
                 s.setPaddingFactor(paddingFactor);
index ce5687e8486e05b38f4ca2b28efd72fa8af7b9c7..5bbe9f26e7de24047b90c875f8e66809d542b897 100644 (file)
@@ -673,7 +673,7 @@ public class GalleryViewer extends ContentViewer {
 
     static class GalleryItemPainter extends ElementPainter {
         @Override
-        public void paintSelectionFrame(G2DParentNode elementNode, G2DParentNode selectionNode, IElement e, Color color) {
+        public void paintSelectionFrame(int selectionId, G2DParentNode elementNode, G2DParentNode selectionNode, IElement e, Color color) {
             final Shape outline = ElementUtils.getElementBoundsOnDiagram(e);
             Rectangle2D bounds = outline.getBounds2D();
             GeometryUtils.expandRectangle(bounds, 2, 2, 2, 2);
index 55ed12656131c0629595cd7ded70c4f4bd064234..630e41abe6326de3d2fd426a1e94cc012a900e72 100644 (file)
@@ -821,7 +821,7 @@ public class SCLScenegraph {
                 parentBuilder.append(SELECTION_SECTION, "\n</g>");
                 parentBuilder.append(MAIN_SECTION, "\n</g>");
                 
-            } else if (node instanceof SelectionNode) {
+            } else if (isSelection0(node)) {
                 
                 SelectionNode n = (SelectionNode)node;
                 SingleElementNode parentSEN = (SingleElementNode)NodeUtil.getNearestParentOfType(node, SingleElementNode.class);
@@ -849,6 +849,14 @@ public class SCLScenegraph {
                     parentBuilder2.append(SELECTION_MASK_SECTION,"\n</g>");
                    
                 }
+            } else if (node instanceof SelectionNode) {
+
+                Element doc = renderSVGNode(svgGenerator, (IG2DNode)node);
+                String svg = printSVGDocument(doc);
+                parentBuilder.append(MAIN_SECTION, "<g>");
+                parentBuilder.append(MAIN_SECTION, svg);
+                parentBuilder.append(MAIN_SECTION, "\n</g>");
+
             } else if (node instanceof SVGNode) {
                 SVGNode svg = (SVGNode)node;
                 parentBuilder.append(MAIN_SECTION, svg.getSVGText());
@@ -882,6 +890,17 @@ public class SCLScenegraph {
 
         }
         
+        private boolean isSelection0(IG2DNode node) {
+            
+            if(node instanceof SelectionNode) {
+                SelectionNode sn = (SelectionNode)node;
+                return sn.getSelectionId() == 0;
+            } else {
+                return false;
+            }
+            
+        }
+        
         private RenderSVGContext getParentBuilder(IG2DNode node) {
             
             INode parentSEN = NodeUtil.getNearestParentOfType(node, SingleElementNode.class);
index bd09c45745be9ab675d25f0bb073caca8cc85b0d..98aaebb250c308bda1f33fc42800826b61926592 100644 (file)
  *******************************************************************************/
 package org.simantics.scenegraph.g2d.nodes;
 
+import java.awt.AlphaComposite;
 import java.awt.BasicStroke;
 import java.awt.Color;
+import java.awt.Composite;
 import java.awt.Graphics2D;
 import java.awt.geom.AffineTransform;
 import java.awt.geom.Rectangle2D;
@@ -35,9 +37,14 @@ public class SelectionNode extends G2DNode implements Decoration {
     protected transient Rectangle2D rect;
     protected transient BasicStroke scaledStroke;
     protected transient double previousScaleRecip = Double.NaN;
-    private boolean ignore = false;
-    private double paddingFactor = 5.0;
+    protected boolean ignore = false;
+    protected double paddingFactor = 5.0;
+    protected int selectionId;
 
+    public int getSelectionId() {
+        return selectionId;
+    }
+    
     public void setIgnore(boolean value) {
         ignore = value;
     }
@@ -47,12 +54,17 @@ public class SelectionNode extends G2DNode implements Decoration {
     }
   
     @SyncField({"transform", "bounds", "color"})
-    public void init(AffineTransform transform, Rectangle2D bounds, Color color) {
+    public void init(int selectionId, AffineTransform transform, Rectangle2D bounds, Color color) {
+        this.selectionId = selectionId;
         this.transform = transform;
         this.bounds = bounds;
         this.color = color;
     }
 
+    public void init(AffineTransform transform, Rectangle2D bounds, Color color) {
+        init(0, transform, bounds, color);
+    }
+
     @Override
     public void render(Graphics2D g) {
         if (bounds == null) return;