68077f66ecd195e1b032ed0a9f7b279643424577
1 package be
.nikiroo
.utils
.ui
;
3 import java
.awt
.BorderLayout
;
5 import java
.awt
.Graphics2D
;
6 import java
.awt
.event
.ActionEvent
;
7 import java
.awt
.event
.ActionListener
;
8 import java
.awt
.event
.KeyAdapter
;
9 import java
.awt
.event
.KeyEvent
;
10 import java
.awt
.image
.BufferedImage
;
11 import java
.util
.HashMap
;
14 import javax
.swing
.Icon
;
15 import javax
.swing
.ImageIcon
;
16 import javax
.swing
.JButton
;
17 import javax
.swing
.JColorChooser
;
18 import javax
.swing
.JComponent
;
19 import javax
.swing
.JPanel
;
20 import javax
.swing
.JTextField
;
22 import be
.nikiroo
.utils
.resources
.MetaInfo
;
24 class ConfigItemColor
<E
extends Enum
<E
>> extends ConfigItem
<E
> {
25 private static final long serialVersionUID
= 1L;
27 private Map
<JComponent
, JTextField
> fields
= new HashMap
<JComponent
, JTextField
>();
28 private Map
<JComponent
, JButton
> panels
= new HashMap
<JComponent
, JButton
>();
31 * Create a new {@link ConfigItemColor} for the given {@link MetaInfo}.
34 * the {@link MetaInfo}
36 public ConfigItemColor(MetaInfo
<E
> info
) {
41 protected Object
getFromField(int item
) {
42 JTextField field
= fields
.get(getField(item
));
44 return field
.getText();
51 protected Object
getFromInfo(int item
) {
52 return info
.getString(item
, false);
56 protected void setToField(Object value
, int item
) {
57 JTextField field
= fields
.get(getField(item
));
59 field
.setText(value
== null ?
"" : value
.toString());
62 JButton colorWheel
= panels
.get(getField(item
));
63 if (colorWheel
!= null) {
64 colorWheel
.setIcon(getIcon(17, getFromInfoColor(item
)));
69 protected void setToInfo(Object value
, int item
) {
70 info
.setString((String
) value
, item
);
74 * Get the colour currently present in the linked info for the given item.
77 * the item number to get for an array of values, or -1 to get
78 * the whole value (has no effect if {@link MetaInfo#isArray()}
83 private int getFromInfoColor(int item
) {
84 Integer color
= info
.getColor(item
, true);
86 return new Color(255, 255, 255, 255).getRGB();
93 protected JComponent
createField(final int item
) {
94 final JPanel pane
= new JPanel(new BorderLayout());
95 final JTextField field
= new JTextField();
97 final JButton colorWheel
= new JButton();
98 colorWheel
.setIcon(getIcon(17, getFromInfoColor(item
)));
99 colorWheel
.addActionListener(new ActionListener() {
101 public void actionPerformed(ActionEvent e
) {
102 int icol
= getFromInfoColor(item
);
103 Color initialColor
= new Color(icol
, true);
104 Color newColor
= JColorChooser
.showDialog(ConfigItemColor
.this,
105 info
.getName(), initialColor
);
106 if (newColor
!= null) {
107 info
.setColor(newColor
.getRGB(), item
);
108 field
.setText(info
.getString(item
, false));
109 colorWheel
.setIcon(getIcon(17, info
.getColor(item
, true)));
114 field
.addKeyListener(new KeyAdapter() {
116 public void keyTyped(KeyEvent e
) {
117 info
.setString(field
.getText() + e
.getKeyChar(), item
);
118 int color
= getFromInfoColor(item
);
119 colorWheel
.setIcon(getIcon(17, color
));
123 pane
.add(colorWheel
, BorderLayout
.WEST
);
124 pane
.add(field
, BorderLayout
.CENTER
);
126 fields
.put(pane
, field
);
127 panels
.put(pane
, colorWheel
);
132 * Return an {@link Icon} to use as a colour badge for the colour field
136 * the size of the badge
138 * the colour of the badge, which can be NULL (will return
143 static private Icon
getIcon(int size
, Integer color
) {
146 color
= new Color(255, 255, 255, 255).getRGB();
149 Color c
= new Color(color
, true);
150 int avg
= (c
.getRed() + c
.getGreen() + c
.getBlue()) / 3;
151 Color border
= (avg
>= 128 ? Color
.BLACK
: Color
.WHITE
);
153 BufferedImage img
= new BufferedImage(size
, size
,
154 BufferedImage
.TYPE_4BYTE_ABGR
);
156 Graphics2D g
= img
.createGraphics();
159 g
.fillRect(0, 0, img
.getWidth(), img
.getHeight());
161 g
.drawRect(0, 0, img
.getWidth() - 1, img
.getHeight() - 1);
166 return new ImageIcon(img
);