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}