package automenta.vivisect.swing.property.sheet.editor;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import automenta.vivisect.swing.property.beans.editor.AbstractPropertyEditor;
import automenta.vivisect.swing.property.sheet.I18N;
import automenta.vivisect.swing.property.swing.renderer.ColorCellRenderer;
/**
* Color editor.
*
* @author Bartosz Firyn (SarXos)
*/
public class ColorEditor extends AbstractPropertyEditor {
protected class ColorEditorComponent extends JPanel {
private static final long serialVersionUID = 411604969565728959L;
private ColorCellRenderer label = null;
private JButton button = null;
private JButton cancelButton = null;
public ColorEditorComponent() {
setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
label = new ColorCellRenderer();
label.setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 0));
label.setAlignmentX(JTextField.LEFT_ALIGNMENT);
label.setBackground(UIManager.getColor("Table.selectionBackground"));
label.setForeground(UIManager.getColor("Table.selectionForeground"));
Dimension size = new Dimension(24, 15);
Image pencil = null;
Image reset = null;
try {
pencil = ImageIO.read(getClass().getClassLoader().getResourceAsStream("com/l2fprod/common/propertysheet/icons/pencil.png"));
reset = ImageIO.read(getClass().getClassLoader().getResourceAsStream("com/l2fprod/common/propertysheet/icons/reset.png"));
} catch (IOException e) {
throw new RuntimeException("Cannot load resource", e);
}
button = new JButton();
button.setPreferredSize(size);
button.setSize(size);
button.setMaximumSize(size);
button.setMinimumSize(size);
button.setAction(new AbstractAction("", new ImageIcon(pencil)) {
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e) {
selectColor();
}
});
cancelButton = new JButton();
cancelButton.setPreferredSize(size);
cancelButton.setSize(size);
cancelButton.setMaximumSize(size);
cancelButton.setMinimumSize(size);
cancelButton.setAction(new AbstractAction("", new ImageIcon(reset)) {
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e) {
selectNull();
}
});
JPanel left = new JPanel();
left.setLayout(new BorderLayout(0, 0));
left.add(label);
left.setAlignmentX(JPanel.LEFT_ALIGNMENT);
JPanel right = new JPanel();
right.setLayout(new BoxLayout(right, BoxLayout.X_AXIS));
right.add(button);
right.add(cancelButton);
right.setPreferredSize(new Dimension(size.width * 2, 25));
right.setAlignmentX(JPanel.RIGHT_ALIGNMENT);
add(left, BorderLayout.WEST);
add(right, BorderLayout.CENTER);
}
public void setColor(Color color) {
label.setValue(color);
ColorEditor.this.color = color;
}
}
private ColorEditorComponent colorEditor = null;
private Color color;
public ColorEditor() {
editor = colorEditor = new ColorEditorComponent();
}
@Override
public Object getValue() {
return color;
}
@Override
public void setValue(Object value) {
colorEditor.setColor((Color) value);
}
protected void selectColor() {
String title = I18N.CHOOSE_COLOR;
Color selectedColor = JColorChooser.showDialog(editor, title, color);
if (selectedColor != null) {
Color oldColor = color;
Color newColor = selectedColor;
colorEditor.setColor(newColor);
firePropertyChange(oldColor, newColor);
}
}
protected void selectNull() {
Color oldColor = color;
colorEditor.setColor(null);
firePropertyChange(oldColor, null);
}
}