//$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.Component; import java.awt.Insets; import java.util.Hashtable; import javax.swing.JButton; import javax.swing.JTable; import javax.swing.table.TableCellRenderer; /** * 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 SortButtonRenderer extends JButton implements TableCellRenderer { private static final long serialVersionUID = 759027662360387685L; public static final int NONE = 0; public static final int DOWN = 1; public static final int UP = 2; int pushedColumn; Hashtable<Integer, Object> state; JButton downButton, upButton; /** * */ public SortButtonRenderer() { pushedColumn = -1; state = new Hashtable<Integer, Object>(); setMargin( new Insets( 0, 0, 0, 0 ) ); setHorizontalTextPosition( LEFT ); setIcon( new BlankIcon() ); // perplexed // ArrowIcon(SwingConstants.SOUTH, true) // BevelArrowIcon (int direction, boolean isRaisedView, boolean isPressedView) downButton = new JButton(); downButton.setMargin( new Insets( 0, 0, 0, 0 ) ); downButton.setHorizontalTextPosition( LEFT ); downButton.setIcon( new BevelArrowIcon( BevelArrowIcon.DOWN, false, false ) ); downButton.setPressedIcon( new BevelArrowIcon( BevelArrowIcon.DOWN, false, true ) ); upButton = new JButton(); upButton.setMargin( new Insets( 0, 0, 0, 0 ) ); upButton.setHorizontalTextPosition( LEFT ); upButton.setIcon( new BevelArrowIcon( BevelArrowIcon.UP, false, false ) ); upButton.setPressedIcon( new BevelArrowIcon( BevelArrowIcon.UP, false, true ) ); } public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column ) { JButton button = this; Object obj = state.get( new Integer( column ) ); if ( obj != null ) { if ( ( (Integer) obj ).intValue() == DOWN ) { button = downButton; } else { button = upButton; } } button.setText( ( value == null ) ? "" : value.toString() ); boolean isPressed = ( column == pushedColumn ); button.getModel().setPressed( isPressed ); button.getModel().setArmed( isPressed ); return button; } public void setPressedColumn( int col ) { pushedColumn = col; } public void setSelectedColumn( int col ) { if ( col < 0 ) return; Integer value = null; Object obj = state.get( new Integer( col ) ); if ( obj == null ) { value = new Integer( DOWN ); } else { if ( ( (Integer) obj ).intValue() == DOWN ) { value = new Integer( UP ); } else { value = new Integer( DOWN ); } } state.clear(); state.put( new Integer( col ), value ); } public int getState( int col ) { int retValue; Object obj = state.get( new Integer( col ) ); if ( obj == null ) { retValue = NONE; } else { if ( ( (Integer) obj ).intValue() == DOWN ) { retValue = DOWN; } else { retValue = UP; } } return retValue; } }