/*! * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program 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. * * Copyright (c) 2002-2013 Pentaho Corporation.. All rights reserved. */ package org.pentaho.reporting.libraries.designtime.swing.colorchooser; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.EventListenerList; import java.awt.*; public class ExtendedColorModel { private EventListenerList eventListenerList; private int hue; private int saturation; private int value; private int red; private int green; private int blue; private boolean traceEvents; public ExtendedColorModel() { eventListenerList = new EventListenerList(); } public void setTraceEvents( final boolean traceEvents ) { this.traceEvents = traceEvents; } public int getHue() { return hue; } public int getSaturation() { return saturation; } public int getValue() { return value; } public int getRed() { return red; } public int getGreen() { return green; } public int getBlue() { return blue; } public void fireChangeEvent() { final ChangeListener[] listeners = eventListenerList.getListeners( ChangeListener.class ); if ( listeners.length == 0 ) { return; } final ChangeEvent event = new ChangeEvent( this ); for ( int i = 0; i < listeners.length; i++ ) { final ChangeListener listener = listeners[ i ]; listener.stateChanged( event ); } if ( traceEvents ) { new Exception().printStackTrace(); } } public void addChangeListener( final ChangeListener changeListener ) { eventListenerList.add( ChangeListener.class, changeListener ); } public void removeChangeListener( final ChangeListener changeListener ) { eventListenerList.remove( ChangeListener.class, changeListener ); } public Color getSelectedColor() { return new Color( red, green, blue ); } public void setSelectedColor( final Color color ) { if ( color == null ) { return; } if ( this.red == color.getRed() && this.green == color.getGreen() && this.blue == color.getBlue() ) { return; } this.red = color.getRed(); this.green = color.getGreen(); this.blue = color.getBlue(); final float[] hsb = Color.RGBtoHSB( red, green, blue, null ); hue = (int) ( hsb[ 0 ] * 360f ); saturation = (int) ( hsb[ 1 ] * 100f ); value = (int) ( hsb[ 2 ] * 100f ); fireChangeEvent(); } public void setHSB( final int hue, final int saturation, final int value ) { if ( this.hue == hue && this.saturation == saturation && this.value == value ) { return; } this.hue = hue; this.saturation = saturation; this.value = value; final Color color = Color.getHSBColor( hue / 360f, saturation / 100f, value / 100f ); this.red = color.getRed(); this.green = color.getGreen(); this.blue = color.getBlue(); fireChangeEvent(); } public void setRGB( final int red, final int green, final int blue ) { if ( this.red == red && this.green == green && this.blue == blue ) { return; } this.red = red; this.green = green; this.blue = blue; final float[] hsb = Color.RGBtoHSB( red, green, blue, null ); hue = (int) ( hsb[ 0 ] * 360f ); saturation = (int) ( hsb[ 1 ] * 100f ); value = (int) ( hsb[ 2 ] * 100f ); fireChangeEvent(); } public void copyInto( final ExtendedColorModel colorModel ) { if ( this.red == colorModel.red && this.green == colorModel.green && this.blue == colorModel.blue && this.hue == colorModel.hue && this.saturation == colorModel.saturation && this.value == colorModel.value ) { return; } this.red = colorModel.red; this.green = colorModel.green; this.blue = colorModel.blue; this.hue = colorModel.hue; this.saturation = colorModel.saturation; this.value = colorModel.value; fireChangeEvent(); } }