//$HeadURL$ /*---------------------------------------------------------------------------- This file is part of deegree, http://deegree.org/ Copyright (C) 2001-2009 by: - Department of Geography, University of Bonn - and - lat/lon GmbH - This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Contact information: lat/lon GmbH Aennchenstr. 19, 53177 Bonn Germany http://lat-lon.de/ Department of Geography, University of Bonn Prof. Dr. Klaus Greve Postfach 1147, 53001 Bonn Germany http://www.geographie.uni-bonn.de/deegree/ e-mail: info@deegree.org ----------------------------------------------------------------------------*/ package org.deegree.igeo.views.swing.util.table; import java.awt.Color; import java.awt.Component; import java.awt.Graphics; import javax.swing.Icon; import javax.swing.UIManager; /** * TODO add class documentation here * * @author <a href="mailto:name@deegree.org">Andreas Poth</a> * @author <a href="http://www.esus.com/docs/GetQuestionPage.jsp?uid=1270&type=pf">Nobuo Tamemasa</a> * @author last edited by: $Author$ * * @version $Revision$, $Date$ */ public class BevelArrowIcon implements Icon { public static final int UP = 0; // direction public static final int DOWN = 1; private static final int DEFAULT_SIZE = 11; private Color edge1; private Color edge2; private Color fill; private int size; private int direction; /** * * @param direction * @param isRaisedView * @param isPressedView */ public BevelArrowIcon( int direction, boolean isRaisedView, boolean isPressedView ) { if ( isRaisedView ) { if ( isPressedView ) { init( UIManager.getColor( "controlLtHighlight" ), UIManager.getColor( "controlDkShadow" ), UIManager.getColor( "controlShadow" ), DEFAULT_SIZE, direction ); } else { init( UIManager.getColor( "controlHighlight" ), UIManager.getColor( "controlShadow" ), UIManager.getColor( "control" ), DEFAULT_SIZE, direction ); } } else { if ( isPressedView ) { init( UIManager.getColor( "controlDkShadow" ), UIManager.getColor( "controlLtHighlight" ), UIManager.getColor( "controlShadow" ), DEFAULT_SIZE, direction ); } else { init( UIManager.getColor( "controlShadow" ), UIManager.getColor( "controlHighlight" ), UIManager.getColor( "control" ), DEFAULT_SIZE, direction ); } } } public BevelArrowIcon( Color edge1, Color edge2, Color fill, int size, int direction ) { init( edge1, edge2, fill, size, direction ); } public void paintIcon( Component c, Graphics g, int x, int y ) { switch ( direction ) { case DOWN: drawDownArrow( g, x, y ); break; case UP: drawUpArrow( g, x, y ); break; } } public int getIconWidth() { return size; } public int getIconHeight() { return size; } private void init( Color edge1, Color edge2, Color fill, int size, int direction ) { this.edge1 = edge1; this.edge2 = edge2; this.fill = fill; this.size = size; this.direction = direction; } private void drawDownArrow( Graphics g, int xo, int yo ) { g.setColor( edge1 ); g.drawLine( xo, yo, xo + size - 1, yo ); g.drawLine( xo, yo + 1, xo + size - 3, yo + 1 ); g.setColor( edge2 ); g.drawLine( xo + size - 2, yo + 1, xo + size - 1, yo + 1 ); int x = xo + 1; int y = yo + 2; int dx = size - 6; while ( y + 1 < yo + size ) { g.setColor( edge1 ); g.drawLine( x, y, x + 1, y ); g.drawLine( x, y + 1, x + 1, y + 1 ); if ( 0 < dx ) { g.setColor( fill ); g.drawLine( x + 2, y, x + 1 + dx, y ); g.drawLine( x + 2, y + 1, x + 1 + dx, y + 1 ); } g.setColor( edge2 ); g.drawLine( x + dx + 2, y, x + dx + 3, y ); g.drawLine( x + dx + 2, y + 1, x + dx + 3, y + 1 ); x += 1; y += 2; dx -= 2; } g.setColor( edge1 ); g.drawLine( xo + ( size / 2 ), yo + size - 1, xo + ( size / 2 ), yo + size - 1 ); } private void drawUpArrow( Graphics g, int xo, int yo ) { g.setColor( edge1 ); int x = xo + ( size / 2 ); g.drawLine( x, yo, x, yo ); x--; int y = yo + 1; int dx = 0; while ( y + 3 < yo + size ) { g.setColor( edge1 ); g.drawLine( x, y, x + 1, y ); g.drawLine( x, y + 1, x + 1, y + 1 ); if ( 0 < dx ) { g.setColor( fill ); g.drawLine( x + 2, y, x + 1 + dx, y ); g.drawLine( x + 2, y + 1, x + 1 + dx, y + 1 ); } g.setColor( edge2 ); g.drawLine( x + dx + 2, y, x + dx + 3, y ); g.drawLine( x + dx + 2, y + 1, x + dx + 3, y + 1 ); x -= 1; y += 2; dx += 2; } g.setColor( edge1 ); g.drawLine( xo, yo + size - 3, xo + 1, yo + size - 3 ); g.setColor( edge2 ); g.drawLine( xo + 2, yo + size - 2, xo + size - 1, yo + size - 2 ); g.drawLine( xo, yo + size - 1, xo + size, yo + size - 1 ); } }