Merge branch 'subtree'
[nikiroo-utils.git] / src / be / nikiroo / utils / ui / ConfigItemColor.java
index cbb80843fb82850008fb138e678b32d172284d0f..951ff45a22b48ab4108ea4f00ea29bf3a920c2c9 100644 (file)
@@ -5,6 +5,8 @@ import java.awt.Color;
 import java.awt.Graphics2D;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
 import java.awt.image.BufferedImage;
 import java.util.HashMap;
 import java.util.Map;
@@ -19,10 +21,11 @@ import javax.swing.JTextField;
 
 import be.nikiroo.utils.resources.MetaInfo;
 
-public class ConfigItemColor<E extends Enum<E>> extends ConfigItem<E> {
+class ConfigItemColor<E extends Enum<E>> extends ConfigItem<E> {
        private static final long serialVersionUID = 1L;
 
        private Map<JComponent, JTextField> fields = new HashMap<JComponent, JTextField>();
+       private Map<JComponent, JButton> panels = new HashMap<JComponent, JButton>();
 
        /**
         * Create a new {@link ConfigItemColor} for the given {@link MetaInfo}.
@@ -46,7 +49,7 @@ public class ConfigItemColor<E extends Enum<E>> extends ConfigItem<E> {
 
        @Override
        protected Object getFromInfo(int item) {
-               return info.getString(item, false);
+               return getInfo().getString(item, true);
        }
 
        @Override
@@ -55,16 +58,30 @@ public class ConfigItemColor<E extends Enum<E>> extends ConfigItem<E> {
                if (field != null) {
                        field.setText(value == null ? "" : value.toString());
                }
-               // TODO: change color too
+
+               JButton colorWheel = panels.get(getField(item));
+               if (colorWheel != null) {
+                       colorWheel.setIcon(getIcon(17, getFromInfoColor(item)));
+               }
        }
 
        @Override
        protected void setToInfo(Object value, int item) {
-               info.setString((String) value, item);
+               getInfo().setString((String) value, item);
        }
 
+       /**
+        * Get the colour currently present in the linked info for the given item.
+        * 
+        * @param item
+        *            the item number to get for an array of values, or -1 to get
+        *            the whole value (has no effect if {@link MetaInfo#isArray()}
+        *            is FALSE)
+        * 
+        * @return a colour
+        */
        private int getFromInfoColor(int item) {
-               Integer color = info.getColor(item, true);
+               Integer color = getInfo().getColor(item, true);
                if (color == null) {
                        return new Color(255, 255, 255, 255).getRGB();
                }
@@ -73,7 +90,7 @@ public class ConfigItemColor<E extends Enum<E>> extends ConfigItem<E> {
        }
 
        @Override
-       protected JComponent createField(final int item) {
+       protected JComponent createEmptyField(final int item) {
                final JPanel pane = new JPanel(new BorderLayout());
                final JTextField field = new JTextField();
 
@@ -85,19 +102,30 @@ public class ConfigItemColor<E extends Enum<E>> extends ConfigItem<E> {
                                int icol = getFromInfoColor(item);
                                Color initialColor = new Color(icol, true);
                                Color newColor = JColorChooser.showDialog(ConfigItemColor.this,
-                                               info.getName(), initialColor);
+                                               getInfo().getName(), initialColor);
                                if (newColor != null) {
-                                       info.setColor(newColor.getRGB(), item);
-                                       field.setText(info.getString(item, false));
-                                       colorWheel.setIcon(getIcon(17, info.getColor(item, true)));
+                                       getInfo().setColor(newColor.getRGB(), item);
+                                       field.setText(getInfo().getString(item, false));
+                                       colorWheel.setIcon(getIcon(17,
+                                                       getInfo().getColor(item, true)));
                                }
                        }
                });
 
+               field.addKeyListener(new KeyAdapter() {
+                       @Override
+                       public void keyTyped(KeyEvent e) {
+                               getInfo().setString(field.getText() + e.getKeyChar(), item);
+                               int color = getFromInfoColor(item);
+                               colorWheel.setIcon(getIcon(17, color));
+                       }
+               });
+
                pane.add(colorWheel, BorderLayout.WEST);
                pane.add(field, BorderLayout.CENTER);
 
                fields.put(pane, field);
+               panels.put(pane, colorWheel);
                return pane;
        }