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.gui.dialogs.relation.GenericRelationEditor.AddAbortException; 009import org.openstreetmap.josm.gui.dialogs.relation.IRelationEditor; 010import org.openstreetmap.josm.gui.dialogs.relation.MemberTableModel; 011import org.openstreetmap.josm.gui.dialogs.relation.SelectionTableModel; 012import org.openstreetmap.josm.tools.ImageProvider; 013import org.openstreetmap.josm.tools.Logging; 014 015/** 016 * Add all objects selected in the current dataset before the first selected member. 017 * @since 9496 018 */ 019public class AddSelectedBeforeSelection extends AddFromSelectionAction { 020 021 /** 022 * Constructs a new {@code AddSelectedBeforeSelection}. 023 * @param memberTableModel member table model 024 * @param selectionTableModel selection table model 025 * @param editor relation editor 026 */ 027 public AddSelectedBeforeSelection(MemberTableModel memberTableModel, SelectionTableModel selectionTableModel, IRelationEditor editor) { 028 super(null, memberTableModel, null, selectionTableModel, null, null, editor); 029 putValue(SHORT_DESCRIPTION, tr("Add all objects selected in the current dataset before the first selected member")); 030 new ImageProvider("dialogs/conflict", "copybeforecurrentright").getResource().attachImageIcon(this, true); 031 updateEnabledState(); 032 } 033 034 @Override 035 protected void updateEnabledState() { 036 setEnabled(selectionTableModel.getRowCount() > 0 && memberTableModel.getSelectionModel().getMinSelectionIndex() >= 0); 037 } 038 039 @Override 040 public void actionPerformed(ActionEvent e) { 041 try { 042 memberTableModel.addMembersBeforeIdx(filterConfirmedPrimitives(selectionTableModel.getSelection()), 043 memberTableModel.getSelectionModel().getMinSelectionIndex()); 044 } catch (AddAbortException ex) { 045 Logging.trace(ex); 046 } 047 } 048}