001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.dialogs.layer;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import java.awt.Component;
007import java.awt.event.ActionEvent;
008import java.util.List;
009
010import javax.swing.AbstractAction;
011import javax.swing.JMenuItem;
012
013import org.openstreetmap.josm.Main;
014import org.openstreetmap.josm.gui.dialogs.LayerListDialog.LayerListModel;
015import org.openstreetmap.josm.gui.help.HelpUtil;
016import org.openstreetmap.josm.gui.layer.Layer;
017import org.openstreetmap.josm.gui.layer.Layer.LayerAction;
018import org.openstreetmap.josm.tools.ImageProvider;
019
020/**
021 * The action to delete the currently selected layer
022 */
023public final class DeleteLayerAction extends AbstractAction implements IEnabledStateUpdating, LayerAction {
024
025    private final LayerListModel model;
026
027    /**
028     * Creates a {@link DeleteLayerAction} which will delete the currently selected layers in the layer dialog.
029     * @param model layer list model
030     */
031    public DeleteLayerAction(LayerListModel model) {
032        this.model = model;
033        new ImageProvider("dialogs", "delete").getResource().attachImageIcon(this, true);
034        putValue(SHORT_DESCRIPTION, tr("Delete the selected layers."));
035        putValue(NAME, tr("Delete"));
036        putValue("help", HelpUtil.ht("/Dialog/LayerList#DeleteLayer"));
037        updateEnabledState();
038    }
039
040    @Override
041    public void actionPerformed(ActionEvent e) {
042        List<Layer> selectedLayers = model.getSelectedLayers();
043        if (selectedLayers.isEmpty())
044            return;
045        if (!Main.saveUnsavedModifications(selectedLayers, false))
046            return;
047        for (Layer l: selectedLayers) {
048            Main.getLayerManager().removeLayer(l);
049        }
050    }
051
052    @Override
053    public void updateEnabledState() {
054        setEnabled(!model.getSelectedLayers().isEmpty());
055    }
056
057    @Override
058    public Component createMenuComponent() {
059        return new JMenuItem(this);
060    }
061
062    @Override
063    public boolean supportLayers(List<Layer> layers) {
064        return true;
065    }
066
067    @Override
068    public boolean equals(Object obj) {
069        return obj instanceof DeleteLayerAction;
070    }
071
072    @Override
073    public int hashCode() {
074        return getClass().hashCode();
075    }
076}