]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.spreadsheet.ui/src/org/simantics/spreadsheet/ui/TableBorder.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.spreadsheet.ui / src / org / simantics / spreadsheet / ui / TableBorder.java
diff --git a/bundles/org.simantics.spreadsheet.ui/src/org/simantics/spreadsheet/ui/TableBorder.java b/bundles/org.simantics.spreadsheet.ui/src/org/simantics/spreadsheet/ui/TableBorder.java
new file mode 100644 (file)
index 0000000..f17c2a4
--- /dev/null
@@ -0,0 +1,149 @@
+package org.simantics.spreadsheet.ui;\r
+\r
+import java.awt.Color;\r
+import java.awt.Component;\r
+import java.awt.Graphics;\r
+import java.awt.Insets;\r
+\r
+import javax.swing.border.AbstractBorder;\r
+import javax.swing.border.Border;\r
+\r
+public class TableBorder extends AbstractBorder {\r
+\r
+       private static final long serialVersionUID = -2732591061826521471L;\r
+       private static Border blackLine;\r
+       private static Border grayLine;\r
+\r
+       protected int thickness;\r
+       protected Color lineColor;\r
+       protected boolean roundedCorners;\r
+\r
+       final public static TableBorder BORDER = new TableBorder(DefaultLookup.BORDER, 0);\r
+\r
+       /** Convenience method for getting the Color.black LineBorder of thickness 1.\r
+        */\r
+       public static Border createBlackLineBorder() {\r
+               if (blackLine == null) {\r
+                       blackLine = new TableBorder(Color.black, 1);\r
+               }\r
+               return blackLine;\r
+       }\r
+\r
+       /** Convenience method for getting the Color.gray LineBorder of thickness 1.\r
+        */\r
+       public static Border createGrayLineBorder() {\r
+               if (grayLine == null) {\r
+                       grayLine = new TableBorder(Color.gray, 1);\r
+               }\r
+               return grayLine;\r
+       }\r
+\r
+       /** \r
+        * Creates a line border with the specified color and a \r
+        * thickness = 1.\r
+        * @param color the color for the border\r
+        */\r
+       public TableBorder(Color color) {\r
+               this(color, 1, false);\r
+       }\r
+\r
+       /**\r
+        * Creates a line border with the specified color and thickness.\r
+        * @param color the color of the border\r
+        * @param thickness the thickness of the border\r
+        */\r
+       public TableBorder(Color color, int thickness)  {\r
+               this(color, thickness, false);\r
+       }\r
+\r
+       /**\r
+        * Creates a line border with the specified color, thickness,\r
+        * and corner shape.\r
+        * @param color the color of the border\r
+        * @param thickness the thickness of the border\r
+        * @param roundedCorners whether or not border corners should be round\r
+        * @since 1.3\r
+        */\r
+       public TableBorder(Color color, int thickness, boolean roundedCorners)  {\r
+               lineColor = color;\r
+               this.thickness = thickness;\r
+               this.roundedCorners = roundedCorners;\r
+       }\r
+\r
+       /**\r
+        * Paints the border for the specified component with the \r
+        * specified position and size.\r
+        * @param c the component for which this border is being painted\r
+        * @param g the paint graphics\r
+        * @param x the x position of the painted border\r
+        * @param y the y position of the painted border\r
+        * @param width the width of the painted border\r
+        * @param height the height of the painted border\r
+        */\r
+       public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {\r
+\r
+               Color oldColor = g.getColor();\r
+               int i;\r
+\r
+               /// PENDING(klobad) How/should do we support Roundtangles?\r
+               g.setColor(lineColor);\r
+               g.drawLine(1, height-1, 1 + width-1, height-1);\r
+               g.drawLine(width-1, 0, width-1, height-1);\r
+               //                      for(i = 0; i < thickness; i++)  {\r
+               //                              if(!roundedCorners)\r
+               //                                      g.drawRect(x+i, y+i, width-i-i-1, height-i-i-1);\r
+               //                              else\r
+               //                                      g.drawRoundRect(x+i, y+i, width-i-i-1, height-i-i-1, thickness, thickness);\r
+               //                      }\r
+               g.setColor(oldColor);\r
+\r
+       }\r
+\r
+       /**\r
+        * Returns the insets of the border.\r
+        * @param c the component for which this border insets value applies\r
+        */\r
+       public Insets getBorderInsets(Component c)       {\r
+               return new Insets(thickness, thickness, thickness, thickness);\r
+       }\r
+\r
+       /** \r
+        * Reinitialize the insets parameter with this Border's current Insets. \r
+        * @param c the component for which this border insets value applies\r
+        * @param insets the object to be reinitialized\r
+        */\r
+       public Insets getBorderInsets(Component c, Insets insets) {\r
+               insets.left = insets.top = insets.right = insets.bottom = thickness;\r
+               return insets;\r
+       }\r
+\r
+       /**\r
+        * Returns the color of the border.\r
+        */\r
+       public Color getLineColor()     {\r
+               return lineColor;\r
+       }\r
+\r
+       /**\r
+        * Returns the thickness of the border.\r
+        */\r
+       public int getThickness()       {\r
+               return thickness;\r
+       }\r
+\r
+       /**\r
+        * Returns whether this border will be drawn with rounded corners.\r
+        * @since 1.3\r
+        */\r
+       public boolean getRoundedCorners() {\r
+               return roundedCorners;\r
+       }\r
+\r
+       /**\r
+        * Returns whether or not the border is opaque.\r
+        */\r
+       public boolean isBorderOpaque() { \r
+               return !roundedCorners; \r
+       }\r
+\r
+}\r