X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.district.network.ui%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Fnetwork%2Fui%2Fparticipants%2FDynamicVisualisationContributionsParticipant.java;fp=org.simantics.district.network.ui%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Fnetwork%2Fui%2Fparticipants%2FDynamicVisualisationContributionsParticipant.java;h=690860620059dc9c7802b2bf7bfa0468c840692b;hb=dab24824da1b284b8a4734a069cfba72fb1f05de;hp=0000000000000000000000000000000000000000;hpb=7851902c16663a27134ec1c8f72e3206b4d47dad;p=simantics%2Fdistrict.git 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 index 00000000..69086062 --- /dev/null +++ b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/participants/DynamicVisualisationContributionsParticipant.java @@ -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 getDynamicColoringObjects() { + Map 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 getDynamicSizingObjects() { + Map objects = getHint(DistrictDiagramViewer.KEY_MAP_SIZING_OBJECTS); + return objects; + } + + private SizeBarOptions getSizeBarOptions() { + SizeBarOptions options = getHint(DistrictDiagramViewer.KEY_MAP_SIZE_BAR_OPTIONS); + return options; + } +}