001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.dialogs.relation.actions; 003 004import static org.openstreetmap.josm.tools.I18n.tr; 005 006import java.awt.event.ActionEvent; 007import java.beans.PropertyChangeEvent; 008import java.beans.PropertyChangeListener; 009 010import org.openstreetmap.josm.actions.mapmode.DeleteAction; 011import org.openstreetmap.josm.data.osm.Relation; 012import org.openstreetmap.josm.gui.dialogs.relation.GenericRelationEditor; 013import org.openstreetmap.josm.gui.dialogs.relation.IRelationEditor; 014import org.openstreetmap.josm.gui.layer.OsmDataLayer; 015import org.openstreetmap.josm.tools.ImageProvider; 016 017/** 018 * Delete the currently edited relation. 019 * @since 9496 020 */ 021public class DeleteCurrentRelationAction extends AbstractRelationEditorAction implements PropertyChangeListener { 022 023 /** 024 * Constructs a new {@code DeleteCurrentRelationAction}. 025 * @param layer OSM data layer 026 * @param editor relation editor 027 */ 028 public DeleteCurrentRelationAction(OsmDataLayer layer, IRelationEditor editor) { 029 super(null, null, null, layer, editor); 030 putValue(SHORT_DESCRIPTION, tr("Delete the currently edited relation")); 031 new ImageProvider("dialogs", "delete").getResource().attachImageIcon(this, true); 032 putValue(NAME, tr("Delete")); 033 updateEnabledState(); 034 } 035 036 @Override 037 public void actionPerformed(ActionEvent e) { 038 Relation toDelete = editor.getRelation(); 039 if (toDelete == null) 040 return; 041 DeleteAction.deleteRelation(layer, toDelete); 042 } 043 044 @Override 045 protected void updateEnabledState() { 046 setEnabled(editor.getRelationSnapshot() != null); 047 } 048 049 @Override 050 public void propertyChange(PropertyChangeEvent evt) { 051 if (GenericRelationEditor.RELATION_SNAPSHOT_PROP.equals(evt.getPropertyName())) { 052 updateEnabledState(); 053 } 054 } 055}