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.MemberTableModel;
009import org.openstreetmap.josm.gui.dialogs.relation.SelectionTableModel;
010import org.openstreetmap.josm.gui.layer.OsmDataLayer;
011import org.openstreetmap.josm.tools.ImageProvider;
012
013/**
014 * Selects  members in the relation editor which refer to primitives in the current selection of the context layer.
015 * @since 9496
016 */
017public class SelectedMembersForSelectionAction extends AddFromSelectionAction {
018
019    /**
020     * Constructs a new {@code SelectedMembersForSelectionAction}.
021     * @param memberTableModel member table model
022     * @param selectionTableModel selection table model
023     * @param layer OSM data layer
024     */
025    public SelectedMembersForSelectionAction(MemberTableModel memberTableModel, SelectionTableModel selectionTableModel, OsmDataLayer layer) {
026        super(null, memberTableModel, null, selectionTableModel, null, layer, null);
027        putValue(SHORT_DESCRIPTION, tr("Select relation members which refer to objects in the current selection"));
028        putValue(SMALL_ICON, ImageProvider.get("dialogs/relation", "selectmembers"));
029        updateEnabledState();
030    }
031
032    @Override
033    protected void updateEnabledState() {
034        boolean enabled = selectionTableModel.getRowCount() > 0
035        && !memberTableModel.getChildPrimitives(layer.data.getSelected()).isEmpty();
036
037        if (enabled) {
038            putValue(SHORT_DESCRIPTION, tr("Select relation members which refer to {0} objects in the current selection",
039                    memberTableModel.getChildPrimitives(layer.data.getSelected()).size()));
040        } else {
041            putValue(SHORT_DESCRIPTION, tr("Select relation members which refer to objects in the current selection"));
042        }
043        setEnabled(enabled);
044    }
045
046    @Override
047    public void actionPerformed(ActionEvent e) {
048        memberTableModel.selectMembersReferringTo(layer.data.getSelected());
049    }
050}