X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.diagram%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Fprofile%2FTextGridStyle.java;h=997ace1d63f12a87db7fc6fcaaec5f630fc92be3;hp=d660d47a5be007f7e33acd9349c820cd1d1c7615;hb=ab9fcfe016ef75da40eb00a46d4a54b50e534511;hpb=0ae2b770234dfc3cbb18bd38f324125cf0faca07 diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/profile/TextGridStyle.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/profile/TextGridStyle.java index d660d47a5..997ace1d6 100644 --- a/bundles/org.simantics.diagram/src/org/simantics/diagram/profile/TextGridStyle.java +++ b/bundles/org.simantics.diagram/src/org/simantics/diagram/profile/TextGridStyle.java @@ -38,17 +38,15 @@ public abstract class TextGridStyle extends StyleBase { 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 { 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 { at.scale(0.15, 0.15); return at; - + } protected String rowId() { @@ -161,7 +159,7 @@ public abstract class TextGridStyle extends StyleBase { String value2 = result != null ? result.getText2() : null; String value3 = result != null ? result.getText3() : null; - + double spacing = result.getSpacing(); final Function1 modifier = result != null ? result.getModifier() : null; @@ -175,29 +173,32 @@ public abstract class TextGridStyle extends StyleBase { // 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 { 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 { 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 { 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 { 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 { 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 { 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 { @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(); + } + }