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