/**
*
*/
package org.korsakow.ide.resources.widget.propertyhandler;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Collection;
import javax.swing.JColorChooser;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JList;
import javax.swing.colorchooser.AbstractColorChooserPanel;
import org.korsakow.ide.resources.widget.DefaultPropertyHandler;
import org.korsakow.ide.resources.widget.WidgetModel;
import org.korsakow.ide.ui.components.model.KComboboxModel;
import org.korsakow.ide.util.UIUtil;
import org.korsakow.services.util.ColorFactory;
public class ColorPropertyHandler extends DefaultPropertyHandler
{
private static String toString(Color value)
{
if (value == null) {
return null;
} else {
return ColorFactory.formatCSS(value);
}
}
@Override
public void initializeEditor(Collection<? extends WidgetModel> widgets, final JComboBox editor, String propertyName) {
super.initializeEditor(widgets, editor, propertyName);
editor.setEditable(false);
editor.setRenderer(this);
Object value = getCommonValue(widgets, propertyName);
editor.setModel(new KComboboxModel(new String[]{}, value));
final JColorChooser chooser = createColorChooser(Color.red);
ActionListener okListener = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
editor.getModel().setSelectedItem(ColorPropertyHandler.toString(chooser.getColor()));
notifyEditingStopped();
}
};
ActionListener cancelListener = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
notifyEditingCanceled();
}
};
final JDialog dialog = JColorChooser.createDialog(editor, "Color", true, chooser, okListener, cancelListener);
UIUtil.runUITaskLater(new Runnable() {
public void run() {
dialog.setVisible(true);
}
});
}
public static JColorChooser createColorChooser(Color initial)
{
final JColorChooser chooser = new JColorChooser(initial);
AbstractColorChooserPanel defaultPanels[] = chooser.getChooserPanels();
if (defaultPanels.length == 3) // remove other useless panels
defaultPanels = new AbstractColorChooserPanel[]{defaultPanels[1]}; // [1] should be the HSV chooser
chooser.setChooserPanels(defaultPanels);
return chooser;
}
@Override
public Component getPropertyRenderer(String propertyName, Object propertyValue)
{
// System.out.println(propertyName + "\t" + propertyValue);
return getListCellRendererComponent(null, propertyValue, -1, false, false);
}
@Override
public Component getListCellRendererComponent(JList list,
Object value, int index, boolean isSelected,
boolean cellHasFocus)
{
String entry = (String)value;
if (entry != null) {
Color color = ColorFactory.createRGB(entry);
setBackground(color);
setText("");
setOpaque(true);
} else {
setOpaque(false);
setBackground(null);
setForeground(null);
setText("--");
}
setPreferredSize(new Dimension(70, 20));
return this;
}
}