// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.actions;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.util.Collection;
import java.util.Collections;
import org.openstreetmap.josm.data.osm.DataSet;
import org.openstreetmap.josm.data.osm.Node;
import org.openstreetmap.josm.data.osm.OsmPrimitive;
import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils;
import org.openstreetmap.josm.tools.Shortcut;
import org.openstreetmap.josm.tools.Utils;
public class CopyCoordinatesAction extends JosmAction {
public CopyCoordinatesAction() {
super(tr("Copy Coordinates"), null,
tr("Copy coordinates of selected nodes to clipboard."),
Shortcut.registerShortcut("copy:coordinates", tr("Edit: {0}", tr("Copy Coordinates")),
KeyEvent.VK_C, Shortcut.CTRL_SHIFT),
false);
putValue("toolbar", "copy/coordinates");
}
@Override
public void actionPerformed(ActionEvent ae) {
StringBuilder s = new StringBuilder();
for (Node n : getSelectedNodes()) {
s.append(n.getCoor().lat());
s.append(", ");
s.append(n.getCoor().lon());
s.append('\n');
}
ClipboardUtils.copyString(s.toString().trim());
}
@Override
protected void updateEnabledState() {
setEnabled(!getSelectedNodes().isEmpty());
}
@Override
protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
updateEnabledState();
}
private Collection<Node> getSelectedNodes() {
DataSet ds = getLayerManager().getEditDataSet();
if (ds == null) {
return Collections.emptyList();
} else {
return Utils.filteredCollection(ds.getSelected(), Node.class);
}
}
}