001 // License: GPL. Copyright 2007 by Immanuel Scholz and others 002 package org.openstreetmap.josm.actions; 003 004 import static org.openstreetmap.josm.gui.help.HelpUtil.ht; 005 import static org.openstreetmap.josm.tools.I18n.tr; 006 007 import java.awt.event.ActionEvent; 008 import java.util.Collection; 009 010 import org.openstreetmap.josm.Main; 011 import org.openstreetmap.josm.command.MoveCommand; 012 import org.openstreetmap.josm.data.coor.LatLon; 013 import org.openstreetmap.josm.data.osm.Node; 014 import org.openstreetmap.josm.data.osm.OsmPrimitive; 015 import org.openstreetmap.josm.gui.dialogs.LatLonDialog; 016 017 /** 018 * This action displays a dialog with the coordinates of a node where the user can change them, 019 * and when ok is pressed, the node is relocated to the specified position. 020 */ 021 public final class MoveNodeAction extends JosmAction { 022 023 public MoveNodeAction() { 024 super(tr("Move Node..."), "movenode", tr("Edit latitude and longitude of a node."), 025 null, /* no shortcut */ 026 true); 027 putValue("help", ht("/Action/MoveNode")); 028 } 029 030 public void actionPerformed(ActionEvent e) { 031 if (!isEnabled() || (getCurrentDataSet().getSelectedNodes().size() != 1)) 032 return; 033 034 LatLonDialog dialog = new LatLonDialog(Main.parent, tr("Move Node..."), ht("/Action/MoveNode")); 035 Node n = (Node) getCurrentDataSet().getSelectedNodes().toArray()[0]; 036 dialog.setCoordinates(n.getCoor()); 037 dialog.showDialog(); 038 if (dialog.getValue() != 1) 039 return; 040 041 LatLon coordinates = dialog.getCoordinates(); 042 if (coordinates == null) 043 return; 044 045 // move the node 046 Main.main.undoRedo.add(new MoveCommand(n, coordinates)); 047 Main.map.mapView.repaint(); 048 } 049 050 @Override 051 protected void updateEnabledState() { 052 if (getCurrentDataSet() == null) { 053 setEnabled(false); 054 } else { 055 updateEnabledState(getCurrentDataSet().getSelected()); 056 } 057 } 058 059 @Override 060 protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) { 061 if (selection == null || selection.isEmpty()) { 062 setEnabled(false); 063 return; 064 } 065 if ((selection.size()) == 1 && (selection.toArray()[0] instanceof Node) ) { 066 setEnabled(true); 067 } else { 068 setEnabled(false); 069 } 070 } 071 }