]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagram/style/IssueDecorationStyle.java
Sync git svn branch with SVN repository r33345.
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / diagram / style / IssueDecorationStyle.java
index 6a2202ee0877eff40ae9d6b1294ce1a57b7b844a..f0384d115f659b097b4e94cc02b134da706f8f4f 100644 (file)
@@ -32,6 +32,7 @@ import org.simantics.issues.common.IssueResourcesContexts;
 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
@@ -98,22 +99,30 @@ public class IssueDecorationStyle extends StyleBase<IssueResult> {
 \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
@@ -133,18 +142,20 @@ public class IssueDecorationStyle extends StyleBase<IssueResult> {
     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