]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.trend/src/org/simantics/trend/TrendInitializer.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.trend / src / org / simantics / trend / TrendInitializer.java
diff --git a/bundles/org.simantics.trend/src/org/simantics/trend/TrendInitializer.java b/bundles/org.simantics.trend/src/org/simantics/trend/TrendInitializer.java
new file mode 100644 (file)
index 0000000..8ae58b0
--- /dev/null
@@ -0,0 +1,163 @@
+/*******************************************************************************\r
+ * Copyright (c) 2007, 2011 Association for Decentralized Information Management in\r
+ * Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ *     VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.trend;\r
+\r
+import java.awt.Color;\r
+import java.util.concurrent.Executor;\r
+\r
+import org.simantics.g2d.canvas.Hints;\r
+import org.simantics.g2d.canvas.ICanvasContext;\r
+import org.simantics.g2d.canvas.impl.CanvasContext;\r
+import org.simantics.g2d.participant.BackgroundPainter;\r
+import org.simantics.g2d.participant.CanvasBoundsParticipant;\r
+import org.simantics.g2d.participant.CanvasGrab;\r
+import org.simantics.g2d.participant.KeyToCommand;\r
+import org.simantics.g2d.participant.KeyUtil;\r
+import org.simantics.g2d.participant.MouseUtil;\r
+import org.simantics.g2d.participant.PanZoomRotateHandler;\r
+import org.simantics.g2d.participant.PointerPainter;\r
+import org.simantics.g2d.participant.RulerPainter;\r
+import org.simantics.g2d.participant.SymbolUtil;\r
+import org.simantics.g2d.participant.TimeParticipant;\r
+import org.simantics.g2d.participant.TransformUtil;\r
+import org.simantics.g2d.tooltip.TooltipParticipant;\r
+import org.simantics.history.Collector;\r
+import org.simantics.history.HistoryManager;\r
+import org.simantics.scenegraph.g2d.events.command.CommandKeyBinding;\r
+import org.simantics.simulation.data.Datasource;\r
+import org.simantics.simulation.data.Datasource.DatasourceListener;\r
+import org.simantics.trend.configuration.TrendSpec;\r
+import org.simantics.trend.impl.TrendNode;\r
+import org.simantics.trend.impl.TrendParticipant;\r
+import org.simantics.utils.datastructures.disposable.IDisposable;\r
+import org.simantics.utils.datastructures.disposable.IDisposeListener;\r
+import org.simantics.utils.datastructures.hints.IHintContext;\r
+import org.simantics.utils.threads.IThreadWorkQueue;\r
+\r
+public class TrendInitializer {\r
+\r
+    public static CanvasContext defaultInitializeCanvas(CanvasContext cvsCtx, HistoryManager historian, Collector collector, final Datasource simulation, TrendSpec trendSpec)\r
+    {\r
+        // Create canvas context and a layer of interactors\r
+        IHintContext h = cvsCtx.getDefaultHintContext();\r
+\r
+        h.setHint(PanZoomRotateHandler.KEY_ADAPT_VIEWPORT_TO_RESIZED_CONTROL, false);\r
+        h.setHint(PanZoomRotateHandler.KEY_DISABLE_PAN, true);\r
+        h.setHint(PanZoomRotateHandler.KEY_DISABLE_ZOOM, true);\r
+        cvsCtx.add( new PanZoomRotateHandler( false ) ); // Must be before TransformUtil\r
+\r
+        // Support & Util Participants\r
+        cvsCtx.add( new TransformUtil() );\r
+        cvsCtx.add( new MouseUtil() );\r
+        cvsCtx.add( new KeyUtil() );\r
+        cvsCtx.add( new CanvasGrab() );\r
+        cvsCtx.add( new SymbolUtil() );\r
+        cvsCtx.add( new TimeParticipant() );\r
+        cvsCtx.add( new CanvasBoundsParticipant() );\r
+\r
+        // Add trend node\r
+        TrendNode trendNode = cvsCtx.getSceneGraph().addNode(TrendNode.class);\r
+        trendNode.setHistorian( historian, collector );\r
+        trendNode.setTrendSpec( trendSpec );\r
+\r
+        // Add trend participant/interactor\r
+        TrendParticipant tp = new TrendParticipant();\r
+        tp.setTrend( trendNode );\r
+        cvsCtx.add( tp );\r
+\r
+        if (simulation != null)\r
+               attachStepListener(simulation, cvsCtx, tp);\r
+\r
+        // Debug participant(s)\r
+        //canvasContext.add( new PointerPainter() );\r
+//        canvasContext.add( new HandPainter() );\r
+        h.setHint(PointerPainter.KEY_PAINT_POINTER, true);\r
+\r
+        // Pan & Zoom & Rotate\r
+        //canvasContext.add( new MousePanZoomInteractor() );\r
+        //canvasContext.add( new MultitouchPanZoomRotateInteractor() );\r
+        //canvasContext.add( new OrientationRestorer() );\r
+\r
+        // Grid & Ruler & Background\r
+        //cvsCtx.add( new GridPainter() );\r
+        //cvsCtx.add( new RulerPainter() );\r
+        cvsCtx.add( new BackgroundPainter() );\r
+\r
+        h.setHint(Hints.KEY_GRID_COLOR, new Color(0.95f, 0.95f, 0.95f));\r
+        h.setHint(Hints.KEY_BACKGROUND_COLOR, Color.WHITE);\r
+        h.setHint(RulerPainter.KEY_RULER_BACKGROUND_COLOR, new Color(0.9f, 0.9f, 0.9f, 0.75f));\r
+        h.setHint(RulerPainter.KEY_RULER_TEXT_COLOR, Color.BLACK);\r
+        h.setHint(TimeParticipant.KEY_TIME_PULSE_INTERVAL, 50L);\r
+        h.setHint(TimeParticipant.KEY_TIMER_ENABLED, true);\r
+        h.setHint(TrendParticipant.KEY_TREND_DRAW_INTERVAL, 100L);\r
+\r
+        // Key bindings\r
+        cvsCtx.add( new KeyToCommand( CommandKeyBinding.DEFAULT_BINDINGS ) );\r
+\r
+        ////// Diagram Participants //////\r
+\r
+        cvsCtx.add( new TooltipParticipant());\r
+\r
+        h.setHint(Hints.KEY_TOOL, Hints.POINTERTOOL);\r
+\r
+        //NodeUtil.printSceneGraph( cvsCtx.getSceneGraph() );\r
+\r
+        cvsCtx.assertParticipantDependencies();\r
+\r
+        return cvsCtx;\r
+    }\r
+    \r
+    public static TrendNode getTrendNode(CanvasContext ctx)\r
+    {\r
+       TrendParticipant tp = ctx.getSingleItem( TrendParticipant.class );\r
+       return tp.getTrend();\r
+    }\r
+\r
+    public static void attachStepListener(final Datasource datasource, ICanvasContext context, TrendParticipant tp) {\r
+        // Add simulation listener - Note listener must be removed when trend is closed\r
+        final DatasourceListener stepListener = new StepListener( tp );\r
+        datasource.addListener( stepListener );\r
+        context.addDisposeListener(new IDisposeListener() {\r
+            @Override\r
+            public void onDisposed(IDisposable sender) {\r
+                datasource.removeListener(stepListener);\r
+            }\r
+        });\r
+    }\r
+\r
+    /**\r
+     *\r
+     */\r
+    public static class StepListener implements DatasourceListener {\r
+        private final TrendParticipant trendParticipant;\r
+\r
+        public StepListener(TrendParticipant trendParticipant) {\r
+            this.trendParticipant = trendParticipant;\r
+        }\r
+\r
+        @Override\r
+        public void onStep(Datasource source) {\r
+            TrendNode node = trendParticipant.getTrend();\r
+            if (!node.allPast()) node.datadirty = true;\r
+        }\r
+\r
+        @Override\r
+        public Executor getExecutor() {\r
+            return null;\r
+        }\r
+    }\r
+\r
+       public static CanvasContext createDefaultCanvas(IThreadWorkQueue threadAccess, HistoryManager historian, Collector collector, Datasource simulation, TrendSpec trendSpec) {\r
+               return defaultInitializeCanvas(new CanvasContext(threadAccess), historian, collector, simulation, trendSpec);\r
+       }\r
+\r
+}\r