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 }