OSDN Git Service

3e3f61be0853cbd99da3e43e3c0c3378fbc5b135
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / ui / swing / actions / UpdateBirthmarkCellColorAction.java
1 package jp.sourceforge.stigmata.ui.swing.actions;
2
3 /*
4  * $Id$
5  */
6
7 import java.awt.Color;
8 import java.awt.GridLayout;
9 import java.awt.event.ActionEvent;
10 import java.awt.event.ActionListener;
11
12 import javax.swing.AbstractAction;
13 import javax.swing.Box;
14 import javax.swing.JButton;
15 import javax.swing.JColorChooser;
16 import javax.swing.JComponent;
17 import javax.swing.JLabel;
18 import javax.swing.JOptionPane;
19 import javax.swing.JPanel;
20
21 import jp.sourceforge.stigmata.BirthmarkEnvironment;
22 import jp.sourceforge.stigmata.ui.swing.CompareTableCellRenderer;
23 import jp.sourceforge.stigmata.ui.swing.GUIUtility;
24 import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
25
26 /**
27  * 
28  * @author Haruaki Tamada
29  * @version $Revision$
30  */
31 public class UpdateBirthmarkCellColorAction extends AbstractAction{
32     private static final long serialVersionUID = 2390797591047570440L;
33
34     private StigmataFrame parent;
35     private BirthmarkEnvironment environment;
36     private JColorChooser chooser;
37
38     public UpdateBirthmarkCellColorAction(StigmataFrame parent, BirthmarkEnvironment environment){
39         this.parent = parent;
40         this.environment = environment;
41     }
42
43     public UpdateBirthmarkCellColorAction(StigmataFrame parent){
44         this(parent, BirthmarkEnvironment.getDefaultEnvironment());
45     }
46
47     public void actionPerformed(ActionEvent e){
48         JComponent c = createPanel();
49         JOptionPane.showMessageDialog(
50             parent, c, parent.getMessages().get("updatecellcolor.dialog.title"),
51             JOptionPane.INFORMATION_MESSAGE
52         );
53     }
54
55     private JComponent createPanel(){
56         Box panel = Box.createVerticalBox();
57         for(int i = 0; i <= 5; i++){
58             Color fore = CompareTableCellRenderer.getForegroundColor(i, environment);
59             Color back = CompareTableCellRenderer.getBackgroundColor(i, environment);
60
61             UpdateColorPane pane = new UpdateColorPane(i, fore, back);
62             panel.add(pane);
63         }
64
65         return panel;
66     }
67
68     private Color updateColor(Color c, int rank, boolean foreground){
69         if(chooser == null){
70             chooser = new JColorChooser();
71         }
72         chooser.setColor(c);
73         String l = parent.getMessages().get((foreground? "forecolor_": "backcolor_") + rank + ".label");
74         int returnValue = JOptionPane.showConfirmDialog(
75             parent, chooser, parent.getMessages().get("updatecell.title", l),
76             JOptionPane.INFORMATION_MESSAGE
77         );
78         if(returnValue == JOptionPane.OK_OPTION){
79             c = chooser.getColor();
80         }
81
82         return c;
83     }
84
85     private class UpdateColorPane extends JPanel{
86         private static final long serialVersionUID = 8271684478406307685L;
87
88         private int rank;
89         private JLabel label;
90
91         public UpdateColorPane(int rank, Color fore, Color back){
92             this.rank = rank;
93             initLayouts();
94
95             label.setForeground(fore);
96             label.setBackground(back);
97         }
98
99         public int getRank(){
100             return rank;
101         }
102
103         private void initLayouts(){
104             label = new JLabel(parent.getMessages().get("rank_" + rank + ".label"));
105             label.setOpaque(true);
106             JButton fore = GUIUtility.createButton(parent.getMessages(), "updatecellfore");
107             JButton back = GUIUtility.createButton(parent.getMessages(), "updatecellback");
108
109             ActionListener listener = new ActionListener(){
110                 public void actionPerformed(ActionEvent e){
111                     String command = e.getActionCommand();
112                     boolean foreground = command.equals("updatecellfore");
113
114                     Color c = label.getBackground();
115                     if(foreground){
116                         c = label.getForeground();
117                     }
118                     c = updateColor(c, getRank(), foreground);
119                     if(foreground){
120                         label.setForeground(c);
121                         environment.addProperty(
122                             "forecolor_" + getRank(), String.format("%06x", c.getRGB() & 0xffffff)
123                         );
124                     }
125                     else{
126                         label.setBackground(c);
127                         environment.addProperty(
128                             "backcolor_" + getRank(), String.format("%06x", c.getRGB() & 0xffffff)
129                         );
130                     }
131                 }
132             };
133             fore.addActionListener(listener);
134             back.addActionListener(listener);
135
136             setLayout(new GridLayout(1, 3));
137             add(label);
138             add(fore);
139             add(back);
140         }
141     }
142 }