/* * Originally by Jonathan Fuerth. Copyright for this copy assigned * to SQL Power on July 27, 2007. * * Copyright (c) 2007, SQL Power * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * Neither the name of Jonathan Fuerth nor the names of other * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package ca.sqlpower.swingui; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Component; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.geom.Line2D; import javax.swing.Icon; /** * The AddRemoveIcon is a simple icon that draws a thick plus or minus sign, * usually for little "Add" and "Remove" buttons under a list component. */ public class AddRemoveIcon implements Icon { public static enum Type { ADD, REMOVE; } /** * This icon's type (add or remove). */ private final Type type; /** * This icon's width and height in pixels. */ private final int size = 8; /** * The width of a stroke (the horizontal and/or vertical line this * icon draws) in pixels. */ private final float strokeWidth = 1.49f; public AddRemoveIcon(Type type) { this.type = type; } public int getIconHeight() { return size; } public int getIconWidth() { return size; } /** * Paints a "+" or "-" symbol, depending on this icon's type. */ public void paintIcon(Component c, Graphics g, int x, int y) { float xf = x; float yf = y; Graphics2D g2 = (Graphics2D) g.create(); g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setColor(Color.BLACK); g2.setStroke(new BasicStroke(strokeWidth, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_BEVEL)); Line2D horiz = new Line2D.Float( xf, yf+(size/2f), xf+size, yf+(size/2f)); g2.draw(horiz); if (type == Type.ADD) { Line2D vert = new Line2D.Float( xf+(size/2f), yf, xf+(size/2f), yf+size); g2.draw(vert); } g2.dispose(); } }