/*******************************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Tiny Look and Feel * * (C) Copyright 2003 - 2007 Hans Bickel * * For
* licensing information and credits, please refer to the * comment in file
* de.muntjak.tinylookandfeel.TinyLookAndFeel * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
package de.muntjak.tinylookandfeel;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.io.Serializable;
import javax.swing.ButtonModel;
import javax.swing.Icon;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.plaf.UIResource;
/**
* MenuItemIconFactory
*
* @version 1.0
* @author Hans Bickel
*/
@SuppressWarnings (
{ "all" } )
public class MenuItemIconFactory implements Serializable
{
private static Icon checkBoxMenuItemIcon;
private static Icon radioButtonMenuItemIcon;
private static Icon menuArrowIcon;
static private final Dimension menuCheckIconSize = new Dimension ( 10, 10 );
static private final Dimension menuArrowIconSize = new Dimension ( 4, 8 );
public static Icon getCheckBoxMenuItemIcon ()
{
if ( checkBoxMenuItemIcon == null )
{
checkBoxMenuItemIcon = new CheckBoxMenuItemIcon ();
}
return checkBoxMenuItemIcon;
}
public static Icon getRadioButtonMenuItemIcon ()
{
if ( radioButtonMenuItemIcon == null )
{
radioButtonMenuItemIcon = new RadioButtonMenuItemIcon ();
}
return radioButtonMenuItemIcon;
}
public static Icon getMenuArrowIcon ()
{
if ( menuArrowIcon == null )
{
menuArrowIcon = new MenuArrowIcon ();
}
return menuArrowIcon;
}
private static class CheckBoxMenuItemIcon implements Icon, UIResource,
Serializable
{
public void paintIcon ( Component c, Graphics g, int x, int y )
{
JMenuItem item = ( JMenuItem ) c;
ButtonModel model = item.getModel ();
boolean isSelected = model.isSelected ();
if ( !isSelected )
return;
boolean isEnabled = model.isEnabled ();
boolean isPressed = model.isPressed ();
boolean isArmed = model.isArmed ();
g.translate ( x, y );
if ( isEnabled )
{
if ( model.isArmed () || ( c instanceof JMenu && model.isSelected () ) )
{
// rollover
g.setColor ( Theme.menuIconRolloverColor [ Theme.style ].getColor () );
}
else
{
// !rollover
g.setColor ( Theme.menuIconColor [ Theme.style ].getColor () );
}
}
else
{
// disabled
g.setColor ( Theme.menuIconDisabledColor [ Theme.style ].getColor () );
}
// paint arrow
g.drawLine ( 2, 4, 2, 6 );
g.drawLine ( 3, 5, 3, 7 );
g.drawLine ( 4, 6, 4, 8 );
g.drawLine ( 5, 5, 5, 7 );
g.drawLine ( 6, 4, 6, 6 );
g.drawLine ( 7, 3, 7, 5 );
g.drawLine ( 8, 2, 8, 4 );
if ( !isEnabled && Theme.derivedStyle [ Theme.style ] == Theme.W99_STYLE )
{
// white shadow
g.setColor ( Theme.menuIconShadowColor [ Theme.style ].getColor () );
g.drawLine ( 9, 3, 9, 5 );
g.drawLine ( 8, 5, 8, 6 );
g.drawLine ( 7, 6, 7, 7 );
g.drawLine ( 6, 7, 6, 8 );
g.drawLine ( 5, 8, 5, 9 );
}
g.translate ( -x, -y );
}
public int getIconWidth ()
{
return menuCheckIconSize.width;
}
public int getIconHeight ()
{
return menuCheckIconSize.height;
}
}
private static class RadioButtonMenuItemIcon implements Icon, UIResource,
Serializable
{
public void paintIcon ( Component c, Graphics g, int x, int y )
{
JMenuItem b = ( JMenuItem ) c;
ButtonModel model = b.getModel ();
boolean isSelected = model.isSelected ();
boolean isEnabled = model.isEnabled ();
boolean isPressed = model.isPressed ();
boolean isArmed = model.isArmed ();
g.translate ( x, y );
if ( isEnabled )
{
if ( isPressed || isArmed )
{
// rollover
g.setColor ( Theme.menuIconRolloverColor [ Theme.style ].getColor () );
}
else
{
// !rollover
g.setColor ( Theme.menuIconColor [ Theme.style ].getColor () );
}
}
else
{
// disabled
g.setColor ( Theme.menuIconDisabledColor [ Theme.style ].getColor () );
}
// draw circle
g.drawLine ( 3, 0, 6, 0 );
g.drawLine ( 9, 3, 9, 6 );
g.drawLine ( 3, 9, 6, 9 );
g.drawLine ( 0, 3, 0, 6 );
g.drawLine ( 1, 1, 2, 1 );
g.drawLine ( 7, 1, 8, 1 );
g.drawLine ( 1, 8, 2, 8 );
g.drawLine ( 7, 8, 8, 8 );
g.drawLine ( 1, 2, 1, 2 );
g.drawLine ( 8, 2, 8, 2 );
g.drawLine ( 1, 7, 1, 7 );
g.drawLine ( 8, 7, 8, 7 );
if ( isSelected )
{
// draw check
g.drawLine ( 4, 3, 5, 3 );
g.drawLine ( 3, 4, 6, 4 );
g.drawLine ( 3, 5, 6, 5 );
g.drawLine ( 4, 6, 5, 6 );
}
g.translate ( -x, -y );
}
public int getIconWidth ()
{
return menuCheckIconSize.width;
}
public int getIconHeight ()
{
return menuCheckIconSize.height;
}
}
private static class MenuArrowIcon implements Icon, UIResource, Serializable
{
public void paintIcon ( Component c, Graphics g, int x, int y )
{
JMenuItem b = ( JMenuItem ) c;
ButtonModel model = b.getModel ();
g.translate ( x, y );
if ( !model.isEnabled () )
{
g.setColor ( Theme.menuDisabledFgColor [ Theme.style ].getColor () );
}
else
{
if ( model.isArmed () || ( c instanceof JMenu && model.isSelected () ) )
{
g.setColor ( Theme.menuSelectedTextColor [ Theme.style ].getColor () );
}
else
{
g.setColor ( b.getForeground () );
}
}
if ( c.getComponentOrientation ().isLeftToRight () )
{
g.drawLine ( 0, 0, 0, 7 );
g.drawLine ( 1, 1, 1, 6 );
g.drawLine ( 2, 2, 2, 5 );
g.drawLine ( 3, 3, 3, 4 );
}
else
{
g.drawLine ( 4, 0, 4, 7 );
g.drawLine ( 3, 1, 3, 6 );
g.drawLine ( 2, 2, 2, 5 );
g.drawLine ( 1, 3, 1, 4 );
}
g.translate ( -x, -y );
}
public int getIconWidth ()
{
return menuArrowIconSize.width;
}
public int getIconHeight ()
{
return menuArrowIconSize.height;
}
}
}