X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.spreadsheet.ui%2Fsrc%2Forg%2Fsimantics%2Fspreadsheet%2Fui%2FTableBorder.java;fp=bundles%2Forg.simantics.spreadsheet.ui%2Fsrc%2Forg%2Fsimantics%2Fspreadsheet%2Fui%2FTableBorder.java;h=f17c2a4abd0cb649b33557658deae080806288ea;hp=0000000000000000000000000000000000000000;hb=969bd23cab98a79ca9101af33334000879fb60c5;hpb=866dba5cd5a3929bbeae85991796acb212338a08 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 index 000000000..f17c2a4ab --- /dev/null +++ b/bundles/org.simantics.spreadsheet.ui/src/org/simantics/spreadsheet/ui/TableBorder.java @@ -0,0 +1,149 @@ +package org.simantics.spreadsheet.ui; + +import java.awt.Color; +import java.awt.Component; +import java.awt.Graphics; +import java.awt.Insets; + +import javax.swing.border.AbstractBorder; +import javax.swing.border.Border; + +public class TableBorder extends AbstractBorder { + + private static final long serialVersionUID = -2732591061826521471L; + private static Border blackLine; + private static Border grayLine; + + protected int thickness; + protected Color lineColor; + protected boolean roundedCorners; + + final public static TableBorder BORDER = new TableBorder(DefaultLookup.BORDER, 0); + + /** Convenience method for getting the Color.black LineBorder of thickness 1. + */ + public static Border createBlackLineBorder() { + if (blackLine == null) { + blackLine = new TableBorder(Color.black, 1); + } + return blackLine; + } + + /** Convenience method for getting the Color.gray LineBorder of thickness 1. + */ + public static Border createGrayLineBorder() { + if (grayLine == null) { + grayLine = new TableBorder(Color.gray, 1); + } + return grayLine; + } + + /** + * Creates a line border with the specified color and a + * thickness = 1. + * @param color the color for the border + */ + public TableBorder(Color color) { + this(color, 1, false); + } + + /** + * Creates a line border with the specified color and thickness. + * @param color the color of the border + * @param thickness the thickness of the border + */ + public TableBorder(Color color, int thickness) { + this(color, thickness, false); + } + + /** + * Creates a line border with the specified color, thickness, + * and corner shape. + * @param color the color of the border + * @param thickness the thickness of the border + * @param roundedCorners whether or not border corners should be round + * @since 1.3 + */ + public TableBorder(Color color, int thickness, boolean roundedCorners) { + lineColor = color; + this.thickness = thickness; + this.roundedCorners = roundedCorners; + } + + /** + * Paints the border for the specified component with the + * specified position and size. + * @param c the component for which this border is being painted + * @param g the paint graphics + * @param x the x position of the painted border + * @param y the y position of the painted border + * @param width the width of the painted border + * @param height the height of the painted border + */ + public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { + + Color oldColor = g.getColor(); + int i; + + /// PENDING(klobad) How/should do we support Roundtangles? + g.setColor(lineColor); + g.drawLine(1, height-1, 1 + width-1, height-1); + g.drawLine(width-1, 0, width-1, height-1); + // for(i = 0; i < thickness; i++) { + // if(!roundedCorners) + // g.drawRect(x+i, y+i, width-i-i-1, height-i-i-1); + // else + // g.drawRoundRect(x+i, y+i, width-i-i-1, height-i-i-1, thickness, thickness); + // } + g.setColor(oldColor); + + } + + /** + * Returns the insets of the border. + * @param c the component for which this border insets value applies + */ + public Insets getBorderInsets(Component c) { + return new Insets(thickness, thickness, thickness, thickness); + } + + /** + * Reinitialize the insets parameter with this Border's current Insets. + * @param c the component for which this border insets value applies + * @param insets the object to be reinitialized + */ + public Insets getBorderInsets(Component c, Insets insets) { + insets.left = insets.top = insets.right = insets.bottom = thickness; + return insets; + } + + /** + * Returns the color of the border. + */ + public Color getLineColor() { + return lineColor; + } + + /** + * Returns the thickness of the border. + */ + public int getThickness() { + return thickness; + } + + /** + * Returns whether this border will be drawn with rounded corners. + * @since 1.3 + */ + public boolean getRoundedCorners() { + return roundedCorners; + } + + /** + * Returns whether or not the border is opaque. + */ + public boolean isBorderOpaque() { + return !roundedCorners; + } + +}