001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.actions.relation; 003 004import static org.openstreetmap.josm.tools.I18n.tr; 005import static org.openstreetmap.josm.tools.I18n.trn; 006 007import java.awt.event.ActionEvent; 008import java.util.Collection; 009import java.util.LinkedList; 010 011import org.openstreetmap.josm.Main; 012import org.openstreetmap.josm.command.Command; 013import org.openstreetmap.josm.command.SequenceCommand; 014import org.openstreetmap.josm.data.SelectionChangedListener; 015import org.openstreetmap.josm.data.osm.OsmPrimitive; 016import org.openstreetmap.josm.data.osm.Relation; 017import org.openstreetmap.josm.gui.dialogs.relation.GenericRelationEditor; 018import org.openstreetmap.josm.gui.util.GuiHelper; 019import org.openstreetmap.josm.tools.ImageProvider; 020 021/** 022 * Add all objects selected in the current dataset after the last member of relation(s). 023 * @since 5799 024 */ 025public class AddSelectionToRelations extends AbstractRelationAction implements SelectionChangedListener { 026 /** 027 * Constructs a new <code>AddSelectionToRelation</code>. 028 */ 029 public AddSelectionToRelations() { 030 putValue(SMALL_ICON, ImageProvider.get("dialogs/conflict", "copyendright")); 031 putValue(SHORT_DESCRIPTION, tr("Add all objects selected in the current dataset after the last member")); 032 } 033 034 @Override 035 public void actionPerformed(ActionEvent e) { 036 Collection<Command> cmds = new LinkedList<>(); 037 for (Relation orig : relations) { 038 Command c = GenericRelationEditor.addPrimitivesToRelation(orig, Main.main.getCurrentDataSet().getSelected()); 039 if (c != null) { 040 cmds.add(c); 041 } 042 } 043 if (!cmds.isEmpty()) { 044 Main.main.undoRedo.add(new SequenceCommand(tr("Add selection to relation"), cmds)); 045 } 046 } 047 048 @Override 049 public void updateEnabledState() { 050 putValue(NAME, trn("Add selection to {0} relation", "Add selection to {0} relations", 051 relations.size(), relations.size())); 052 } 053 054 @Override 055 public void selectionChanged(final Collection<? extends OsmPrimitive> newSelection) { 056 GuiHelper.runInEDT(new Runnable() { 057 @Override 058 public void run() { 059 setEnabled(newSelection != null && !newSelection.isEmpty()); 060 } 061 }); 062 } 063}