--- /dev/null
+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;
+ }
+}