]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/ElevationRectangleStyle.java
Add profile to show bounding boxes for elevation server
[simantics/district.git] / org.simantics.district.network.ui / src / org / simantics / district / network / ui / nodes / ElevationRectangleStyle.java
diff --git a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/ElevationRectangleStyle.java b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/ElevationRectangleStyle.java
new file mode 100644 (file)
index 0000000..c684649
--- /dev/null
@@ -0,0 +1,67 @@
+package org.simantics.district.network.ui.nodes;
+
+import java.awt.geom.Rectangle2D;
+import java.util.Collection;
+import java.util.Collections;
+
+import org.simantics.db.RequestProcessor;
+import org.simantics.db.Resource;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.maps.elevation.server.SingletonTiffTileInterface;
+import org.simantics.scenegraph.g2d.IG2DNode;
+import org.simantics.scenegraph.profile.EvaluationContext;
+import org.simantics.scenegraph.profile.Group;
+import org.simantics.scenegraph.profile.Style;
+import org.simantics.scenegraph.profile.common.ObserverGroupListener;
+import org.simantics.scenegraph.utils.NodeUtil;
+
+public class ElevationRectangleStyle implements Style {
+
+    private ObserverGroupListener listener = null;
+    private double priority;
+
+    @Override
+    public void activate(RequestProcessor backend, Resource runtimeDiagram, Resource entry, Group group, EvaluationContext observer) throws DatabaseException {
+        if (listener != null && !listener.isDisposed())
+            return;
+        listener = new ObserverGroupListener(this, group, observer);
+        group.trackItems(backend, runtimeDiagram, listener);
+    }
+
+    @Override
+    public void deactivate(Resource runtimeDiagram, Resource entry, Group group, EvaluationContext observer) {
+        if (listener != null && !listener.isDisposed()) {
+            setRectangles(observer, Collections.emptyList());
+            listener.dispose();
+            observer.update();
+        }
+    }
+
+    @Override
+    public void apply(Resource entry, Group group, EvaluationContext observer) {
+        apply2(entry, observer);
+    }
+
+    @Override
+    public void apply2(Object item, EvaluationContext observer) {
+        setRectangles(observer, SingletonTiffTileInterface.getBoundingBoxes());
+    }
+
+    private void setRectangles(EvaluationContext observer, Collection<Rectangle2D> rectangles) {
+        IG2DNode node = NodeUtil.getNearestChildByClass(observer.getSceneGraph(), ElevationServerNode.class);
+        if (node != null) {
+            ((ElevationServerNode) node).setRectangles(rectangles);
+        }
+    }
+    
+    @Override
+    public void setPriority(double priority) {
+        this.priority = priority;
+    }
+
+    @Override
+    public double getPriority() {
+        return priority;
+    }
+
+}