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;
007
008import org.openstreetmap.josm.data.osm.DataSet;
009import org.openstreetmap.josm.gui.dialogs.relation.MemberTableModel;
010import org.openstreetmap.josm.gui.dialogs.relation.SelectionTableModel;
011import org.openstreetmap.josm.gui.layer.OsmDataLayer;
012import org.openstreetmap.josm.tools.ImageProvider;
013
014/**
015 * Remove all members referring to one of the selected objects.
016 * @since 9496
017 */
018public class RemoveSelectedAction extends AddFromSelectionAction {
019
020    /**
021     * Constructs a new {@code RemoveSelectedAction}.
022     * @param memberTableModel member table model
023     * @param selectionTableModel selection table model
024     * @param layer OSM data layer
025     */
026    public RemoveSelectedAction(MemberTableModel memberTableModel, SelectionTableModel selectionTableModel, OsmDataLayer layer) {
027        super(null, memberTableModel, null, selectionTableModel, null, layer, null);
028        putValue(SHORT_DESCRIPTION, tr("Remove all members referring to one of the selected objects"));
029        putValue(SMALL_ICON, ImageProvider.get("dialogs/relation", "deletemembers"));
030        updateEnabledState();
031    }
032
033    @Override
034    protected void updateEnabledState() {
035        DataSet ds = layer.data;
036        if (ds == null || ds.selectionEmpty()) {
037            setEnabled(false);
038            return;
039        }
040        // only enable the action if we have members referring to the selected primitives
041        setEnabled(memberTableModel.hasMembersReferringTo(ds.getSelected()));
042    }
043
044    @Override
045    public void actionPerformed(ActionEvent e) {
046        memberTableModel.removeMembersReferringTo(selectionTableModel.getSelection());
047    }
048}