001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.actions; 003 004import static org.openstreetmap.josm.gui.help.HelpUtil.ht; 005import static org.openstreetmap.josm.tools.I18n.tr; 006 007import java.awt.Component; 008import java.awt.event.ActionEvent; 009import java.util.List; 010 011import javax.swing.AbstractAction; 012import javax.swing.JCheckBoxMenuItem; 013 014import org.openstreetmap.josm.gui.dialogs.LayerListDialog; 015import org.openstreetmap.josm.gui.layer.Layer; 016import org.openstreetmap.josm.gui.layer.Layer.LayerAction; 017import org.openstreetmap.josm.gui.layer.OsmDataLayer; 018import org.openstreetmap.josm.tools.ImageProvider; 019 020/** 021 * An action enabling/disabling the {@linkplain OsmDataLayer#setUploadDiscouraged(boolean) discouraged upload flag} 022 * of the layer specified in the constructor. 023 */ 024public class ToggleUploadDiscouragedLayerAction extends AbstractAction implements LayerAction { 025 026 private final transient OsmDataLayer layer; 027 028 /** 029 * Constructs a new {@code ToggleUploadDiscouragedLayerAction}. 030 * @param layer the layer for which to toggle the {@linkplain OsmDataLayer#setUploadDiscouraged(boolean) discouraged upload flag} 031 */ 032 public ToggleUploadDiscouragedLayerAction(OsmDataLayer layer) { 033 super(tr("Discourage upload")); 034 new ImageProvider("no_upload").getResource().attachImageIcon(this, true); 035 this.layer = layer; 036 setEnabled(layer.isUploadable()); 037 putValue("help", ht("/Action/EncourageDiscourageUpload")); 038 } 039 040 @Override 041 public void actionPerformed(ActionEvent e) { 042 layer.setUploadDiscouraged(!layer.isUploadDiscouraged()); 043 LayerListDialog.getInstance().repaint(); 044 } 045 046 @Override 047 public Component createMenuComponent() { 048 JCheckBoxMenuItem item = new JCheckBoxMenuItem(this); 049 item.setSelected(layer.isUploadDiscouraged() || !layer.isUploadable()); 050 return item; 051 } 052 053 @Override 054 public boolean supportLayers(List<Layer> layers) { 055 return layers.size() == 1 && layers.get(0) instanceof OsmDataLayer; 056 } 057}