001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.layer; 003 004import static org.openstreetmap.josm.gui.help.HelpUtil.ht; 005import static org.openstreetmap.josm.tools.I18n.tr; 006 007import java.awt.Color; 008import java.awt.Component; 009import java.awt.event.ActionEvent; 010import java.util.LinkedList; 011import java.util.List; 012 013import javax.swing.AbstractAction; 014import javax.swing.Action; 015import javax.swing.JColorChooser; 016import javax.swing.JMenuItem; 017import javax.swing.JOptionPane; 018 019import org.openstreetmap.josm.Main; 020import org.openstreetmap.josm.gui.layer.Layer.LayerAction; 021import org.openstreetmap.josm.gui.layer.Layer.MultiLayerAction; 022import org.openstreetmap.josm.tools.ImageProvider; 023 024public class CustomizeColor extends AbstractAction implements LayerAction, MultiLayerAction { 025 private transient List<Layer> layers; 026 027 public CustomizeColor(List<Layer> l) { 028 this(); 029 layers = l; 030 } 031 032 public CustomizeColor(Layer l) { 033 this(); 034 layers = new LinkedList<>(); 035 layers.add(l); 036 } 037 038 private CustomizeColor() { 039 super(tr("Customize Color"), ImageProvider.get("colorchooser")); 040 putValue("help", ht("/Action/LayerCustomizeColor")); 041 } 042 043 @Override 044 public boolean supportLayers(List<Layer> layers) { 045 for (Layer layer: layers) { 046 if (layer.getColor(false) == null) 047 return false; 048 } 049 return true; 050 } 051 052 @Override 053 public Component createMenuComponent() { 054 return new JMenuItem(this); 055 } 056 057 @Override 058 public Action getMultiLayerAction(List<Layer> layers) { 059 return new CustomizeColor(layers); 060 } 061 062 @Override 063 public void actionPerformed(ActionEvent e) { 064 Color cl = layers.get(0).getColor(false); 065 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 } 083 break; 084 case 1: 085 return; 086 case 2: 087 for (Layer layer : layers) { 088 Main.pref.putColor("layer "+layer.getName(), null); 089 } 090 break; 091 } 092 Main.map.repaint(); 093 } 094}