001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.actions.relation; 003 004import static org.openstreetmap.josm.tools.I18n.tr; 005 006import java.awt.event.ActionEvent; 007import java.util.Collection; 008 009import org.openstreetmap.josm.actions.mapmode.DeleteAction; 010import org.openstreetmap.josm.data.osm.OsmUtils; 011import org.openstreetmap.josm.data.osm.Relation; 012import org.openstreetmap.josm.gui.MainApplication; 013import org.openstreetmap.josm.gui.MapFrame; 014import org.openstreetmap.josm.gui.layer.OsmDataLayer; 015import org.openstreetmap.josm.tools.ImageProvider; 016import org.openstreetmap.josm.tools.Utils; 017 018/** 019 * Action that delete relations 020 * @since 5799 021 */ 022public class DeleteRelationsAction extends AbstractRelationAction { 023 024 /** 025 * Constructs a new <code>DeleteRelationsAction</code>. 026 */ 027 public DeleteRelationsAction() { 028 putValue(SHORT_DESCRIPTION, tr("Delete the selected relation")); 029 putValue(NAME, tr("Delete")); 030 new ImageProvider("dialogs", "delete").getResource().attachImageIcon(this, true); 031 } 032 033 protected void deleteRelation(Collection<Relation> toDelete) { 034 OsmDataLayer layer = MainApplication.getLayerManager().getEditLayer(); 035 if (toDelete == null || layer == null) 036 return; 037 038 DeleteAction.deleteRelations(layer, toDelete); 039 // clear selection after deletion 040 MapFrame map = MainApplication.getMap(); 041 if (map.relationListDialog != null) 042 map.relationListDialog.selectRelations(null); 043 } 044 045 @Override 046 public void actionPerformed(ActionEvent e) { 047 if (!isEnabled()) 048 return; 049 deleteRelation(Utils.filteredCollection(relations, Relation.class)); 050 } 051 052 @Override 053 protected void updateEnabledState() { 054 setEnabled(OsmUtils.isOsmCollectionEditable(relations)); 055 } 056}