521ee695cf50e451e90ceec4283f14e6430e0853
[debian/jabref.git] / src / java / net / sf / jabref / gui / ColorSetupPanel.java
1 package net.sf.jabref.gui;
2
3 import com.jgoodies.forms.layout.FormLayout;
4 import com.jgoodies.forms.builder.DefaultFormBuilder;
5
6 import javax.swing.*;
7 import java.awt.*;
8 import java.awt.event.ActionListener;
9 import java.awt.event.ActionEvent;
10 import java.util.ArrayList;
11 import java.util.Iterator;
12
13 import net.sf.jabref.Globals;
14
15 /**
16  * Created by IntelliJ IDEA.
17  * User: alver
18  * Date: Oct 10, 2005
19  * Time: 4:29:35 PM
20  * To change this template use File | Settings | File Templates.
21  */
22 public class ColorSetupPanel extends JPanel {
23
24     private final static int ICON_WIDTH=30, ICON_HEIGHT=20;
25     private ArrayList buttons = new ArrayList();
26
27     public ColorSetupPanel() {
28
29         FormLayout layout = new FormLayout
30                 ("30dlu, 4dlu, fill:pref, 4dlu, fill:pref, 8dlu, 30dlu, 4dlu, fill:pref, 4dlu, fill:pref", "");
31         DefaultFormBuilder builder = new DefaultFormBuilder(layout);
32
33         buttons.add(new ColorButton("tableText", Globals.lang("Table text color")));
34         buttons.add(new ColorButton("tableBackground", Globals.lang("Table background color")));
35         buttons.add(new ColorButton("tableReqFieldBackground", Globals.lang("Background color for required fields")));
36         buttons.add(new ColorButton("tableOptFieldBackground", Globals.lang("Background color for optional fields")));
37         buttons.add(new ColorButton("markedEntryBackground", Globals.lang("Background color for marked entries")));
38         buttons.add(new ColorButton("incompleteEntryBackground", Globals.lang("Color for marking incomplete entries")));
39         buttons.add(new ColorButton("gridColor", Globals.lang("Table grid color")));
40
41
42
43         for (Iterator i=buttons.iterator(); i.hasNext();) {
44             ColorButton but = (ColorButton)i.next();
45             builder.append(but);
46             builder.append(but.getDefaultButton());
47             builder.append(but.getName());
48             but.addActionListener(new ColorButtonListener(but));
49
50         }
51
52         setLayout(new BorderLayout());
53         add(builder.getPanel(), BorderLayout.CENTER);
54
55         setValues();
56
57
58     }
59
60     public void setValues() {
61         for (Iterator i=buttons.iterator(); i.hasNext();) {
62             ColorButton but = (ColorButton)i.next();
63             but.setColor(Globals.prefs.getColor(but.getKey()));
64         }
65
66     }
67
68     public void storeSettings() {
69         for (Iterator i=buttons.iterator(); i.hasNext();) {
70             ColorButton but = (ColorButton)i.next();
71             Globals.prefs.putColor(but.getKey(), but.getColor());
72         }
73     }
74
75     class ColorButtonListener implements ActionListener {
76         private ColorButton button;
77
78         public ColorButtonListener(ColorButton button) {
79             this.button = button;
80         }
81         public void actionPerformed(ActionEvent e) {
82             Color chosen = JColorChooser.showDialog(null, button.getName(), button.getColor());
83             if (chosen != null)
84                 button.setColor(chosen);
85         }
86     }
87
88     /**
89      * A button to display the chosen color, and hold key information about a color setting.
90      * Includes a method to produce a Default button for this setting.
91      */
92     class ColorButton extends JButton implements Icon {
93         private Color color = Color.white;
94         private String key, name;
95
96         public ColorButton(String key, String name) {
97             setIcon(this);
98             this.key = key;
99             this.name = name;
100             setBorder(BorderFactory.createRaisedBevelBorder());
101         }
102
103         public JButton getDefaultButton() {
104             JButton toDefault = new JButton(Globals.lang("Default"));
105             toDefault.addActionListener(new ActionListener() {
106                 public void actionPerformed(ActionEvent e) {
107                     setColor(Globals.prefs.getDefaultColor(key));
108                     repaint();
109                 }
110             });
111             return toDefault;
112         }
113
114
115         public String getKey() {
116             return key;
117         }
118
119         public String getName() {
120             return name;
121         }
122
123         public Color getColor() {
124             return color;
125         }
126
127         public void setColor(Color color) {
128             this.color = color;
129         }
130
131         public void paintIcon(Component c, Graphics g, int x, int y) {
132             Rectangle r = g.getClipBounds();
133             g.setColor(color);
134             g.fillRect(r.x, r.y, r.width, r.height);
135         }
136
137         public int getIconWidth() {
138             return ICON_WIDTH;
139         }
140
141         public int getIconHeight() {
142             return ICON_HEIGHT;
143         }
144     }
145
146 }