/*******************************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* 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.controlpanel;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import javax.swing.AbstractButton;
import javax.swing.Icon;
import javax.swing.plaf.ColorUIResource;
import de.muntjak.tinylookandfeel.Theme;
/**
* ColorReference
*
* @version 1.0
* @author Hans Bickel
*/
@SuppressWarnings (
{ "all" } )
public class ColorReference
{
// Possible ref values
public static final int ABS_COLOR = 1;
public static final int MAIN_COLOR = 2;
public static final int BACK_COLOR = 3;
public static final int DIS_COLOR = 4;
public static final int FRAME_COLOR = 5;
public static final int SUB1_COLOR = 6;
public static final int SUB2_COLOR = 7;
public static final int SUB3_COLOR = 8;
public static final int SUB4_COLOR = 9;
public static final int SUB5_COLOR = 10;
public static final int SUB6_COLOR = 11;
public static final int SUB7_COLOR = 12;
public static final int SUB8_COLOR = 13;
protected ColorUIResource c;
protected int sat, bri;
protected int ref;
protected boolean locked;
protected ColorIcon icon;
protected static ColorIcon absolueIcon;
public ColorReference ()
{
}
public ColorReference ( Color c )
{
this.c = new ColorUIResource ( c );
sat = 0;
bri = 0;
ref = ABS_COLOR;
}
public ColorReference ( Color c, int sat, int bri, int ref )
{
this.c = new ColorUIResource ( c );
this.sat = sat;
this.bri = bri;
this.ref = ref;
}
public ColorReference ( Color c, int sat, int bri, int ref, boolean locked )
{
this.c = new ColorUIResource ( c );
this.sat = sat;
this.bri = bri;
this.ref = ref;
this.locked = locked;
}
/**
* Copy-constructor for derived ColorReferences, called only from
* Theme.loadTheme().
*
* @param other
*/
public ColorReference ( ColorReference other )
{
this.c = other.c;
this.sat = other.sat;
this.bri = other.bri;
this.ref = other.ref;
}
/**
* Copy-constructor for absolute ColorReferences, called only from
* Theme.loadTheme().
*
* @param other
*/
public ColorReference ( ColorReference other, int ref )
{
this.c = other.c;
this.sat = 0;
this.bri = 0;
this.ref = ref;
}
public void reset ()
{
sat = 0;
bri = 0;
}
public ColorUIResource getColor ()
{
return c;
}
public int getSaturation ()
{
return sat;
}
public int getBrightness ()
{
return bri;
}
public int getReference ()
{
return ref;
}
public ColorUIResource getReferenceColor ()
{
switch ( ref )
{
case MAIN_COLOR :
return Theme.mainColor [ Theme.style ].getColor ();
case BACK_COLOR :
return Theme.backColor [ Theme.style ].getColor ();
case DIS_COLOR :
return Theme.disColor [ Theme.style ].getColor ();
case FRAME_COLOR :
return Theme.frameColor [ Theme.style ].getColor ();
case SUB1_COLOR :
return Theme.sub1Color [ Theme.style ].getColor ();
case SUB2_COLOR :
return Theme.sub2Color [ Theme.style ].getColor ();
case SUB3_COLOR :
return Theme.sub3Color [ Theme.style ].getColor ();
case SUB4_COLOR :
return Theme.sub4Color [ Theme.style ].getColor ();
case SUB5_COLOR :
return Theme.sub5Color [ Theme.style ].getColor ();
case SUB6_COLOR :
return Theme.sub6Color [ Theme.style ].getColor ();
case SUB7_COLOR :
return Theme.sub7Color [ Theme.style ].getColor ();
case SUB8_COLOR :
return Theme.sub8Color [ Theme.style ].getColor ();
default :
return c;
}
}
public static ColorUIResource getReferenceColor ( int ref )
{
switch ( ref )
{
case MAIN_COLOR :
return Theme.mainColor [ Theme.style ].getColor ();
case BACK_COLOR :
return Theme.backColor [ Theme.style ].getColor ();
case DIS_COLOR :
return Theme.disColor [ Theme.style ].getColor ();
case FRAME_COLOR :
return Theme.frameColor [ Theme.style ].getColor ();
case SUB1_COLOR :
return Theme.sub1Color [ Theme.style ].getColor ();
case SUB2_COLOR :
return Theme.sub2Color [ Theme.style ].getColor ();
case SUB3_COLOR :
return Theme.sub3Color [ Theme.style ].getColor ();
case SUB4_COLOR :
return Theme.sub4Color [ Theme.style ].getColor ();
case SUB5_COLOR :
return Theme.sub5Color [ Theme.style ].getColor ();
case SUB6_COLOR :
return Theme.sub6Color [ Theme.style ].getColor ();
case SUB7_COLOR :
return Theme.sub7Color [ Theme.style ].getColor ();
case SUB8_COLOR :
return Theme.sub8Color [ Theme.style ].getColor ();
default :
return null;
}
}
public String getReferenceString ()
{
switch ( ref )
{
case MAIN_COLOR :
return "Main Color";
case BACK_COLOR :
return "Back Color";
case DIS_COLOR :
return "Disabled Color";
case FRAME_COLOR :
return "Frame Color";
case SUB1_COLOR :
return "Sub1 Color";
case SUB2_COLOR :
return "Sub2 Color";
case SUB3_COLOR :
return "Sub3 Color";
case SUB4_COLOR :
return "Sub4 Color";
case SUB5_COLOR :
return "Sub5 Color";
case SUB6_COLOR :
return "Sub6 Color";
case SUB7_COLOR :
return "Sub7 Color";
case SUB8_COLOR :
return "Sub8 Color";
default :
return "";
}
}
public void setColor ( Color newColor )
{
if ( !isAbsoluteColor () )
return;
c = new ColorUIResource ( newColor );
}
public void setSaturation ( int newSat )
{
sat = newSat;
}
public void setBrightness ( int newBri )
{
bri = newBri;
}
public void setReference ( int newRef )
{
ref = newRef;
}
public void setColor ( int sat, int bri )
{
if ( isAbsoluteColor () )
return;
this.sat = sat;
this.bri = bri;
switch ( ref )
{
case MAIN_COLOR :
c = new ColorUIResource ( SBChooser.getAdjustedColor (
Theme.mainColor [ Theme.style ].getColor (), sat, bri ) );
break;
case BACK_COLOR :
c = new ColorUIResource ( SBChooser.getAdjustedColor (
Theme.backColor [ Theme.style ].getColor (), sat, bri ) );
break;
case DIS_COLOR :
c = new ColorUIResource ( SBChooser.getAdjustedColor (
Theme.disColor [ Theme.style ].getColor (), sat, bri ) );
break;
case FRAME_COLOR :
c = new ColorUIResource ( SBChooser.getAdjustedColor (
Theme.frameColor [ Theme.style ].getColor (), sat, bri ) );
break;
case SUB1_COLOR :
c = new ColorUIResource ( SBChooser.getAdjustedColor (
Theme.sub1Color [ Theme.style ].getColor (), sat, bri ) );
break;
case SUB2_COLOR :
c = new ColorUIResource ( SBChooser.getAdjustedColor (
Theme.sub2Color [ Theme.style ].getColor (), sat, bri ) );
break;
case SUB3_COLOR :
c = new ColorUIResource ( SBChooser.getAdjustedColor (
Theme.sub3Color [ Theme.style ].getColor (), sat, bri ) );
break;
case SUB4_COLOR :
c = new ColorUIResource ( SBChooser.getAdjustedColor (
Theme.sub4Color [ Theme.style ].getColor (), sat, bri ) );
break;
case SUB5_COLOR :
c = new ColorUIResource ( SBChooser.getAdjustedColor (
Theme.sub5Color [ Theme.style ].getColor (), sat, bri ) );
break;
case SUB6_COLOR :
c = new ColorUIResource ( SBChooser.getAdjustedColor (
Theme.sub6Color [ Theme.style ].getColor (), sat, bri ) );
break;
case SUB7_COLOR :
c = new ColorUIResource ( SBChooser.getAdjustedColor (
Theme.sub7Color [ Theme.style ].getColor (), sat, bri ) );
break;
case SUB8_COLOR :
c = new ColorUIResource ( SBChooser.getAdjustedColor (
Theme.sub8Color [ Theme.style ].getColor (), sat, bri ) );
break;
}
}
public ColorUIResource update ()
{
if ( isAbsoluteColor () )
return c;
switch ( ref )
{
case MAIN_COLOR :
c = new ColorUIResource ( SBChooser.getAdjustedColor (
Theme.mainColor [ Theme.style ].getColor (), sat, bri ) );
break;
case BACK_COLOR :
c = new ColorUIResource ( SBChooser.getAdjustedColor (
Theme.backColor [ Theme.style ].getColor (), sat, bri ) );
break;
case DIS_COLOR :
c = new ColorUIResource ( SBChooser.getAdjustedColor (
Theme.disColor [ Theme.style ].getColor (), sat, bri ) );
break;
case FRAME_COLOR :
c = new ColorUIResource ( SBChooser.getAdjustedColor (
Theme.frameColor [ Theme.style ].getColor (), sat, bri ) );
break;
case SUB1_COLOR :
c = new ColorUIResource ( SBChooser.getAdjustedColor (
Theme.sub1Color [ Theme.style ].getColor (), sat, bri ) );
break;
case SUB2_COLOR :
c = new ColorUIResource ( SBChooser.getAdjustedColor (
Theme.sub2Color [ Theme.style ].getColor (), sat, bri ) );
break;
case SUB3_COLOR :
c = new ColorUIResource ( SBChooser.getAdjustedColor (
Theme.sub3Color [ Theme.style ].getColor (), sat, bri ) );
break;
case SUB4_COLOR :
c = new ColorUIResource ( SBChooser.getAdjustedColor (
Theme.sub4Color [ Theme.style ].getColor (), sat, bri ) );
break;
case SUB5_COLOR :
c = new ColorUIResource ( SBChooser.getAdjustedColor (
Theme.sub5Color [ Theme.style ].getColor (), sat, bri ) );
break;
case SUB6_COLOR :
c = new ColorUIResource ( SBChooser.getAdjustedColor (
Theme.sub6Color [ Theme.style ].getColor (), sat, bri ) );
break;
case SUB7_COLOR :
c = new ColorUIResource ( SBChooser.getAdjustedColor (
Theme.sub7Color [ Theme.style ].getColor (), sat, bri ) );
break;
case SUB8_COLOR :
c = new ColorUIResource ( SBChooser.getAdjustedColor (
Theme.sub8Color [ Theme.style ].getColor (), sat, bri ) );
break;
}
return c;
}
public boolean isAbsoluteColor ()
{
return ( ref == ABS_COLOR );
}
public void setLocked ( boolean newLocked )
{
locked = newLocked;
}
public boolean isLocked ()
{
return locked;
}
public String toString ()
{
return c.toString ();
}
public Icon getIcon ()
{
if ( icon == null )
{
icon = new ColorIcon ( false );
}
return icon;
}
public static Icon getAbsoluteIcon ()
{
if ( absolueIcon == null )
{
absolueIcon = new ColorReference ( Color.BLACK ).new ColorIcon ( true );
}
return absolueIcon;
}
public void save ( DataOutputStream out ) throws IOException
{
out.writeInt ( c.getRGB () );
out.writeInt ( sat );
out.writeInt ( bri );
out.writeInt ( ref );
out.writeBoolean ( locked );
}
public void load ( DataInputStream in ) throws IOException
{
try
{
if ( Theme.fileID >= Theme.FILE_ID_3A )
{
c = new ColorUIResource ( in.readInt () );
}
else
{
c = new ColorUIResource ( in.readInt (), in.readInt (), in.readInt () );
}
sat = in.readInt ();
bri = in.readInt ();
ref = in.readInt ();
locked = in.readBoolean ();
}
catch ( Exception ex )
{
throw new IOException ( "ColorReference.load() : " + ex.getMessage () );
}
}
class ColorIcon implements Icon
{
private boolean paintGradients;
ColorIcon ( boolean paintGradients )
{
this.paintGradients = paintGradients;
}
public int getIconHeight ()
{
return 16;
}
public int getIconWidth ()
{
return 16;
}
public void paintIcon ( Component comp, Graphics g, int x, int y )
{
Color tempCol = g.getColor ();
g.setColor ( Color.GRAY );
g.drawRect ( x, y, getIconWidth (), getIconHeight () );
if ( paintGradients )
{
float hue = 0.0f;
for ( int i = 0 ; i < 15 ; i++ )
{
g.setColor ( Color.getHSBColor ( hue, 0.5f, 1.0f ) );
g.drawLine ( x + 1 + i, y + 1, x + 1 + i, y + getIconHeight () - 1 );
hue += 1.0 / 16.0;
}
}
else
{
g.setColor ( c );
g.fillRect ( x + 1, y + 1, getIconWidth () - 1, getIconHeight () - 1 );
}
// draw arrow
if ( comp instanceof AbstractButton )
{
if ( ( ( AbstractButton ) comp ).isSelected () )
{
g.setColor ( Color.WHITE );
drawArrow ( g, x + 1, y + 1 );
g.setColor ( Color.BLACK );
drawArrow ( g, x, y );
}
}
g.setColor ( tempCol );
}
private void drawArrow ( Graphics g, int x, int y )
{
g.drawLine ( x + 3, y + 5, x + 3, y + 7 );
g.drawLine ( x + 4, y + 6, x + 4, y + 8 );
g.drawLine ( x + 5, y + 7, x + 5, y + 9 );
g.drawLine ( x + 6, y + 6, x + 6, y + 8 );
g.drawLine ( x + 7, y + 5, x + 7, y + 7 );
g.drawLine ( x + 8, y + 4, x + 8, y + 6 );
g.drawLine ( x + 9, y + 3, x + 9, y + 5 );
}
}
}