]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.diagram/src/org/simantics/diagram/scl/SymbolLibrary.java
SCL bindings for symbol library
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / scl / SymbolLibrary.java
diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/scl/SymbolLibrary.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/scl/SymbolLibrary.java
new file mode 100644 (file)
index 0000000..6820cad
--- /dev/null
@@ -0,0 +1,100 @@
+package org.simantics.diagram.scl;
+
+import java.awt.Color;
+
+import org.simantics.diagram.symbollibrary.ISymbolItem;
+import org.simantics.g2d.canvas.Hints;
+import org.simantics.g2d.canvas.ICanvasContext;
+import org.simantics.g2d.canvas.impl.CanvasContext;
+import org.simantics.g2d.diagram.DiagramClass;
+import org.simantics.g2d.diagram.DiagramHints;
+import org.simantics.g2d.diagram.IDiagram;
+import org.simantics.g2d.diagram.handler.PickRequest.PickPolicy;
+import org.simantics.g2d.diagram.handler.layout.FlowLayout;
+import org.simantics.g2d.diagram.impl.Diagram;
+import org.simantics.g2d.diagram.participant.DiagramParticipant;
+import org.simantics.g2d.diagram.participant.ElementInteractor;
+import org.simantics.g2d.diagram.participant.ElementPainter;
+import org.simantics.g2d.diagram.participant.Selection;
+import org.simantics.g2d.diagram.participant.pointertool.PointerInteractor;
+import org.simantics.g2d.element.ElementClass;
+import org.simantics.g2d.element.ElementHints;
+import org.simantics.g2d.element.IElement;
+import org.simantics.g2d.element.handler.StaticSymbol;
+import org.simantics.g2d.element.impl.Element;
+import org.simantics.g2d.gallery.GalleryItemSGNode;
+import org.simantics.g2d.image.DefaultImages;
+import org.simantics.g2d.image.Image;
+import org.simantics.g2d.participant.BackgroundPainter;
+import org.simantics.g2d.participant.KeyToCommand;
+import org.simantics.g2d.participant.KeyUtil;
+import org.simantics.g2d.participant.MouseUtil;
+import org.simantics.g2d.participant.SymbolUtil;
+import org.simantics.g2d.participant.TransformUtil;
+import org.simantics.g2d.tooltip.TooltipParticipant;
+import org.simantics.scenegraph.g2d.events.command.CommandKeyBinding;
+import org.simantics.utils.datastructures.hints.IHintContext;
+import org.simantics.utils.threads.AWTThread;
+import org.simantics.utils.threads.IThreadWorkQueue;
+
+public class SymbolLibrary {
+       
+       public static ICanvasContext create(ISymbolItem item) {
+               IDiagram diagram =  Diagram.spawnNew(DiagramClass.DEFAULT);
+        diagram.setHint(FlowLayout.HGAP, 5.0);
+        diagram.setHint(FlowLayout.VGAP, 5.0);
+        IThreadWorkQueue thread = AWTThread.getThreadAccess();
+        CanvasContext ctx = new CanvasContext(thread);
+        initializeCanvasContext(ctx);
+        IHintContext hintCtx = ctx.getDefaultHintContext();
+        hintCtx.setHint(DiagramHints.KEY_DIAGRAM, diagram);
+        
+        ElementClass ec = item.getElementClass(diagram);
+        StaticSymbol ss = ec.getSingleItem(StaticSymbol.class);
+        Image source = ss == null ? DefaultImages.UNKNOWN2.get() : ss.getImage();
+        
+        IElement element = Element.spawnNew(ec);
+        element.setHint(ElementHints.KEY_OBJECT, item);
+        element.setHint(GalleryItemSGNode.KEY_IMAGE, source);
+        diagram.addElement(element);
+        
+        return ctx;
+       }
+       
+        private static void initializeCanvasContext(final CanvasContext canvasContext) {
+               // Create canvas context and a layer of interactors
+               final IHintContext h = canvasContext.getDefaultHintContext();
+
+               // Support & Util Participants
+               canvasContext.add( new TransformUtil() );
+
+               canvasContext.add( new MouseUtil() );
+               canvasContext.add( new KeyUtil() );
+               canvasContext.add( new SymbolUtil() );
+
+               // Grid & Ruler & Background
+               h.setHint(Hints.KEY_BACKGROUND_COLOR, Color.WHITE);
+               canvasContext.add( new BackgroundPainter() );
+
+               // Key bindings
+               canvasContext.add( new KeyToCommand( CommandKeyBinding.DEFAULT_BINDINGS ) );
+
+               ////// Diagram Participants //////
+               PointerInteractor pi = new PointerInteractor(true, true, false, true, false, null);
+               pi.setBoxSelectMode(PickPolicy.PICK_INTERSECTING_OBJECTS);
+               canvasContext.add( pi );
+               canvasContext.add( new Selection() );
+               canvasContext.add( new DiagramParticipant() );
+               canvasContext.add( new ElementPainter() );
+               canvasContext.add( new ElementInteractor() );
+               canvasContext.add( new TooltipParticipant());
+
+               h.setHint(ElementPainter.KEY_SELECTION_FRAME_COLOR, Color.WHITE);
+               h.setHint(ElementPainter.KEY_SELECTION_CONTENT_COLOR, new Color(0.7f, 0.7f, 1.f, 0.5f));
+               h.setHint(Hints.KEY_TOOL, Hints.POINTERTOOL);
+
+               
+               canvasContext.assertParticipantDependencies();
+           }
+
+}