001// License: GPL. For details, see LICENSE file. 002// Author: David Earl 003package org.openstreetmap.josm.actions; 004 005import static org.openstreetmap.josm.gui.help.HelpUtil.ht; 006import static org.openstreetmap.josm.tools.I18n.tr; 007 008import java.awt.event.ActionEvent; 009import java.awt.event.KeyEvent; 010import java.util.Collection; 011 012import org.openstreetmap.josm.Main; 013import org.openstreetmap.josm.data.osm.OsmPrimitive; 014import org.openstreetmap.josm.data.osm.PrimitiveDeepCopy; 015import org.openstreetmap.josm.tools.Shortcut; 016 017public final class DuplicateAction extends JosmAction { 018 019 /** 020 * Constructs a new {@code DuplicateAction}. 021 */ 022 public DuplicateAction() { 023 super(tr("Duplicate"), "duplicate", 024 tr("Duplicate selection by copy and immediate paste."), 025 Shortcut.registerShortcut("system:duplicate", tr("Edit: {0}", tr("Duplicate")), KeyEvent.VK_D, Shortcut.CTRL), true); 026 putValue("help", ht("/Action/Duplicate")); 027 } 028 029 @Override 030 public void actionPerformed(ActionEvent e) { 031 Main.main.menu.paste.pasteData( 032 new PrimitiveDeepCopy(getLayerManager().getEditDataSet().getSelected()), getLayerManager().getEditLayer(), e); 033 } 034 035 @Override 036 protected void updateEnabledState() { 037 updateEnabledStateOnCurrentSelection(); 038 } 039 040 @Override 041 protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) { 042 setEnabled(selection != null && !selection.isEmpty()); 043 } 044}