001    // License: GPL. See LICENSE file for details.
002    package org.openstreetmap.josm.gui.layer;
003    
004    import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
005    import static org.openstreetmap.josm.tools.I18n.tr;
006    
007    import java.awt.Color;
008    import java.awt.Component;
009    import java.awt.event.ActionEvent;
010    
011    import javax.swing.AbstractAction;
012    import javax.swing.Action;
013    import javax.swing.JColorChooser;
014    import javax.swing.JMenuItem;
015    import javax.swing.JOptionPane;
016    import java.util.LinkedList;
017    import java.util.List;
018    
019    import org.openstreetmap.josm.Main;
020    import org.openstreetmap.josm.gui.layer.Layer;
021    import org.openstreetmap.josm.gui.layer.Layer.LayerAction;
022    import org.openstreetmap.josm.gui.layer.Layer.MultiLayerAction;
023    import org.openstreetmap.josm.tools.ImageProvider;
024    
025    public class CustomizeColor extends AbstractAction implements LayerAction, MultiLayerAction {
026        List<Layer> layers;
027    
028        public CustomizeColor(List<Layer> l) {
029            this();
030            layers = l;
031        }
032    
033        public CustomizeColor(Layer l) {
034            this();
035            layers = new LinkedList<Layer>();
036            layers.add(l); 
037        }
038    
039        private CustomizeColor() {
040            super(tr("Customize Color"), ImageProvider.get("colorchooser"));
041            putValue("help", ht("/Action/LayerCustomizeColor"));
042        }
043    
044        @Override
045        public boolean supportLayers(List<Layer> layers) {
046            for(Layer layer: layers) {
047                if(layer.getColor(false) == null)
048                    return false;
049            }
050            return true;
051        }
052    
053        @Override
054        public Component createMenuComponent() {
055            return new JMenuItem(this);
056        }
057    
058        @Override
059        public Action getMultiLayerAction(List<Layer> layers) {
060            return new CustomizeColor(layers);
061        }
062    
063        @Override
064        public void actionPerformed(ActionEvent e) {
065            Color cl=layers.get(0).getColor(false); if (cl==null) cl=Color.gray;
066            JColorChooser c = new JColorChooser(cl);
067            Object[] options = new Object[]{tr("OK"), tr("Cancel"), tr("Default")};
068            int answer = JOptionPane.showOptionDialog(
069                    Main.parent,
070                    c,
071                    tr("Choose a color"),
072                    JOptionPane.OK_CANCEL_OPTION,
073                    JOptionPane.PLAIN_MESSAGE,
074                    null,
075                    options,
076                    options[0]
077            );
078            switch (answer) {
079            case 0:
080                for(Layer layer : layers)
081                    Main.pref.putColor("layer "+layer.getName(), c.getColor());
082                break;
083            case 1:
084                return;
085            case 2:
086                for(Layer layer : layers)
087                    Main.pref.putColor("layer "+layer.getName(), null);
088                break;
089            }
090            Main.map.repaint();
091        }
092    }