// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.dialogs.layer;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.JMenuItem;
import org.openstreetmap.josm.gui.dialogs.IEnabledStateUpdating;
import org.openstreetmap.josm.gui.dialogs.LayerListDialog.LayerListModel;
import org.openstreetmap.josm.gui.help.HelpUtil;
import org.openstreetmap.josm.gui.io.SaveLayersDialog;
import org.openstreetmap.josm.gui.layer.Layer;
import org.openstreetmap.josm.gui.layer.Layer.LayerAction;
import org.openstreetmap.josm.tools.ImageProvider;
/**
* The action to delete the currently selected layer
*/
public final class DeleteLayerAction extends AbstractAction implements IEnabledStateUpdating, LayerAction {
private final LayerListModel model;
/**
* Creates a {@link DeleteLayerAction} which will delete the currently selected layers in the layer dialog.
* @param model layer list model
*/
public DeleteLayerAction(LayerListModel model) {
this.model = model;
new ImageProvider("dialogs", "delete").getResource().attachImageIcon(this, true);
putValue(SHORT_DESCRIPTION, tr("Delete the selected layers."));
putValue(NAME, tr("Delete"));
putValue("help", HelpUtil.ht("/Dialog/LayerList#DeleteLayer"));
updateEnabledState();
}
@Override
public void actionPerformed(ActionEvent e) {
List<Layer> selectedLayers = model.getSelectedLayers();
if (selectedLayers.isEmpty())
return;
if (!SaveLayersDialog.saveUnsavedModifications(selectedLayers, SaveLayersDialog.Reason.DELETE))
return;
for (Layer l: selectedLayers) {
if (model.getLayerManager().containsLayer(l)) {
// it may happen that this call removes other layers.
// this is why we need to check if every layer is still in the list of selected layers.
model.getLayerManager().removeLayer(l);
}
}
}
@Override
public void updateEnabledState() {
setEnabled(!model.getSelectedLayers().isEmpty());
}
@Override
public Component createMenuComponent() {
return new JMenuItem(this);
}
@Override
public boolean supportLayers(List<Layer> layers) {
return true;
}
@Override
public boolean equals(Object obj) {
return obj instanceof DeleteLayerAction;
}
@Override
public int hashCode() {
return getClass().hashCode();
}
}