/*
* File : ColorParameter.java
* Created : 12 nov. 2003
* By : Olivier
*
* Azureus - a Java Bittorrent client
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License.
*
* 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 General Public License for more details ( see the LICENSE file ).
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.gudy.azureus2.ui.swt.config;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.ColorDialog;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.gudy.azureus2.core3.config.COConfigurationManager;
import org.gudy.azureus2.core3.config.ParameterListener;
import com.aelitis.azureus.ui.swt.utils.ColorCache;
/**
* @author Olivier
*
*/
public class ColorParameter extends Parameter implements ParameterListener {
private Button colorChooser;
protected String sParamName;
private Image img;
private int r;
private int g;
private int b;
public ColorParameter(final Composite composite,
final String name,
int _r, int _g, int _b) {
super(name);
sParamName = name;
colorChooser = new Button(composite,SWT.PUSH);
r = COConfigurationManager.getIntParameter(name+".red",_r);
g = COConfigurationManager.getIntParameter(name+".green",_g);
b = COConfigurationManager.getIntParameter(name+".blue",_b);
updateButtonColor(composite.getDisplay(), r, g, b);
COConfigurationManager.addParameterListener(sParamName, this);
colorChooser.addListener(SWT.Dispose, new Listener() {
public void handleEvent(Event e) {
COConfigurationManager.removeParameterListener(sParamName, ColorParameter.this);
if(img != null && ! img.isDisposed()) {
img.dispose();
}
}
});
colorChooser.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
ColorDialog cd = new ColorDialog(composite.getShell());
cd.setRGB(new RGB(r,g,b));
RGB newColor = cd.open();
if (newColor == null)
return;
newColorChosen();
COConfigurationManager.setRGBParameter(name, newColor.red, newColor.green, newColor.blue);
newColorSet();
}
});
}
private void updateButtonColor(final Display display, final int rV, final int gV, final int bV) {
Image oldImg = img;
Color color = ColorCache.getColor(display, rV, gV, bV);
img = new Image(display,25,10);
GC gc = new GC(img);
gc.setBackground(color);
gc.fillRectangle(0,0,25,10);
gc.dispose();
colorChooser.setImage(img);
if(oldImg != null && ! oldImg.isDisposed())
oldImg.dispose();
}
public Control getControl() {
return colorChooser;
}
public void setLayoutData(Object layoutData) {
colorChooser.setLayoutData(layoutData);
}
public void parameterChanged(String parameterName) {
r = COConfigurationManager.getIntParameter(sParamName+".red");
g = COConfigurationManager.getIntParameter(sParamName+".green");
b = COConfigurationManager.getIntParameter(sParamName+".blue");
updateButtonColor(colorChooser.getDisplay(), r, g, b);
}
public void newColorChosen() {
// subclasses can write their own code
}
public void newColorSet() {
// subclasses can write their own code
}
public void setValue(Object value) {
// not needed, we already trap external changes
}
}