// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.dialogs.relation.actions; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.GraphicsEnvironment; import java.awt.event.ActionEvent; import org.openstreetmap.josm.data.osm.Relation; import org.openstreetmap.josm.gui.dialogs.relation.MemberTableModel; import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor; import org.openstreetmap.josm.gui.layer.OsmDataLayer; import org.openstreetmap.josm.gui.tagging.TagEditorModel; import org.openstreetmap.josm.tools.ImageProvider; /** * Creates a new relation with a copy of the current editor state. * @since 9496 */ public class DuplicateRelationAction extends AbstractRelationEditorAction { private final transient TagEditorModel tagEditorModel; /** * Constructs a new {@code DuplicateRelationAction}. * @param memberTableModel member table model * @param tagEditorModel tag editor model * @param layer OSM data layer */ public DuplicateRelationAction(MemberTableModel memberTableModel, TagEditorModel tagEditorModel, OsmDataLayer layer) { super(null, memberTableModel, null, layer, null); this.tagEditorModel = tagEditorModel; putValue(SHORT_DESCRIPTION, tr("Create a copy of this relation and open it in another editor window")); // FIXME provide an icon putValue(SMALL_ICON, ImageProvider.get("duplicate")); putValue(NAME, tr("Duplicate")); setEnabled(true); } @Override public void actionPerformed(ActionEvent e) { Relation copy = new Relation(); tagEditorModel.applyToPrimitive(copy); memberTableModel.applyToRelation(copy); if (!GraphicsEnvironment.isHeadless()) { RelationEditor.getEditor(layer, copy, memberTableModel.getSelectedMembers()).setVisible(true); } } @Override protected void updateEnabledState() { // Do nothing } }