]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.diagram/src/org/simantics/diagram/scl/SymbolLibrary.java
35d414cd12e13d507377dc66623a5828a1e45676
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / scl / SymbolLibrary.java
1 package org.simantics.diagram.scl;
2
3 import java.awt.Color;
4
5 import org.simantics.db.Resource;
6 import org.simantics.diagram.symbollibrary.ISymbolItem;
7 import org.simantics.g2d.canvas.Hints;
8 import org.simantics.g2d.canvas.ICanvasContext;
9 import org.simantics.g2d.canvas.impl.CanvasContext;
10 import org.simantics.g2d.diagram.DiagramClass;
11 import org.simantics.g2d.diagram.DiagramHints;
12 import org.simantics.g2d.diagram.IDiagram;
13 import org.simantics.g2d.diagram.handler.PickRequest.PickPolicy;
14 import org.simantics.g2d.diagram.handler.layout.FlowLayout;
15 import org.simantics.g2d.diagram.impl.Diagram;
16 import org.simantics.g2d.diagram.participant.DiagramParticipant;
17 import org.simantics.g2d.diagram.participant.ElementInteractor;
18 import org.simantics.g2d.diagram.participant.ElementPainter;
19 import org.simantics.g2d.diagram.participant.Selection;
20 import org.simantics.g2d.diagram.participant.pointertool.PointerInteractor;
21 import org.simantics.g2d.element.ElementClass;
22 import org.simantics.g2d.element.ElementHints;
23 import org.simantics.g2d.element.IElement;
24 import org.simantics.g2d.element.handler.StaticSymbol;
25 import org.simantics.g2d.element.impl.Element;
26 import org.simantics.g2d.gallery.GalleryItemSGNode;
27 import org.simantics.g2d.image.DefaultImages;
28 import org.simantics.g2d.image.Image;
29 import org.simantics.g2d.participant.BackgroundPainter;
30 import org.simantics.g2d.participant.KeyToCommand;
31 import org.simantics.g2d.participant.KeyUtil;
32 import org.simantics.g2d.participant.MouseUtil;
33 import org.simantics.g2d.participant.SymbolUtil;
34 import org.simantics.g2d.participant.TransformUtil;
35 import org.simantics.g2d.tooltip.TooltipParticipant;
36 import org.simantics.scenegraph.g2d.events.command.CommandKeyBinding;
37 import org.simantics.utils.datastructures.hints.IHintContext;
38 import org.simantics.utils.threads.AWTThread;
39 import org.simantics.utils.threads.IThreadWorkQueue;
40
41 public class SymbolLibrary {
42         
43         public static ICanvasContext create(ISymbolItem item) {
44                 return create(item, true);
45         }
46         
47         public static ICanvasContext create(ISymbolItem item, boolean selection) {
48                 IDiagram diagram =  Diagram.spawnNew(DiagramClass.DEFAULT);
49         diagram.setHint(FlowLayout.HGAP, 5.0);
50         diagram.setHint(FlowLayout.VGAP, 5.0);
51         IThreadWorkQueue thread = AWTThread.getThreadAccess();
52         CanvasContext ctx = new CanvasContext(thread);
53         initializeCanvasContext(ctx,selection);
54         IHintContext hintCtx = ctx.getDefaultHintContext();
55         hintCtx.setHint(DiagramHints.KEY_DIAGRAM, diagram);
56         
57         ElementClass ec = item.getElementClass(diagram);
58         StaticSymbol ss = ec.getSingleItem(StaticSymbol.class);
59         Image source = ss == null ? DefaultImages.UNKNOWN2.get() : ss.getImage();
60         //ImageProxy proxy = new ImageProxy(source);
61         
62         IElement element = Element.spawnNew(ec);
63         element.setHint(ElementHints.KEY_OBJECT, item);
64         element.setHint(GalleryItemSGNode.KEY_IMAGE, source);
65         diagram.addElement(element);
66         
67         //element.getElementClass().getSingleItem(GalleryItemSGNode.class).update(element);
68         
69         return ctx;
70         }
71         
72         public static Resource getItemResource(ISymbolItem item) {
73                 return item.getAdapter(Resource.class);
74         }
75         
76          private static void initializeCanvasContext(final CanvasContext canvasContext, boolean selection) {
77                 // Create canvas context and a layer of interactors
78                 final IHintContext h = canvasContext.getDefaultHintContext();
79
80                 // Support & Util Participants
81                 canvasContext.add( new TransformUtil() );
82
83                 canvasContext.add( new MouseUtil() );
84                 canvasContext.add( new KeyUtil() );
85                 canvasContext.add( new SymbolUtil() );
86
87                 // Grid & Ruler & Background
88                 h.setHint(Hints.KEY_BACKGROUND_COLOR, Color.WHITE);
89                 canvasContext.add( new BackgroundPainter() );
90
91                 // Key bindings
92                 canvasContext.add( new KeyToCommand( CommandKeyBinding.DEFAULT_BINDINGS ) );
93
94                 ////// Diagram Participants //////
95                 PointerInteractor pi = new PointerInteractor(true, true, false, true, false, null);
96                 pi.setBoxSelectMode(PickPolicy.PICK_INTERSECTING_OBJECTS);
97                 canvasContext.add( pi );
98                 canvasContext.add( new Selection() );
99                 canvasContext.add( new DiagramParticipant() );
100                 canvasContext.add( new ElementPainter(selection) );
101                 canvasContext.add( new ElementInteractor() );
102                 canvasContext.add( new TooltipParticipant());
103
104                 h.setHint(ElementPainter.KEY_SELECTION_FRAME_COLOR, Color.WHITE);
105                 h.setHint(ElementPainter.KEY_SELECTION_CONTENT_COLOR, new Color(0.7f, 0.7f, 1.f, 0.5f));
106                 h.setHint(Hints.KEY_TOOL, Hints.POINTERTOOL);
107
108                 
109                 canvasContext.assertParticipantDependencies();
110             }
111
112 }