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(new PrimitiveDeepCopy(getCurrentDataSet().getSelected()), getEditLayer(), e); 032 } 033 034 @Override 035 protected void updateEnabledState() { 036 if (getCurrentDataSet() == null) { 037 setEnabled(false); 038 } else { 039 updateEnabledState(getCurrentDataSet().getSelected()); 040 } 041 } 042 043 @Override 044 protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) { 045 setEnabled(selection != null && !selection.isEmpty()); 046 } 047}