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.event.ActionEvent;
008import java.awt.event.KeyEvent;
009import java.util.Collections;
010
011import org.openstreetmap.josm.Main;
012import org.openstreetmap.josm.gui.io.SaveLayersDialog;
013import org.openstreetmap.josm.gui.layer.Layer;
014import org.openstreetmap.josm.tools.Shortcut;
015
016/**
017 * Deletes the active layer.
018 */
019public final class DeleteLayerAction extends JosmAction {
020
021    /**
022     * Constructs a {@link DeleteLayerAction} which will delete the active layer.
023     */
024    public DeleteLayerAction() {
025        super(tr("Delete Layer"), "dialogs/delete", tr("Delete the active layer. Does not delete the associated file."),
026                Shortcut.registerShortcut("system:deletelayer", tr("File: {0}", tr("Delete Layer")), KeyEvent.VK_F4, Shortcut.CTRL),
027                true, "delete-layer", true);
028        putValue("help", ht("/Action/DeleteLayer"));
029    }
030
031    @Override
032    public void actionPerformed(ActionEvent e) {
033        Layer activeLayer = Main.getLayerManager().getActiveLayer();
034        if (activeLayer == null) {
035            return;
036        }
037        if (!SaveLayersDialog.saveUnsavedModifications(Collections.singletonList(activeLayer), SaveLayersDialog.Reason.DELETE)) {
038            return;
039        }
040        Main.getLayerManager().removeLayer(activeLayer);
041    }
042
043    @Override
044    protected void updateEnabledState() {
045        setEnabled(Main.getLayerManager().getActiveLayer() != null);
046    }
047}