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.GraphicsEnvironment; 007import java.awt.event.ActionEvent; 008 009import org.openstreetmap.josm.data.osm.Relation; 010import org.openstreetmap.josm.gui.dialogs.relation.MemberTableModel; 011import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor; 012import org.openstreetmap.josm.gui.layer.OsmDataLayer; 013import org.openstreetmap.josm.gui.tagging.TagEditorModel; 014import org.openstreetmap.josm.tools.ImageProvider; 015 016/** 017 * Creates a new relation with a copy of the current editor state. 018 * @since 9496 019 */ 020public class DuplicateRelationAction extends AbstractRelationEditorAction { 021 022 private final transient TagEditorModel tagEditorModel; 023 024 /** 025 * Constructs a new {@code DuplicateRelationAction}. 026 * @param memberTableModel member table model 027 * @param tagEditorModel tag editor model 028 * @param layer OSM data layer 029 */ 030 public DuplicateRelationAction(MemberTableModel memberTableModel, TagEditorModel tagEditorModel, OsmDataLayer layer) { 031 super(null, memberTableModel, null, layer, null); 032 this.tagEditorModel = tagEditorModel; 033 putValue(SHORT_DESCRIPTION, tr("Create a copy of this relation and open it in another editor window")); 034 // FIXME provide an icon 035 putValue(SMALL_ICON, ImageProvider.get("duplicate")); 036 putValue(NAME, tr("Duplicate")); 037 setEnabled(true); 038 } 039 040 @Override 041 public void actionPerformed(ActionEvent e) { 042 Relation copy = new Relation(); 043 tagEditorModel.applyToPrimitive(copy); 044 memberTableModel.applyToRelation(copy); 045 if (!GraphicsEnvironment.isHeadless()) { 046 RelationEditor.getEditor(layer, copy, memberTableModel.getSelectedMembers()).setVisible(true); 047 } 048 } 049 050 @Override 051 protected void updateEnabledState() { 052 // Do nothing 053 } 054}