package org.simantics.district.network.ui.participants; import java.awt.Color; import java.util.Iterator; import org.eclipse.e4.core.services.events.IEventBroker; import org.eclipse.jface.viewers.StructuredSelection; import org.simantics.browsing.ui.common.AdaptableHintContext; import org.simantics.db.Resource; import org.simantics.db.layer0.SelectionHints; import org.simantics.diagram.elements.DiagramNodeUtil; import org.simantics.district.network.ui.adapters.DistrictNetworkEdgeElement; import org.simantics.district.network.ui.adapters.DistrictNetworkVertexElement; import org.simantics.district.network.ui.nodes.DistrictNetworkEdgeNode; import org.simantics.district.network.ui.nodes.DistrictNetworkVertexNode; import org.simantics.g2d.canvas.ICanvasContext; import org.simantics.g2d.diagram.participant.AbstractDiagramParticipant; import org.simantics.g2d.element.IElement; import org.simantics.scenegraph.g2d.G2DParentNode; import org.simantics.scl.runtime.tuple.Tuple2; import org.simantics.utils.datastructures.hints.IHintContext.Key; import org.simantics.utils.datastructures.hints.IHintContext.KeyOf; public class DistrictFinderVisualisationParticipant extends AbstractDiagramParticipant { private static final String TOPIC = "org/simantics/district/selection/elementQuerySelection"; private static final String TOPIC2 = "org/simantics/district/visualisationTrigger"; private IEventBroker broker; public DistrictFinderVisualisationParticipant(IEventBroker broker) { this.broker = broker; } public static final Key COLOR_KEY = new KeyOf(Color.class, "COLOR"); @Override public void addedToContext(ICanvasContext ctx) { super.addedToContext(ctx); broker.subscribe(TOPIC, event -> { StructuredSelection selection = (StructuredSelection) event.getProperty(IEventBroker.DATA); Iterator iterator = selection.iterator(); while (iterator.hasNext()) { AdaptableHintContext next = (AdaptableHintContext) iterator.next(); Resource resource = next.getHint(SelectionHints.KEY_MAIN); Color colorr = next.getHint(COLOR_KEY); IElement element = DiagramNodeUtil.findElement(ctx, resource); final G2DParentNode node = element.getHint(DistrictNetworkEdgeElement.KEY_DN_EDGE_NODE); if (node != null) { // color is a bit special - if not present then reset with null value ((DistrictNetworkEdgeNode) node).setDynamicColor(colorr); node.repaint(); } else { final G2DParentNode vertexNode = element.getHint(DistrictNetworkVertexElement.KEY_DN_VERTEX_NODE); ((DistrictNetworkVertexNode) vertexNode).setDynamicColor(colorr); vertexNode.repaint(); } } }); broker.subscribe(TOPIC2, event -> { Tuple2 data = (Tuple2) event.getProperty(IEventBroker.DATA); Resource resource = (Resource) data.c0; Color colorr = (Color) data.c1; IElement element = DiagramNodeUtil.findElement(ctx, resource); final G2DParentNode node = element.getHint(DistrictNetworkEdgeElement.KEY_DN_EDGE_NODE); if (node != null) { // color is a bit special - if not present then reset with null value ((DistrictNetworkEdgeNode) node).setEventColor(colorr); node.repaint(); } else { final G2DParentNode vertexNode = element.getHint(DistrictNetworkVertexElement.KEY_DN_VERTEX_NODE); ((DistrictNetworkVertexNode) vertexNode).setEventColor(colorr); vertexNode.repaint(); } }); } @Override public void removedFromContext(ICanvasContext ctx) { super.removedFromContext(ctx); } }