package net.sf.jabref.gui; import com.jgoodies.forms.layout.FormLayout; import com.jgoodies.forms.builder.DefaultFormBuilder; import javax.swing.*; import java.awt.*; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.util.ArrayList; import java.util.Iterator; import net.sf.jabref.Globals; /** * Created by IntelliJ IDEA. * User: alver * Date: Oct 10, 2005 * Time: 4:29:35 PM * To change this template use File | Settings | File Templates. */ public class ColorSetupPanel extends JPanel { private final static int ICON_WIDTH=30, ICON_HEIGHT=20; private ArrayList<ColorButton> buttons = new ArrayList<ColorButton>(); public ColorSetupPanel() { FormLayout layout = new FormLayout ("30dlu, 4dlu, fill:pref, 4dlu, fill:pref, 8dlu, 30dlu, 4dlu, fill:pref, 4dlu, fill:pref", ""); DefaultFormBuilder builder = new DefaultFormBuilder(layout); buttons.add(new ColorButton("tableText", Globals.lang("Table text color"))); buttons.add(new ColorButton("markedEntryBackground0", Globals.lang("Marking color %0", "1"))); buttons.add(new ColorButton("tableBackground", Globals.lang("Table background color"))); buttons.add(new ColorButton("markedEntryBackground1", Globals.lang("Marking color %0", "2"))); buttons.add(new ColorButton("tableReqFieldBackground", Globals.lang("Background color for required fields"))); buttons.add(new ColorButton("markedEntryBackground2", Globals.lang("Marking color %0", "3"))); buttons.add(new ColorButton("tableOptFieldBackground", Globals.lang("Background color for optional fields"))); buttons.add(new ColorButton("markedEntryBackground3", Globals.lang("Marking color %0", "4"))); buttons.add(new ColorButton("incompleteEntryBackground", Globals.lang("Color for marking incomplete entries"))); buttons.add(new ColorButton("markedEntryBackground4", Globals.lang("Marking color %0", "5"))); buttons.add(new ColorButton("gridColor", Globals.lang("Table grid color"))); buttons.add(new ColorButton("markedEntryBackground5", Globals.lang("Import marking color"))); buttons.add(new ColorButton("fieldEditorTextColor", Globals.lang("Entry editor font color"))); buttons.add(new ColorButton("validFieldBackgroundColor", Globals.lang("Entry editor background color"))); buttons.add(new ColorButton("activeFieldEditorBackgroundColor", Globals.lang("Entry editor active background color"))); buttons.add(new ColorButton("invalidFieldBackgroundColor", Globals.lang("Entry editor invalid field color"))); for (Iterator<ColorButton> i=buttons.iterator(); i.hasNext();) { ColorButton but = i.next(); builder.append(but); builder.append(but.getDefaultButton()); builder.append(but.getName()); but.addActionListener(new ColorButtonListener(but)); } setLayout(new BorderLayout()); add(builder.getPanel(), BorderLayout.CENTER); setValues(); } public void setValues() { for (Iterator<ColorButton> i=buttons.iterator(); i.hasNext();) { ColorButton but = i.next(); but.setColor(Globals.prefs.getColor(but.getKey())); } } public void storeSettings() { for (Iterator<ColorButton> i=buttons.iterator(); i.hasNext();) { ColorButton but = i.next(); Globals.prefs.putColor(but.getKey(), but.getColor()); } } class ColorButtonListener implements ActionListener { private ColorButton button; public ColorButtonListener(ColorButton button) { this.button = button; } public void actionPerformed(ActionEvent e) { Color chosen = JColorChooser.showDialog(null, button.getName(), button.getColor()); if (chosen != null) button.setColor(chosen); } } /** * A button to display the chosen color, and hold key information about a color setting. * Includes a method to produce a Default button for this setting. */ class ColorButton extends JButton implements Icon { private Color color = Color.white; private String key, name; public ColorButton(String key, String name) { setIcon(this); this.key = key; this.name = name; setBorder(BorderFactory.createRaisedBevelBorder()); } public JButton getDefaultButton() { JButton toDefault = new JButton(Globals.lang("Default")); toDefault.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setColor(Globals.prefs.getDefaultColor(key)); repaint(); } }); return toDefault; } public String getKey() { return key; } public String getName() { return name; } public Color getColor() { return color; } public void setColor(Color color) { this.color = color; } public void paintIcon(Component c, Graphics g, int x, int y) { Rectangle r = g.getClipBounds(); g.setColor(color); g.fillRect(r.x, r.y, r.width, r.height); } public int getIconWidth() { return ICON_WIDTH; } public int getIconHeight() { return ICON_HEIGHT; } } }