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.awt.event.KeyEvent; 008 009import org.openstreetmap.josm.tools.ImageProvider; 010import org.openstreetmap.josm.tools.Shortcut; 011 012/** 013 * Remove the currently selected members from this relation. 014 * @since 9496 015 */ 016public class RemoveAction extends AbstractRelationEditorAction { 017 private static final long serialVersionUID = 1L; 018 019 /** 020 * Constructs a new {@code RemoveAction}. 021 * @param editorAccess An interface to access the relation editor contents. 022 * @param actionMapKey action map key 023 */ 024 public RemoveAction(IRelationEditorActionAccess editorAccess, String actionMapKey) { 025 super(editorAccess, actionMapKey, IRelationEditorUpdateOn.MEMBER_TABLE_SELECTION); 026 new ImageProvider("dialogs", "delete").getResource().attachImageIcon(this, true); 027 putValue(NAME, tr("Remove")); 028 Shortcut sc = Shortcut.registerShortcut("relationeditor:remove", tr("Relation Editor: Remove"), KeyEvent.VK_DELETE, Shortcut.ALT); 029 sc.setAccelerator(this); 030 sc.setTooltip(this, tr("Remove the currently selected members from this relation")); 031 setEnabled(false); 032 } 033 034 @Override 035 public void actionPerformed(ActionEvent e) { 036 int[] selectedRows = editorAccess.getMemberTable().getSelectedRows(); 037 editorAccess.getMemberTableModel().remove(selectedRows); 038 if (selectedRows.length > 0 && editorAccess.getMemberTableModel().getRowCount() > selectedRows[0]) { 039 // make first row of former selection visible, see #17952 040 editorAccess.getMemberTable().makeMemberVisible(selectedRows[0]); 041 } 042 editorAccess.stopMemberCellEditing(); 043 } 044 045 @Override 046 protected void updateEnabledState() { 047 setEnabled(editorAccess.getMemberTableModel().canRemove(editorAccess.getMemberTable().getSelectedRows())); 048 } 049}