OSDN Git Service

db07a802929e0854d053fd428129601624f4a5a8
[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     @Override
48     public void actionPerformed(ActionEvent e){
49         JComponent c = createPanel();
50         JOptionPane.showMessageDialog(
51             parent, c, parent.getMessages().get("updatecellcolor.dialog.title"),
52             JOptionPane.INFORMATION_MESSAGE
53         );
54     }
55
56     private JComponent createPanel(){
57         Box panel = Box.createVerticalBox();
58         for(int i = 0; i <= 5; i++){
59             Color fore = CompareTableCellRenderer.getForegroundColor(i, environment);
60             Color back = CompareTableCellRenderer.getBackgroundColor(i, environment);
61
62             UpdateColorPane pane = new UpdateColorPane(i, fore, back);
63             panel.add(pane);
64         }
65
66         return panel;
67     }
68
69     private Color updateColor(Color c, int rank, boolean foreground){
70         if(chooser == null){
71             chooser = new JColorChooser();
72         }
73         chooser.setColor(c);
74         String l = parent.getMessages().get((foreground? "forecolor_": "backcolor_") + rank + ".label");
75         int returnValue = JOptionPane.showConfirmDialog(
76             parent, chooser, parent.getMessages().get("updatecell.title", l),
77             JOptionPane.INFORMATION_MESSAGE
78         );
79         if(returnValue == JOptionPane.OK_OPTION){
80             c = chooser.getColor();
81         }
82
83         return c;
84     }
85
86     private class UpdateColorPane extends JPanel{
87         private static final long serialVersionUID = 8271684478406307685L;
88
89         private int rank;
90         private JLabel label;
91
92         public UpdateColorPane(int rank, Color fore, Color back){
93             this.rank = rank;
94             initLayouts();
95
96             label.setForeground(fore);
97             label.setBackground(back);
98         }
99
100         public int getRank(){
101             return rank;
102         }
103
104         private void initLayouts(){
105             label = new JLabel(parent.getMessages().get("rank_" + rank + ".label"));
106             label.setOpaque(true);
107             JButton fore = GUIUtility.createButton(parent.getMessages(), "updatecellfore");
108             JButton back = GUIUtility.createButton(parent.getMessages(), "updatecellback");
109
110             ActionListener listener = new ActionListener(){
111                 @Override
112                 public void actionPerformed(ActionEvent e){
113                     String command = e.getActionCommand();
114                     boolean foreground = command.equals("updatecellfore");
115
116                     Color c = label.getBackground();
117                     if(foreground){
118                         c = label.getForeground();
119                     }
120                     c = updateColor(c, getRank(), foreground);
121                     if(foreground){
122                         label.setForeground(c);
123                         environment.addProperty(
124                             "forecolor_" + getRank(), String.format("%06x", c.getRGB() & 0xffffff)
125                         );
126                     }
127                     else{
128                         label.setBackground(c);
129                         environment.addProperty(
130                             "backcolor_" + getRank(), String.format("%06x", c.getRGB() & 0xffffff)
131                         );
132                     }
133                 }
134             };
135             fore.addActionListener(listener);
136             back.addActionListener(listener);
137
138             setLayout(new GridLayout(1, 3));
139             add(label);
140             add(fore);
141             add(back);
142         }
143     }
144 }