X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.modeling.ui%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Fui%2Fdiagram%2Fstyle%2FIssueDecorationStyle.java;h=f0384d115f659b097b4e94cc02b134da706f8f4f;hp=6a2202ee0877eff40ae9d6b1294ce1a57b7b844a;hb=0b471805f017da83d715a0d8409f53bdd009d31e;hpb=145a2884933f2ffdd48d6835729e58f1152d274e diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagram/style/IssueDecorationStyle.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagram/style/IssueDecorationStyle.java index 6a2202ee0..f0384d115 100644 --- a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagram/style/IssueDecorationStyle.java +++ b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagram/style/IssueDecorationStyle.java @@ -32,6 +32,7 @@ import org.simantics.issues.common.IssueResourcesContexts; import org.simantics.issues.common.ListModelIssuesBySeverity; import org.simantics.modeling.ModelingResources; import org.simantics.modeling.ui.Activator; +import org.simantics.modeling.ui.diagram.style.IssueDecorationStyle.IssueResult; import org.simantics.scenegraph.INode; import org.simantics.scenegraph.g2d.nodes.Decoration; import org.simantics.scenegraph.g2d.nodes.DecorationSVGNode; @@ -98,22 +99,30 @@ public class IssueDecorationStyle extends StyleBase { SVGNode svgNode = ProfileVariables.claimChild(node, "", DECORATION_NODE_NAME, DecorationSVGNode.class, observer); - Rectangle2D bounds = NodeUtil.getLocalBounds(node, Decoration.class); - - double tx = bounds.getX(); - double ty = bounds.getY(); - - //new Exception("tx=" + tx + " ty=" + ty).printStackTrace(); - svgNode.setZIndex( Integer.MAX_VALUE ); - svgNode.setTransform( AffineTransform.getTranslateInstance(tx, ty) ); + svgNode.setTransform(getDecorationPosition(node)); String svgData = svgDataForSeverity(result.getSeverity()); if (svgData != null) svgNode.setData(svgData); } - private String svgDataForSeverity(Severity s) { + /** + * Returns position of the decoration. + * By default decoration is placed to the top left corner. Override this method to change the position. + * + * @param node + * @return + */ + protected AffineTransform getDecorationPosition(INode node) { + Rectangle2D bounds = NodeUtil.getLocalBounds(node, Decoration.class); + + double tx = bounds.getX(); + double ty = bounds.getY(); + return AffineTransform.getTranslateInstance(tx, ty); + } + + protected String svgDataForSeverity(Severity s) { switch (s) { case FATAL: return Activator.FATAL_SVG_TEXT; case ERROR: return Activator.ERROR_SVG_TEXT; @@ -133,18 +142,20 @@ public class IssueDecorationStyle extends StyleBase { public String toString() { return "Issue decoration"; } + + /** + * This is needed to keep the issue decoration up-to-date when its parent + * element moves. + */ + public static class IssueResult extends Tuple { + public IssueResult(Severity severity, AffineTransform transform) { + super(severity, transform); + } + public Severity getSeverity() { + return (Severity) getField(0); + } + } } -/** - * This is needed to keep the issue decoration up-to-date when its parent - * element moves. - */ -class IssueResult extends Tuple { - public IssueResult(Severity severity, AffineTransform transform) { - super(severity, transform); - } - public Severity getSeverity() { - return (Severity) getField(0); - } -} +