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}