create changelog entry
[debian/openrocket] / core / src / net / sf / openrocket / gui / components / ColorChooserButton.java
1 package net.sf.openrocket.gui.components;
2
3 import java.awt.Color;
4 import java.awt.event.ActionEvent;
5 import java.awt.event.ActionListener;
6 import java.beans.PropertyChangeListener;
7
8 import javax.swing.JButton;
9 import javax.swing.JColorChooser;
10 import javax.swing.JDialog;
11 import javax.swing.JPanel;
12
13 import net.sf.openrocket.logging.LogHelper;
14 import net.sf.openrocket.startup.Application;
15
16 /**
17  * A color chooser button.  The currently selected color can be queried or set using the
18  * {@link #getSelectedColor()} and {@link #setSelectedColor(Color)}, and changes listened
19  * to by listening to property events with property name {@link #COLOR_KEY}.
20  * 
21  * @author Sampo Niskanen <sampo.niskanen@iki.fi>
22  */
23 public class ColorChooserButton extends JButton {
24         private static final LogHelper log = Application.getLogger();
25         
26         public static final String COLOR_KEY = "selectedColor";
27         
28         
29         public ColorChooserButton(Color initial) {
30                 
31                 setSelectedColor(initial);
32                 
33                 // Add action listener that opens color chooser dialog
34                 this.addActionListener(new ActionListener() {
35                         @Override
36                         public void actionPerformed(ActionEvent e) {
37                                 log.user("Activating color chooser");
38                                 final JColorChooser chooser = new JColorChooser(getSelectedColor());
39                                 chooser.setPreviewPanel(new JPanel());
40                                 final JDialog dialog = JColorChooser.createDialog(ColorChooserButton.this, "Select color", true,
41                                                 chooser, new ActionListener() {
42                                                         @Override
43                                                         public void actionPerformed(ActionEvent e2) {
44                                                                 Color c = chooser.getColor();
45                                                                 log.user("User selected color " + c);
46                                                                 setSelectedColor(chooser.getColor());
47                                                         }
48                                                 }, null);
49                                 log.info("Closing color chooser");
50                                 dialog.setVisible(true);
51                         }
52                 });
53                 
54         }
55         
56         
57         public void addColorPropertyChangeListener(PropertyChangeListener listener) {
58                 this.addPropertyChangeListener(COLOR_KEY, listener);
59         }
60         
61         public void setSelectedColor(Color c) {
62                 log.debug("Selecting color " + c);
63                 this.setIcon(new ColorIcon(c));
64                 this.putClientProperty(COLOR_KEY, c);
65         }
66         
67         public Color getSelectedColor() {
68                 return (Color) this.getClientProperty(COLOR_KEY);
69         }
70         
71 }