X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.diagram%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Fscl%2FSymbolLibrary.java;fp=bundles%2Forg.simantics.diagram%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Fscl%2FSymbolLibrary.java;h=6820cad0824d264a364c9e09c3d83d3cae6bc229;hp=0000000000000000000000000000000000000000;hb=09d124e089c1b352cf1d9f723fd0f465fb12a31f;hpb=85fd9f0a35ca2d7018b316bc8bcc280513b47243 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 index 000000000..6820cad08 --- /dev/null +++ b/bundles/org.simantics.diagram/src/org/simantics/diagram/scl/SymbolLibrary.java @@ -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(); + } + +}