]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.diagram/src/org/simantics/diagram/profile/TextGridStyle.java
Fix diagram profiles to work with latest DB changes
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / profile / TextGridStyle.java
index d660d47a5be007f7e33acd9349c820cd1d1c7615..997ace1d63f12a87db7fc6fcaaec5f630fc92be3 100644 (file)
@@ -38,17 +38,15 @@ public abstract class TextGridStyle extends StyleBase<MonitorTextGridResult> {
        private final Color BACKGROUND_COLOR = new Color(255, 255, 255, 192);
        private static final Rectangle2D EMPTY_BOUNDS = new Rectangle2D.Double(0, 0, 0, 0);
 
-       // NOTE: this is a hack
-       String id;
-
        protected double xOffset;
        protected double yOffset;
 
-       public TextGridStyle() {
-               this(0.0, 2.1);
+       public TextGridStyle(Resource r) {
+               this(r, 0.0, 2.1);
        }
 
-       public TextGridStyle(double xOffset, double yOffset) {
+       public TextGridStyle(Resource r, double xOffset, double yOffset) {
+           super(r);
                this.xOffset = xOffset;
                this.yOffset = yOffset;
        }
@@ -94,7 +92,7 @@ public abstract class TextGridStyle extends StyleBase<MonitorTextGridResult> {
                String name = graph.getPossibleRelatedValue(config, getPropertyRelation(graph,element), Bindings.STRING);
                return name;
        }
-       
+
        public AffineTransform getTransform(INode node, AffineTransform parentTransform, Rectangle2D elementBounds, int location, boolean up) {
                return getTransform(parentTransform, elementBounds, location, up);
        }
@@ -110,7 +108,7 @@ public abstract class TextGridStyle extends StyleBase<MonitorTextGridResult> {
                at.scale(0.15, 0.15);
 
                return at;
-               
+
        }
 
        protected String rowId() {
@@ -161,7 +159,7 @@ public abstract class TextGridStyle extends StyleBase<MonitorTextGridResult> {
 
                        String value2 = result != null ? result.getText2() : null;
                        String value3 = result != null ? result.getText3() : null;
-                       
+
                        double spacing = result.getSpacing();
 
                        final Function1<String, String> modifier = result != null ? result.getModifier() : null;
@@ -175,29 +173,32 @@ public abstract class TextGridStyle extends StyleBase<MonitorTextGridResult> {
 
                        // This assumes that this TextGridStyle instance will be devoted to
                        // this row ID until the end of its life.
-                       String id = result.getRowId();
-                       //System.out.println(this + " ID: " + id);
-                       if (!id.equals(this.id)) {
-                               //System.out.println(this + " SET ID: " + this.id + " -> " + id);
-                               this.id = id;
-                       }
+//                     String id = result.getRowId();
+//                     System.out.println(this + " ID: " + id);
+//                     if (!id.equals(this.id)) {
+//                             System.out.println(this + " SET ID: " + this.id + " -> " + id);
+//                             this.id = id;
+//                     }
 
                        Integer newRow = observer.getTemporaryProperty(_node, "location");
                        if (newRow == null)
                                newRow = 1;
 
                        // Remove from existing row to add to another row if necessary.
-                       Integer row = observer.getProperty(_node, id);
+                       Integer row = getCurrentRowNumber(observer, _node);
                        if (row != null && row != newRow) {
                                String actualId = node.getRowId(row);
+                               String id = observer.getProperty(_node, rowIdKey());
                                if (id.equals(actualId)) {
                                        node.removeRow(row);
                                }
                        }
                        row = newRow;
 
-                       node.setRowId(row, id);
-                       observer.setProperty(_node, id, row);
+                       node.setRowId(row, result.getRowId());
+
+                       setCurrentRowNumber(observer, _node, result.getRowId(), row);
+
                        observer.setTemporaryProperty(_node, "location", row + 1);
 
                        node.setText(2, row, value2);
@@ -209,7 +210,7 @@ public abstract class TextGridStyle extends StyleBase<MonitorTextGridResult> {
                        node.setCache(1, row, result);
 
                        boolean isConnection = _node instanceof ConnectionNode;
-                       
+
                        Rectangle2D elementBounds = isConnection ? EMPTY_BOUNDS : NodeUtil.getLocalElementBounds(_node);
                        if(elementBounds == null) {
                                new Exception("Cannot get local element bounds for node " + _node.toString()).printStackTrace();
@@ -225,14 +226,14 @@ public abstract class TextGridStyle extends StyleBase<MonitorTextGridResult> {
                        Vec2d offset = result.getOffset();
 
                        Point2D[] cellOffsets = getCellOffsets();
-                       
+
                        AffineTransform at1 = new AffineTransform(at);
                        at1.translate(cellOffsets[0].getX(),cellOffsets[0].getY());
                        AffineTransform at2 = new AffineTransform(at);
                        at2.translate(cellOffsets[1].getX()+spacing,cellOffsets[1].getY());
                        AffineTransform at3 = new AffineTransform(at);
                        at3.translate(cellOffsets[2].getX()+spacing,cellOffsets[2].getY());
-                       
+
                        at1.translate(offset.x, offset.y);
                        at2.translate(offset.x, offset.y);
                        at3.translate(offset.x, offset.y);
@@ -251,7 +252,7 @@ public abstract class TextGridStyle extends StyleBase<MonitorTextGridResult> {
                                node.setHorizontalAlignment(2, row, (byte) getAlignment(2).ordinal());
                                node.setHorizontalAlignment(3, row, (byte) getAlignment(3).ordinal());
                        }
-                       
+
                        Alignment[] verticalAlignments = result.getVerticalAlignments();
                        if(verticalAlignments != null) {
                                node.setVerticalAlignment(1, row, (byte) verticalAlignments[0].ordinal());
@@ -266,11 +267,13 @@ public abstract class TextGridStyle extends StyleBase<MonitorTextGridResult> {
                        node.setZIndex(3000);
 
                        org.simantics.common.color.Color color = result.getColor();
-                       java.awt.Color awtColor = color != null ? Colors.awt(color) : Color.DARK_GRAY;
+                       Color awtColor = color != null ? Colors.awt(color) : Color.DARK_GRAY;
+                       Color bgColor = getBackgroundColor();
+                       Font font = getFont();
 
-                       setTextNodeData(node, 1, row, value, FONT, awtColor, BACKGROUND_COLOR);
-                       setTextNodeData(node, 2, row, value2, result.getPending(), FONT, awtColor, BACKGROUND_COLOR);
-                       setTextNodeData(node, 3, row, value3, FONT, awtColor, BACKGROUND_COLOR);
+                       setTextNodeData(node, 1, row, value, font, awtColor, bgColor);
+                       setTextNodeData(node, 2, row, value2, result.getPending(), font, awtColor, bgColor);
+                       setTextNodeData(node, 3, row, value3, font, awtColor, bgColor);
 
                        node.setEditable(1, row, false);
                        node.setForceEventListening(2, row, true);
@@ -309,7 +312,7 @@ public abstract class TextGridStyle extends StyleBase<MonitorTextGridResult> {
 
                        node.setInputValidator(2, row, validator);
                        node.setTranslator(translator);
-                       
+
                        node.setRVI(2, row, rvi);
 
                        postProcessNode(node, row);
@@ -336,6 +339,14 @@ public abstract class TextGridStyle extends StyleBase<MonitorTextGridResult> {
                node.setPending(x, y, pending);
        }
 
+       protected Font getFont() {
+               return FONT;
+       }
+
+       protected Color getBackgroundColor() {
+               return BACKGROUND_COLOR;
+       }
+
        protected Alignment getAlignment(int column) {
                switch(column) {
                case 1: return Alignment.TRAILING;
@@ -351,18 +362,45 @@ public abstract class TextGridStyle extends StyleBase<MonitorTextGridResult> {
 
        @Override
        protected void cleanupStyleForNode(EvaluationContext observer, INode _node) {
-               Integer row = observer.getProperty(_node, id);
+               Integer row = getCurrentRowNumber(observer, _node);
                //System.out.println(this + " cleanup(" + id + ", " + row + ")");
                //System.out.println(element);
                if (row == null)
                        return;
-               observer.setProperty(_node, id, null);
+               clearCurrentRowNumber(observer, _node);
                TextGridNode node = ProfileVariables.browseChild(_node, "TextGridStyle");
                if (node != null)
                        node.removeRow(row);
        }
 
+       private Integer getCurrentRowNumber(EvaluationContext observer, INode _node) {
+               String rowId = observer.getProperty(_node, rowIdKey());
+               return observer.getProperty(_node, rowId);
+       }
+
+       private void setCurrentRowNumber(EvaluationContext observer, INode _node, String rowId, int row) {
+               // Mapping style identity -> rowId (resourceId)
+               observer.setProperty(_node, rowIdKey(), rowId);
+               // Mapping rowId (resourceId) -> row number
+               observer.setProperty(_node, rowId, row);
+       }
+
+       private void clearCurrentRowNumber(EvaluationContext observer, INode _node) {
+               String rowId = observer.getProperty(_node, rowIdKey());
+               if(rowId != null) {
+                       observer.setProperty(_node, rowIdKey(), null);
+                       Integer row = observer.getProperty(_node, rowId);
+                       if(row != null) {
+                               observer.setProperty(_node, rowId, null);
+                       }
+               }
+       }
+
        protected void postProcessNode(TextGridNode node, int row) {
        }
 
+       private String rowIdKey() {
+               return "style" + getIdentity().toString();
+       }
+
 }