/* * (C) Copyright 2005 Nilo J. Gonzalez * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser Gereral Public Licence as published by the Free * Software Foundation; either version 2 of the Licence, or (at your opinion) any * later version. * * This library is distributed in the hope that it will be usefull, but WITHOUT ANY * WARRANTY; without even the implied warranty of merchantability or fitness for a * particular purpose. See the GNU Lesser General Public Licence for more details. * * You should have received a copy of the GNU Lesser General Public Licence along * with this library; if not, write to the Free Software Foundation, Inc., 59 * Temple Place, Suite 330, Boston, Ma 02111-1307 USA. * * http://www.gnu.org/licenses/lgpl.html (English) * http://gugs.sindominio.net/gnu-gpl/lgpl-es.html (Espa�ol) * * * Original author: Nilo J. Gonzalez */ package com.nilo.plaf.nimrod; import java.awt.*; import javax.swing.*; import javax.swing.border.*; import javax.swing.plaf.*; import javax.swing.plaf.basic.*; public class NimRODSpinnerUI extends BasicSpinnerUI { protected boolean oldOpaque; public static ComponentUI createUI( JComponent c) { return new NimRODSpinnerUI(); } protected void installDefaults() { super.installDefaults(); oldOpaque = spinner.isOpaque(); spinner.setOpaque( false); } protected void uninstallDefaults() { super.uninstallDefaults(); spinner.setOpaque( oldOpaque); } protected Component createPreviousButton() { Component c = createArrowButton( SwingConstants.SOUTH); c.setName( "Spinner.previousButton"); installPreviousButtonListeners(c); return c; } protected Component createNextButton() { Component c = createArrowButton( SwingConstants.NORTH); c.setName( "Spinner.nextButton"); installNextButtonListeners(c); return c; } private Component createArrowButton( int direction) { JButton b = new NimRODArrowButton(direction); b.setInheritsPopupMenu( true); return b; } public void paint( Graphics g, JComponent c) { super.paint( g, c); g.setColor( c.getBackground()); g.fillRect( 2,3, c.getWidth()-4, c.getHeight()-6); g.drawLine( 3,2, c.getWidth()-4, 2); g.drawLine( 3,c.getHeight()-3, c.getWidth()-4, c.getHeight()-3); JComponent editor = spinner.getEditor(); if ( editor instanceof JSpinner.DefaultEditor ) { JTextField text = ((JSpinner.DefaultEditor)editor).getTextField(); text.setBackground( c.getBackground()); } } /****************************************************************************************/ class NimRODArrowButton extends JButton { private static final long serialVersionUID = 3031842923932443184L; private int dir; public NimRODArrowButton( int direction) { super(); setRequestFocusEnabled( false); dir = direction; if ( direction == SwingConstants.NORTH ) { setIcon( UIManager.getIcon( "Spinner.nextIcon")); } else { setIcon( UIManager.getIcon( "Spinner.previousIcon")); } setOpaque( false); } // Esto esta aqui gracias a Christopher J. Huey, que no solo hizo pruebas y mas pruebas, hasta un nivel al que ni yo // ni nadie habia llegado, ��si no que encima el tio va y manda parches!! La verdad es que no se como agradecer // estas cosas... // This is a fix from Christopher J. Huey public boolean isFocusTraversable() { return false; } public Dimension getPreferredSize() { return new Dimension( 15, getIcon().getIconHeight()); } public Dimension getMinimumSize() { return getPreferredSize(); } public void paint( Graphics g) { Icon icon = getIcon(); int w = getWidth()-1; int h = getHeight()-1; int x = (w-icon.getIconWidth())/2; int y = (h-icon.getIconHeight())/2; int yf = y; Border bb = ((JSpinner)getParent()).getBorder(); if ( bb != null ) { if ( dir == SwingConstants.NORTH ) { y += bb.getBorderInsets( this).top / 2; yf = bb.getBorderInsets( this).top - 2; } else { yf = getHeight() - bb.getBorderInsets( this).bottom; } w -= 3; } icon.paintIcon( this, g, x, y); if ( dir == SwingConstants.NORTH ) { g.setColor( NimRODUtils.getBrillo()); g.drawLine( 1,yf, 1,h); g.setColor( NimRODUtils.getSombra()); g.drawLine( 1, h, w, h); g.drawLine( 0,yf, 0,h); } else { g.setColor( NimRODUtils.getBrillo()); g.drawLine( 1,0, w,0); g.drawLine( 1,0, 1,yf); g.setColor( NimRODUtils.getSombra()); g.drawLine( 0,0, 0,yf); } } } }