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 }