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        putValue(SMALL_ICON, ImageProvider.get("dialogs", "delete"));
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}