]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network.ui/src/org/simantics/district/network/ui/participants/DynamicVisualisationContributionsParticipant.java
First version of district visualisations
[simantics/district.git] / org.simantics.district.network.ui / src / org / simantics / district / network / ui / participants / DynamicVisualisationContributionsParticipant.java
diff --git a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/participants/DynamicVisualisationContributionsParticipant.java b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/participants/DynamicVisualisationContributionsParticipant.java
new file mode 100644 (file)
index 0000000..6908606
--- /dev/null
@@ -0,0 +1,116 @@
+package org.simantics.district.network.ui.participants;
+
+import java.awt.geom.AffineTransform;
+import java.util.Map;
+
+import org.simantics.district.network.ui.DistrictDiagramViewer;
+import org.simantics.district.network.ui.nodes.DynamicVisualisationContributionsNode;
+import org.simantics.district.network.visualisations.model.ColorBarOptions;
+import org.simantics.district.network.visualisations.model.DynamicColorContribution;
+import org.simantics.district.network.visualisations.model.DynamicSizeContribution;
+import org.simantics.district.network.visualisations.model.SizeBarOptions;
+import org.simantics.g2d.canvas.ICanvasContext;
+import org.simantics.g2d.canvas.impl.AbstractCanvasParticipant;
+import org.simantics.g2d.canvas.impl.SGNodeReflection.SGInit;
+import org.simantics.scenegraph.g2d.G2DParentNode;
+import org.simantics.scenegraph.g2d.events.EventHandlerReflection.EventHandler;
+import org.simantics.scenegraph.g2d.events.command.CommandEvent;
+import org.simantics.utils.datastructures.hints.HintListenerAdapter;
+import org.simantics.utils.datastructures.hints.IHintContext.Key;
+import org.simantics.utils.datastructures.hints.IHintListener;
+import org.simantics.utils.datastructures.hints.IHintObservable;
+
+public class DynamicVisualisationContributionsParticipant extends AbstractCanvasParticipant {
+
+    IHintListener hintListener = new HintListenerAdapter() {
+        public void hintChanged(IHintObservable sender, Key key, Object oldValue, Object newValue) {
+            ICanvasContext cc = getContext();
+            if (cc != null) {
+                updateNode();
+                cc.getContentContext().setDirty();
+            }
+        }
+    };
+    
+    private DynamicVisualisationContributionsNode node;
+    private AffineTransform transform;
+    
+    public DynamicVisualisationContributionsParticipant(AffineTransform tr) {
+        this.transform = tr;
+    }
+
+    @Override
+    public void addedToContext(ICanvasContext ctx) {
+        super.addedToContext(ctx);
+        getHintStack().addKeyHintListener(getThread(), DistrictDiagramViewer.KEY_MAP_COLORING_OBJECTS, hintListener);
+        getHintStack().addKeyHintListener(getThread(), DistrictDiagramViewer.KEY_MAP_COLOR_BAR_OPTIONS, hintListener);
+        getHintStack().addKeyHintListener(getThread(), DistrictDiagramViewer.KEY_MAP_SIZING_OBJECTS, hintListener);
+        getHintStack().addKeyHintListener(getThread(), DistrictDiagramViewer.KEY_MAP_SIZE_BAR_OPTIONS, hintListener);
+    }
+    
+    @Override
+    public void removedFromContext(ICanvasContext ctx) {
+        getHintStack().removeKeyHintListener(getThread(), DistrictDiagramViewer.KEY_MAP_COLORING_OBJECTS, hintListener);
+        getHintStack().removeKeyHintListener(getThread(), DistrictDiagramViewer.KEY_MAP_COLOR_BAR_OPTIONS, hintListener);
+        getHintStack().removeKeyHintListener(getThread(), DistrictDiagramViewer.KEY_MAP_SIZING_OBJECTS, hintListener);
+        getHintStack().removeKeyHintListener(getThread(), DistrictDiagramViewer.KEY_MAP_SIZE_BAR_OPTIONS, hintListener);
+        super.removedFromContext(ctx);
+    }
+
+    @SGInit
+    public void initSG(G2DParentNode parent) {
+        node = parent.addNode(DynamicVisualisationContributionsNode.ID, DynamicVisualisationContributionsNode.class);
+        node.setTransform(transform);
+        node.setEnabled(true);
+        node.setZIndex(1000);
+    }
+    
+    @EventHandler(priority = 0)
+    protected boolean handleKeyEvent(CommandEvent e) {
+        if (e.command.equals(DistrictDiagramViewer.MAP_COLOR_BAR_OPTIONS_CHANGE)) {
+            System.out.println(e);
+            return true;
+        }
+        return false;
+    }
+    
+//    @Override
+//    protected boolean handleCommand(CommandEvent e) {
+//        if (e.command.equals(DistrictDiagramViewer.MAP_COLOR_BAR_OPTIONS_CHANGE)) {
+//            ICanvasContext context = (ICanvasContext) e.getContext();
+//            ColorBarOptions options = context.getHintStack().getHint(DistrictDiagramViewer.KEY_MAP_COLOR_BAR_OPTIONS);
+//            this.colorBarsOptions = options;
+//            repaint();
+//            return true;
+//        } else {
+//            return super.handleCommand(e);
+//        }
+//    }
+    
+    protected void updateNode() {
+        node.setDynamicColoringObjects(getDynamicColoringObjects());
+        node.setColorBarOptions(getColorBarOptions());
+        node.setDynamicSizingObjects(getDynamicSizingObjects());
+        node.setSizeBarOptions(getSizeBarOptions());
+    }
+
+    private Map<String,DynamicColorContribution> getDynamicColoringObjects() {
+        Map<String,DynamicColorContribution> objects = getHint(DistrictDiagramViewer.KEY_MAP_COLORING_OBJECTS);
+        return objects;
+    }
+
+    private ColorBarOptions getColorBarOptions() {
+        ColorBarOptions options = getHint(DistrictDiagramViewer.KEY_MAP_COLOR_BAR_OPTIONS);
+        return options;
+    }
+
+    private Map<String, DynamicSizeContribution> getDynamicSizingObjects() {
+        Map<String, DynamicSizeContribution> objects = getHint(DistrictDiagramViewer.KEY_MAP_SIZING_OBJECTS);
+        return objects;
+    }
+
+    private SizeBarOptions getSizeBarOptions() {
+        SizeBarOptions options = getHint(DistrictDiagramViewer.KEY_MAP_SIZE_BAR_OPTIONS);
+        return options;
+    }
+}