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.Main;
009import org.openstreetmap.josm.gui.dialogs.relation.GenericRelationEditor.AddAbortException;
010import org.openstreetmap.josm.gui.dialogs.relation.MemberTableModel;
011import org.openstreetmap.josm.gui.dialogs.relation.IRelationEditor;
012import org.openstreetmap.josm.gui.dialogs.relation.SelectionTableModel;
013import org.openstreetmap.josm.tools.ImageProvider;
014
015/**
016 * Add all objects selected in the current dataset after the last selected member.
017 * @since 9496
018 */
019public class AddSelectedAfterSelection extends AddFromSelectionAction {
020
021    /**
022     * Constructs a new {@code AddSelectedAfterSelection}.
023     * @param memberTableModel member table model
024     * @param selectionTableModel selection table model
025     * @param editor relation editor
026     */
027    public AddSelectedAfterSelection(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 after the last selected member"));
030        putValue(SMALL_ICON, ImageProvider.get("dialogs/conflict", "copyaftercurrentright"));
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.addMembersAfterIdx(filterConfirmedPrimitives(selectionTableModel.getSelection()),
043                    memberTableModel.getSelectionModel().getMaxSelectionIndex());
044        } catch (AddAbortException ex) {
045            if (Main.isTraceEnabled()) {
046                Main.trace(ex.getMessage());
047            }
048        }
049    }
050}