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;
public abstract class StyleBase<Result> implements Style {
private Object identity;
+ private double priority;
public StyleBase(Object identity) {
this.identity = identity;
this.identity = getClass();
}
+ @SuppressWarnings("unchecked")
protected <T> T getIdentity() {
return (T)identity;
}
+ public void setPriority(double priority) {
+ this.priority = priority;
+ }
+
+ public double getPriority() {
+ return priority;
+ }
+
@Override
public int hashCode() {
final int prime = 31;
return false;
if (getClass() != obj.getClass())
return false;
- StyleBase other = (StyleBase) obj;
+ StyleBase<?> other = (StyleBase<?>) obj;
if (identity == null) {
if (other.identity != null)
return false;
StyleBaseData.getInstance().removeValue(new Tuple3(this, runtimeDiagram, object));
else
StyleBaseData.getInstance().putValue(new Tuple3(this, runtimeDiagram, object), result);
- observer.update();
+ observer.update(this, object);
}
/**
final INode node = map.getNode(item);
if (node == null) {
- evaluationContext.update();
+ evaluationContext.update(this, item);
// TODO: continue or return?
return;
}
System.out.println(StyleBase.this + ": applying style for item " + item + " and element " + node + " with result " + value);
applyStyleForNode(evaluationContext, node, value);
-
}
/**
cleanupItems(observer, diagram, listener.getItems().toArray());
diagram = null;
}
- observer.update();
+
+ //observer.update(); TODO: Check if this is required!
}
}
*/
@Override
public final void apply(Resource entry, Group group, final EvaluationContext evaluationContext) {
-
ICanvasContext context = evaluationContext.getConstant(ProfileKeys.CANVAS);
assert context.getThreadAccess().currentThreadAccess();
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
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);
}
}
});