]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.debug.graphical/src/org/simantics/debug/graphical/model/LabelContent.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.debug.graphical / src / org / simantics / debug / graphical / model / LabelContent.java
diff --git a/bundles/org.simantics.debug.graphical/src/org/simantics/debug/graphical/model/LabelContent.java b/bundles/org.simantics.debug.graphical/src/org/simantics/debug/graphical/model/LabelContent.java
new file mode 100644 (file)
index 0000000..6e60bf6
--- /dev/null
@@ -0,0 +1,48 @@
+package org.simantics.debug.graphical.model;\r
+\r
+import java.awt.Font;\r
+import java.awt.Graphics2D;\r
+import java.awt.font.FontRenderContext;\r
+import java.awt.geom.AffineTransform;\r
+import java.awt.geom.Rectangle2D;\r
+\r
+public class LabelContent extends Content {\r
+    public static final Font FONT = new Font("Arial", Font.PLAIN, 12);\r
+    public static final FontRenderContext FRC = \r
+            new FontRenderContext(new AffineTransform(), true, true);\r
+    public static final Rectangle2D MAX_BOUNDS = FONT.getMaxCharBounds(FRC);\r
+    public static final double FONT_HEIGHT = MAX_BOUNDS.getHeight();\r
+    public static double PADDING = 3.0;\r
+    \r
+    String[] labels;\r
+    double textX, textY;\r
+    \r
+    public LabelContent(String[] labels) {\r
+        setLabels(labels);\r
+    }\r
+\r
+    @Override\r
+    public void render(Graphics2D g) {\r
+        g.setFont(FONT);\r
+        for(int i=0;i<labels.length;++i) {\r
+            g.drawString(labels[i], (float)textX, (float)(textY + i*FONT_HEIGHT));    \r
+        }        \r
+    }\r
+    \r
+    public void setLabels(String[] labels) {\r
+        this.labels = labels;\r
+\r
+        double maxWidth = 0.0;\r
+        for(String label : labels) {\r
+            Rectangle2D bounds = FONT.getStringBounds(label, FRC);\r
+            maxWidth = Math.max(maxWidth, bounds.getWidth());\r
+        }\r
+        \r
+        textX = -0.5*maxWidth;\r
+        textY = -0.5*labels.length*FONT_HEIGHT + FONT_HEIGHT - MAX_BOUNDS.getMaxY();\r
+        \r
+        radiusX = PADDING + 0.5*maxWidth;\r
+        radiusY = PADDING + 0.5*labels.length*FONT_HEIGHT;\r
+    }\r
+    \r
+}\r