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.awt.event.KeyEvent; 009 010 import org.openstreetmap.josm.Main; 011 import org.openstreetmap.josm.command.AddCommand; 012 import org.openstreetmap.josm.data.coor.EastNorth; 013 import org.openstreetmap.josm.data.coor.LatLon; 014 import org.openstreetmap.josm.data.osm.Node; 015 import org.openstreetmap.josm.gui.dialogs.LatLonDialog; 016 import org.openstreetmap.josm.tools.Shortcut; 017 018 /** 019 * This action displays a dialog where the user can enter a latitude and longitude, 020 * and when ok is pressed, a new node is created at the specified position. 021 */ 022 public final class AddNodeAction extends JosmAction { 023 // remember input from last time 024 private String textLatLon, textEastNorth; 025 026 public AddNodeAction() { 027 super(tr("Add Node..."), "addnode", tr("Add a node by entering latitude / longitude or easting / northing."), 028 Shortcut.registerShortcut("addnode", tr("Edit: {0}", tr("Add Node...")), 029 KeyEvent.VK_D, Shortcut.SHIFT), true); 030 putValue("help", ht("/Action/AddNode")); 031 } 032 033 public void actionPerformed(ActionEvent e) { 034 if (!isEnabled()) 035 return; 036 037 LatLonDialog dialog = new LatLonDialog(Main.parent, tr("Add Node..."), ht("/Action/AddNode")); 038 039 if (textLatLon != null) { 040 dialog.setLatLonText(textLatLon); 041 } 042 if (textEastNorth != null) { 043 dialog.setEastNorthText(textEastNorth); 044 } 045 046 dialog.showDialog(); 047 048 if (dialog.getValue() != 1) 049 return; 050 051 LatLon coordinates = dialog.getCoordinates(); 052 if (coordinates == null) 053 return; 054 055 textLatLon = dialog.getLatLonText(); 056 textEastNorth = dialog.getEastNorthText(); 057 058 Node nnew = new Node(coordinates); 059 060 // add the node 061 Main.main.undoRedo.add(new AddCommand(nnew)); 062 getCurrentDataSet().setSelected(nnew); 063 Main.map.mapView.repaint(); 064 } 065 066 @Override 067 protected void updateEnabledState() { 068 setEnabled(getEditLayer() != null); 069 } 070 }