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.DataSet; 012import org.openstreetmap.josm.data.osm.Node; 013import org.openstreetmap.josm.data.osm.OsmPrimitive; 014import org.openstreetmap.josm.tools.Shortcut; 015import org.openstreetmap.josm.tools.Utils; 016 017public class CopyCoordinatesAction extends JosmAction { 018 019 public CopyCoordinatesAction() { 020 super(tr("Copy Coordinates"), null, 021 tr("Copy coordinates of selected nodes to clipboard."), 022 Shortcut.registerShortcut("copy:coordinates", tr("Edit: {0}", tr("Copy Coordinates")), 023 KeyEvent.VK_C, Shortcut.CTRL_SHIFT), 024 false); 025 putValue("toolbar", "copy/coordinates"); 026 } 027 028 @Override 029 public void actionPerformed(ActionEvent ae) { 030 StringBuilder s = new StringBuilder(); 031 for (Node n : getSelectedNodes()) { 032 s.append(n.getCoor().lat()); 033 s.append(", "); 034 s.append(n.getCoor().lon()); 035 s.append('\n'); 036 } 037 Utils.copyToClipboard(s.toString().trim()); 038 } 039 040 @Override 041 protected void updateEnabledState() { 042 setEnabled(!getSelectedNodes().isEmpty()); 043 } 044 045 @Override 046 protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) { 047 updateEnabledState(); 048 } 049 050 private Collection<Node> getSelectedNodes() { 051 DataSet ds = getLayerManager().getEditDataSet(); 052 if (ds == null || ds.getSelected() == null) { 053 return Collections.emptyList(); 054 } else { 055 return Utils.filteredCollection(ds.getSelected(), Node.class); 056 } 057 } 058}