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}