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}