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