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}