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 }