import org.simantics.issues.common.ListModelIssuesBySeverity;\r
import org.simantics.modeling.ModelingResources;\r
import org.simantics.modeling.ui.Activator;\r
+import org.simantics.modeling.ui.diagram.style.IssueDecorationStyle.IssueResult;\r
import org.simantics.scenegraph.INode;\r
import org.simantics.scenegraph.g2d.nodes.Decoration;\r
import org.simantics.scenegraph.g2d.nodes.DecorationSVGNode;\r
\r
SVGNode svgNode = ProfileVariables.claimChild(node, "", DECORATION_NODE_NAME, DecorationSVGNode.class, observer);\r
\r
- Rectangle2D bounds = NodeUtil.getLocalBounds(node, Decoration.class);\r
-\r
- double tx = bounds.getX();\r
- double ty = bounds.getY();\r
-\r
- //new Exception("tx=" + tx + " ty=" + ty).printStackTrace();\r
- \r
svgNode.setZIndex( Integer.MAX_VALUE );\r
- svgNode.setTransform( AffineTransform.getTranslateInstance(tx, ty) ); \r
+ svgNode.setTransform(getDecorationPosition(node)); \r
\r
String svgData = svgDataForSeverity(result.getSeverity());\r
if (svgData != null)\r
svgNode.setData(svgData);\r
}\r
\r
- private String svgDataForSeverity(Severity s) {\r
+ /**\r
+ * Returns position of the decoration.\r
+ * By default decoration is placed to the top left corner. Override this method to change the position.\r
+ * \r
+ * @param node\r
+ * @return\r
+ */\r
+ protected AffineTransform getDecorationPosition(INode node) {\r
+ Rectangle2D bounds = NodeUtil.getLocalBounds(node, Decoration.class);\r
+\r
+ double tx = bounds.getX();\r
+ double ty = bounds.getY();\r
+ return AffineTransform.getTranslateInstance(tx, ty);\r
+ }\r
+\r
+ protected String svgDataForSeverity(Severity s) {\r
switch (s) {\r
case FATAL: return Activator.FATAL_SVG_TEXT;\r
case ERROR: return Activator.ERROR_SVG_TEXT;\r
public String toString() {\r
return "Issue decoration";\r
}\r
+ \r
+ /**\r
+ * This is needed to keep the issue decoration up-to-date when its parent\r
+ * element moves.\r
+ */\r
+ public static class IssueResult extends Tuple {\r
+ public IssueResult(Severity severity, AffineTransform transform) {\r
+ super(severity, transform);\r
+ }\r
+ public Severity getSeverity() {\r
+ return (Severity) getField(0);\r
+ }\r
+ }\r
\r
}\r
\r
-/**\r
- * This is needed to keep the issue decoration up-to-date when its parent\r
- * element moves.\r
- */\r
-class IssueResult extends Tuple {\r
- public IssueResult(Severity severity, AffineTransform transform) {\r
- super(severity, transform);\r
- }\r
- public Severity getSeverity() {\r
- return (Severity) getField(0);\r
- }\r
-}\r
+\r