/*
** Salsa - Swing Add-On Suite
** Copyright (c) 2001, 2002 by Gerald Bauer
**
** This program is free software.
**
** You may redistribute it and/or modify it under the terms of the GNU
** General Public License as published by the Free Software Foundation.
** Version 2 of the license should be included with this distribution in
** the file LICENSE, as well as License.html. If the license is not
** included with this distribution, you may find a copy at the FSF web
** site at 'www.gnu.org' or 'www.fsf.org', or you may write to the
** Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139 USA.
**
** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND,
** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR
** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY
** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR
** REDISTRIBUTION OF THIS SOFTWARE.
**
*/
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
public class ColorMenu extends JMenu
{
Border _activeBorder;
Map _colorPanes;
Border _selectedBorder;
ColorPane _selectedColorPane;
Border _unselectedBorder;
public ColorMenu( String name )
{
super( name );
_unselectedBorder = new CompoundBorder(
new MatteBorder( 1, 1, 1, 1, getBackground() ),
new BevelBorder( BevelBorder.LOWERED, Color.WHITE, Color.GRAY ) );
_selectedBorder = new CompoundBorder(
new MatteBorder( 2, 2, 2, 2, Color.RED ),
new MatteBorder( 1, 1, 1, 1, getBackground() ) );
_activeBorder = new CompoundBorder(
new MatteBorder( 2, 2, 2, 2, Color.BLUE ),
new MatteBorder( 1, 1, 1, 1, getBackground() ) );
JPanel p = new JPanel();
p.setBorder( new EmptyBorder( 5, 5, 5, 5 ) );
p.setLayout( new GridLayout( 8, 8 ) );
_colorPanes = new HashMap();
int values[] = new int[]{0, 128, 192, 255};
for( int r = 0; r < values.length; r++ )
for( int g = 0; g < values.length; g++ )
for( int b = 0; b < values.length; b++ )
{
Color color = new Color( values[r], values[g], values[b] );
ColorPane colorPane = new ColorPane( color );
p.add( colorPane );
_colorPanes.put( color, colorPane );
}
add( p );
}
public void setColor( Color c )
{
Object obj = _colorPanes.get( c );
if( obj == null )
return;
if( _selectedColorPane != null )
_selectedColorPane.setSelected( false );
_selectedColorPane = ( ColorPane ) obj;
_selectedColorPane.setSelected( true );
}
public Color getColor()
{
if( _selectedColorPane == null )
return null;
return _selectedColorPane.getColor();
}
public void doSelection()
{
fireActionPerformed( new ActionEvent( this,
ActionEvent.ACTION_PERFORMED, getActionCommand() ) );
}
class ColorPane extends JPanel implements MouseListener
{
Color _color;
boolean _isSelected;
public ColorPane( Color color )
{
_color = color;
setBackground( color );
setBorder( _unselectedBorder );
String msg = "rgb( " + color.getRed() + ", "
+ color.getGreen() + ", "
+ color.getBlue() + " )";
setToolTipText( msg );
addMouseListener( this );
}
public void setSelected( boolean isSelected )
{
_isSelected = isSelected;
if( _isSelected )
setBorder( _selectedBorder );
else
setBorder( _unselectedBorder );
}
public Color getColor()
{
return _color;
}
public Dimension getMaximumSize()
{
return getPreferredSize();
}
public Dimension getMinimumSize()
{
return getPreferredSize();
}
public Dimension getPreferredSize()
{
return new Dimension( 15, 15 );
}
public boolean isSelected()
{
return _isSelected;
}
public void mouseClicked( MouseEvent ev ) { }
public void mouseEntered( MouseEvent ev )
{
setBorder( _activeBorder );
}
public void mouseExited( MouseEvent ev )
{
setBorder( _isSelected ? _selectedBorder : _unselectedBorder );
}
public void mousePressed( MouseEvent ev ) { }
public void mouseReleased( MouseEvent ev )
{
setColor( _color );
MenuSelectionManager.defaultManager().clearSelectedPath();
doSelection();
}
}
}