001 package org.openstreetmap.josm.actions; 002 003 import static org.openstreetmap.josm.tools.I18n.tr; 004 005 import java.awt.event.ActionEvent; 006 import java.awt.event.KeyEvent; 007 import java.util.Collection; 008 import java.util.Collections; 009 import org.openstreetmap.josm.data.osm.Node; 010 import org.openstreetmap.josm.data.osm.OsmPrimitive; 011 import org.openstreetmap.josm.tools.Shortcut; 012 import org.openstreetmap.josm.tools.Utils; 013 014 public class CopyCoordinatesAction extends JosmAction { 015 016 public CopyCoordinatesAction() { 017 super(tr("Copy Coordinates"), null, 018 tr("Copy coordinates of selected nodes to clipboard."), 019 Shortcut.registerShortcut("copy:coordinates", tr("Edit: {0}", tr("Copy Coordinates")), 020 KeyEvent.VK_C, Shortcut.CTRL_SHIFT), 021 false); 022 putValue("toolbar", "copy/coordinates"); 023 } 024 025 @Override 026 public void actionPerformed(ActionEvent ae) { 027 StringBuilder s = new StringBuilder(); 028 for (Node n : getSelectedNodes()) { 029 s.append(n.getCoor().lat()); 030 s.append(", "); 031 s.append(n.getCoor().lon()); 032 s.append("\n"); 033 } 034 Utils.copyToClipboard(s.toString().trim()); 035 } 036 037 @Override 038 protected void updateEnabledState() { 039 setEnabled(!getSelectedNodes().isEmpty()); 040 } 041 042 @Override 043 protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) { 044 updateEnabledState(); 045 } 046 047 private Collection<Node> getSelectedNodes() { 048 if (getCurrentDataSet() == null || getCurrentDataSet().getSelected() == null) { 049 return Collections.emptyList(); 050 } else { 051 return Utils.filteredCollection(getCurrentDataSet().getSelected(), Node.class); 052 } 053 } 054 }