]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.trend/src/org/simantics/trend/TrendInitializer.java
Sync git svn branch with SVN repository r33406.
[simantics/platform.git] / bundles / org.simantics.trend / src / org / simantics / trend / TrendInitializer.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2011 Association for Decentralized Information Management in\r
3  * Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.trend;\r
13 \r
14 import java.awt.Color;\r
15 import java.util.concurrent.Executor;\r
16 \r
17 import org.simantics.g2d.canvas.Hints;\r
18 import org.simantics.g2d.canvas.ICanvasContext;\r
19 import org.simantics.g2d.canvas.impl.CanvasContext;\r
20 import org.simantics.g2d.participant.BackgroundPainter;\r
21 import org.simantics.g2d.participant.CanvasBoundsParticipant;\r
22 import org.simantics.g2d.participant.CanvasGrab;\r
23 import org.simantics.g2d.participant.KeyToCommand;\r
24 import org.simantics.g2d.participant.KeyUtil;\r
25 import org.simantics.g2d.participant.MouseUtil;\r
26 import org.simantics.g2d.participant.PanZoomRotateHandler;\r
27 import org.simantics.g2d.participant.PointerPainter;\r
28 import org.simantics.g2d.participant.RulerPainter;\r
29 import org.simantics.g2d.participant.SymbolUtil;\r
30 import org.simantics.g2d.participant.TimeParticipant;\r
31 import org.simantics.g2d.participant.TransformUtil;\r
32 import org.simantics.g2d.tooltip.TooltipParticipant;\r
33 import org.simantics.history.Collector;\r
34 import org.simantics.history.HistoryManager;\r
35 import org.simantics.scenegraph.g2d.events.command.CommandKeyBinding;\r
36 import org.simantics.simulation.data.Datasource;\r
37 import org.simantics.simulation.data.Datasource.DatasourceListener;\r
38 import org.simantics.trend.configuration.TrendSpec;\r
39 import org.simantics.trend.impl.TrendNode;\r
40 import org.simantics.trend.impl.TrendParticipant;\r
41 import org.simantics.utils.datastructures.disposable.IDisposable;\r
42 import org.simantics.utils.datastructures.disposable.IDisposeListener;\r
43 import org.simantics.utils.datastructures.hints.IHintContext;\r
44 import org.simantics.utils.threads.IThreadWorkQueue;\r
45 \r
46 public class TrendInitializer {\r
47 \r
48     public static CanvasContext defaultInitializeCanvas(CanvasContext cvsCtx, HistoryManager historian, Collector collector, final Datasource simulation, TrendSpec trendSpec)\r
49     {\r
50         // Create canvas context and a layer of interactors\r
51         IHintContext h = cvsCtx.getDefaultHintContext();\r
52 \r
53         h.setHint(PanZoomRotateHandler.KEY_ADAPT_VIEWPORT_TO_RESIZED_CONTROL, false);\r
54         h.setHint(PanZoomRotateHandler.KEY_DISABLE_PAN, true);\r
55         h.setHint(PanZoomRotateHandler.KEY_DISABLE_ZOOM, true);\r
56         cvsCtx.add( new PanZoomRotateHandler( false ) ); // Must be before TransformUtil\r
57 \r
58         // Support & Util Participants\r
59         cvsCtx.add( new TransformUtil() );\r
60         cvsCtx.add( new MouseUtil() );\r
61         cvsCtx.add( new KeyUtil() );\r
62         cvsCtx.add( new CanvasGrab() );\r
63         cvsCtx.add( new SymbolUtil() );\r
64         cvsCtx.add( new TimeParticipant() );\r
65         cvsCtx.add( new CanvasBoundsParticipant() );\r
66 \r
67         // Add trend node\r
68         TrendNode trendNode = cvsCtx.getSceneGraph().addNode(TrendNode.class);\r
69         trendNode.setHistorian( historian, collector );\r
70         trendNode.setTrendSpec( trendSpec );\r
71 \r
72         // Add trend participant/interactor\r
73         TrendParticipant tp = new TrendParticipant();\r
74         tp.setTrend( trendNode );\r
75         cvsCtx.add( tp );\r
76 \r
77         if (simulation != null)\r
78                 attachStepListener(simulation, cvsCtx, tp);\r
79 \r
80         // Debug participant(s)\r
81         //canvasContext.add( new PointerPainter() );\r
82 //        canvasContext.add( new HandPainter() );\r
83         h.setHint(PointerPainter.KEY_PAINT_POINTER, true);\r
84 \r
85         // Pan & Zoom & Rotate\r
86         //canvasContext.add( new MousePanZoomInteractor() );\r
87         //canvasContext.add( new MultitouchPanZoomRotateInteractor() );\r
88         //canvasContext.add( new OrientationRestorer() );\r
89 \r
90         // Grid & Ruler & Background\r
91         //cvsCtx.add( new GridPainter() );\r
92         //cvsCtx.add( new RulerPainter() );\r
93         cvsCtx.add( new BackgroundPainter() );\r
94 \r
95         h.setHint(Hints.KEY_GRID_COLOR, new Color(0.95f, 0.95f, 0.95f));\r
96         h.setHint(Hints.KEY_BACKGROUND_COLOR, Color.WHITE);\r
97         h.setHint(RulerPainter.KEY_RULER_BACKGROUND_COLOR, new Color(0.9f, 0.9f, 0.9f, 0.75f));\r
98         h.setHint(RulerPainter.KEY_RULER_TEXT_COLOR, Color.BLACK);\r
99         h.setHint(TimeParticipant.KEY_TIME_PULSE_INTERVAL, 50L);\r
100         h.setHint(TimeParticipant.KEY_TIMER_ENABLED, true);\r
101         h.setHint(TrendParticipant.KEY_TREND_DRAW_INTERVAL, 100L);\r
102 \r
103         // Key bindings\r
104         cvsCtx.add( new KeyToCommand( CommandKeyBinding.DEFAULT_BINDINGS ) );\r
105 \r
106         ////// Diagram Participants //////\r
107 \r
108         cvsCtx.add( new TooltipParticipant());\r
109 \r
110         h.setHint(Hints.KEY_TOOL, Hints.POINTERTOOL);\r
111 \r
112         //NodeUtil.printSceneGraph( cvsCtx.getSceneGraph() );\r
113 \r
114         cvsCtx.assertParticipantDependencies();\r
115 \r
116         return cvsCtx;\r
117     }\r
118     \r
119     public static TrendNode getTrendNode(CanvasContext ctx)\r
120     {\r
121         TrendParticipant tp = ctx.getSingleItem( TrendParticipant.class );\r
122         return tp.getTrend();\r
123     }\r
124 \r
125     public static void attachStepListener(final Datasource datasource, ICanvasContext context, TrendParticipant tp) {\r
126         // Add simulation listener - Note listener must be removed when trend is closed\r
127         final DatasourceListener stepListener = new StepListener( tp );\r
128         datasource.addListener( stepListener );\r
129         context.addDisposeListener(new IDisposeListener() {\r
130             @Override\r
131             public void onDisposed(IDisposable sender) {\r
132                 datasource.removeListener(stepListener);\r
133             }\r
134         });\r
135     }\r
136 \r
137     /**\r
138      *\r
139      */\r
140     public static class StepListener implements DatasourceListener {\r
141         private final TrendParticipant trendParticipant;\r
142 \r
143         public StepListener(TrendParticipant trendParticipant) {\r
144             this.trendParticipant = trendParticipant;\r
145         }\r
146 \r
147         @Override\r
148         public void onStep(Datasource source) {\r
149             TrendNode node = trendParticipant.getTrend();\r
150             if (!node.allPast()) node.datadirty = true;\r
151         }\r
152 \r
153         @Override\r
154         public Executor getExecutor() {\r
155             return null;\r
156         }\r
157     }\r
158 \r
159         public static CanvasContext createDefaultCanvas(IThreadWorkQueue threadAccess, HistoryManager historian, Collector collector, Datasource simulation, TrendSpec trendSpec) {\r
160                 return defaultInitializeCanvas(new CanvasContext(threadAccess), historian, collector, simulation, trendSpec);\r
161         }\r
162 \r
163 }\r