OSDN Git Service

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