X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.diagram%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Fprofile%2FStyleBase.java;h=fee1e8546d7e96e07bf13a21f53b98f26afac6c4;hp=9978076c641abd89d207c86610f664c609fc1b0b;hb=5a1429ae3eca8b03df0fe9784440f066502fbce7;hpb=e785ea2594a871612806780acd918e35ef1751ed diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/profile/StyleBase.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/profile/StyleBase.java index 9978076c6..fee1e8546 100644 --- a/bundles/org.simantics.diagram/src/org/simantics/diagram/profile/StyleBase.java +++ b/bundles/org.simantics.diagram/src/org/simantics/diagram/profile/StyleBase.java @@ -27,8 +27,10 @@ import org.simantics.db.layer0.variable.Variable; import org.simantics.db.procedure.Listener; import org.simantics.db.request.Read; import org.simantics.diagram.stubs.DiagramResource; +import org.simantics.g2d.canvas.Hints; import org.simantics.g2d.canvas.ICanvasContext; import org.simantics.g2d.diagram.IDiagram; +import org.simantics.g2d.diagram.handler.DataElementMap; import org.simantics.g2d.element.IElement; import org.simantics.scenegraph.INode; import org.simantics.scenegraph.profile.DataNodeMap; @@ -67,6 +69,7 @@ import org.simantics.utils.datastructures.Pair; public abstract class StyleBase implements Style { private Object identity; + private double priority; public StyleBase(Object identity) { this.identity = identity; @@ -81,6 +84,14 @@ public abstract class StyleBase implements Style { return (T)identity; } + public void setPriority(double priority) { + this.priority = priority; + } + + public double getPriority() { + return priority; + } + @Override public int hashCode() { final int prime = 31; @@ -207,7 +218,7 @@ public abstract class StyleBase implements Style { StyleBaseData.getInstance().removeValue(new Tuple3(this, runtimeDiagram, object)); else StyleBaseData.getInstance().putValue(new Tuple3(this, runtimeDiagram, object), result); - observer.update(); + observer.update(this, object); } /** @@ -232,7 +243,7 @@ public abstract class StyleBase implements Style { final INode node = map.getNode(item); if (node == null) { - evaluationContext.update(); + evaluationContext.update(this, item); // TODO: continue or return? return; } @@ -241,7 +252,6 @@ public abstract class StyleBase implements Style { System.out.println(StyleBase.this + ": applying style for item " + item + " and element " + node + " with result " + value); applyStyleForNode(evaluationContext, node, value); - } /** @@ -426,7 +436,8 @@ public abstract class StyleBase implements Style { cleanupItems(observer, diagram, listener.getItems().toArray()); diagram = null; } - observer.update(); + + //observer.update(); TODO: Check if this is required! } } @@ -436,7 +447,6 @@ public abstract class StyleBase implements Style { */ @Override public final void apply(Resource entry, Group group, final EvaluationContext evaluationContext) { - ICanvasContext context = evaluationContext.getConstant(ProfileKeys.CANVAS); assert context.getThreadAccess().currentThreadAccess(); @@ -456,14 +466,41 @@ public abstract class StyleBase implements Style { StyleBaseData data = StyleBaseData.getInstance(); data.applyRemovals(evaluationContext, this); - + + IDiagram diagram = evaluationContext.getConstant(ProfileKeys.DIAGRAM); + assert diagram != null; + DataElementMap emap = diagram.getDiagramClass().getSingleItem(DataElementMap.class); + for (Object item : listener.getItems()) { Result value = data.getValue(new Tuple3(this, evaluationContext.getResource(), item)); applyStyleForItem(evaluationContext, map, item, value); + + IElement element = emap.getElement(diagram, item); + if (element != null) + element.setHint(Hints.KEY_DIRTY, Hints.VALUE_SG_DIRTY); } } + @Override + public final void apply2(Object item, final EvaluationContext evaluationContext) { + final DataNodeMap map = evaluationContext.getConstant(ProfileKeys.NODE_MAP); + + StyleBaseData data = StyleBaseData.getInstance(); + + data.applyRemovals(evaluationContext, this); + + Result value = data.getValue(new Tuple3(this, evaluationContext.getResource(), item)); + applyStyleForItem(evaluationContext, map, item, value); + + IDiagram diagram = evaluationContext.getConstant(ProfileKeys.DIAGRAM); + assert diagram != null; + DataElementMap emap = diagram.getDiagramClass().getSingleItem(DataElementMap.class); + IElement element = emap.getElement(diagram, item); + if (element != null) + element.setHint(Hints.KEY_DIRTY, Hints.VALUE_SG_DIRTY); + } + /** * This is ran when this profile entry gets deactivated after being first * active. It allows cleaning up scene graph left-overs for the listened set @@ -493,8 +530,16 @@ public abstract class StyleBase implements Style { if (DebugPolicy.DEBUG_PROFILE_STYLE_ACTIVATION) System.out.println(this + ".cleanupItems(" + evaluationContext + ", " + diagram + ", " + Arrays.toString(items)); + IDiagram diagram = evaluationContext.getConstant(ProfileKeys.DIAGRAM); + assert diagram != null; + DataElementMap emap = diagram.getDiagramClass().getSingleItem(DataElementMap.class); + for (Object item : items) { cleanupStyleForItem(evaluationContext, map, item); + + IElement element = emap.getElement(diagram, item); + if (element != null) + element.setHint(Hints.KEY_DIRTY, Hints.VALUE_SG_DIRTY); } } });