Ticket #1983: ParseClipboardTextOnLoadAndOnPaste.patch
| File ParseClipboardTextOnLoadAndOnPaste.patch, 10.6 KB (added by , 17 years ago) |
|---|
-
src/org/openstreetmap/josm/gui/download/BoundingBoxSelection.java
diff -u -r -N orig/src/org/openstreetmap/josm/gui/download/BoundingBoxSelection.java trunk/src/org/openstreetmap/josm/gui/download/BoundingBoxSelection.java
old new 23 23 import org.openstreetmap.josm.data.Bounds; 24 24 import org.openstreetmap.josm.data.coor.LatLon; 25 25 import org.openstreetmap.josm.tools.GBC; 26 import org.openstreetmap.josm.tools.OsmUrlToBounds; 26 27 /** 27 28 * Bounding box selector. 28 29 * … … 40 41 new JTextField(11) }; 41 42 final JTextArea osmUrl = new JTextArea(); 42 43 final JTextArea showUrl = new JTextArea(); 43 String noteUrl = tr("You can paste an URL here to download the area.");44 44 45 45 public void addGui(final DownloadDialog gui) { 46 46 47 47 JPanel dlg = new JPanel(new GridBagLayout()); 48 osmUrl.setText(noteUrl);49 48 50 49 final FocusListener dialogUpdater = new FocusAdapter() { 51 50 @Override public void focusLost(FocusEvent e) { … … 79 78 public void insertUpdate(DocumentEvent e) { dowork(); } 80 79 public void removeUpdate(DocumentEvent e) { dowork(); } 81 80 private void dowork() { 82 Bounds b = osmurl2bounds(osmUrl.getText());81 Bounds b = OsmUrlToBounds.parse(osmUrl.getText()); 83 82 if (b != null) { 84 83 gui.minlon = b.min.lon(); 85 84 gui.minlat = b.min.lat(); … … 118 117 dlg.add(new JLabel(tr("max lon")), GBC.std().insets(10,0,5,0)); 119 118 dlg.add(latlon[3], GBC.eol()); 120 119 121 dlg.add(new JLabel(tr("URL from www.openstreetmap.org ")), GBC.eol().insets(10,20,5,0));120 dlg.add(new JLabel(tr("URL from www.openstreetmap.org (you can paste an URL here to download the area)")), GBC.eol().insets(10,20,5,0)); 122 121 dlg.add(osmUrl, GBC.eop().insets(10,0,5,0).fill()); 123 122 dlg.add(showUrl, GBC.eop().insets(10,0,5,5)); 124 123 showUrl.setEditable(false); … … 166 165 } 167 166 showUrl.setText("http://www.openstreetmap.org/index.html?mlat="+lat+"&mlon="+lon+"&zoom="+zoom); 168 167 } 169 170 public static Bounds osmurl2bounds(String url) {171 int i = url.indexOf('?');172 if (i == -1)173 return null;174 String[] args = url.substring(i+1).split("&");175 HashMap<String, String> map = new HashMap<String, String>();176 for (String arg : args) {177 int eq = arg.indexOf('=');178 if (eq != -1) {179 map.put(arg.substring(0, eq), arg.substring(eq + 1));180 }181 }182 183 Bounds b = null;184 try {185 if (map.containsKey("bbox")) {186 String bbox[] = map.get("bbox").split(",");187 b = new Bounds(188 new LatLon(Double.parseDouble(bbox[1]), Double.parseDouble(bbox[0])),189 new LatLon(Double.parseDouble(bbox[3]), Double.parseDouble(bbox[2])));190 191 } else {192 double size = 180.0 / Math.pow(2, Integer.parseInt(map.get("zoom")));193 b = new Bounds(194 new LatLon(parseDouble(map, "lat") - size/2, parseDouble(map, "lon") - size),195 new LatLon(parseDouble(map, "lat") + size/2, parseDouble(map, "lon") + size));196 }197 } catch (NumberFormatException x) {198 } catch (NullPointerException x) {199 }200 return b;201 }202 203 private static double parseDouble(HashMap<String, String> map, String key) {204 if (map.containsKey(key))205 return Double.parseDouble(map.get(key));206 return Double.parseDouble(map.get("m"+key));207 }208 168 } -
src/org/openstreetmap/josm/gui/download/DownloadDialog.java
diff -u -r -N orig/src/org/openstreetmap/josm/gui/download/DownloadDialog.java trunk/src/org/openstreetmap/josm/gui/download/DownloadDialog.java
old new 4 4 import static org.openstreetmap.josm.tools.I18n.tr; 5 5 6 6 import java.awt.Color; 7 import java.awt.datatransfer.DataFlavor; 8 import java.awt.datatransfer.Transferable; 9 import java.awt.event.ActionEvent; 10 import java.awt.event.InputEvent; 11 import java.awt.event.KeyEvent; 12 7 13 import java.awt.Font; 8 14 import java.awt.GridBagLayout; 15 import java.awt.Toolkit; 9 16 import java.util.ArrayList; 10 17 import java.util.List; 11 18 19 import javax.swing.AbstractAction; 12 20 import javax.swing.JCheckBox; 13 21 import javax.swing.JLabel; 14 22 import javax.swing.JOptionPane; 15 23 import javax.swing.JPanel; 16 24 import javax.swing.JTabbedPane; 25 import javax.swing.KeyStroke; 17 26 18 27 import org.openstreetmap.josm.Main; 19 28 import org.openstreetmap.josm.actions.DownloadAction; 20 29 import org.openstreetmap.josm.actions.downloadtasks.DownloadGpsTask; 21 30 import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask; 31 import org.openstreetmap.josm.data.Bounds; 22 32 import org.openstreetmap.josm.gui.MapView; 23 33 import org.openstreetmap.josm.plugins.PluginProxy; 24 34 import org.openstreetmap.josm.tools.GBC; 35 import org.openstreetmap.josm.tools.OsmUrlToBounds; 36 37 38 39 40 25 41 26 42 /** 27 43 * Main download dialog. … … 145 161 Font labelFont = sizeCheck.getFont(); 146 162 sizeCheck.setFont(labelFont.deriveFont(Font.PLAIN, labelFont.getSize())); 147 163 add(sizeCheck, GBC.eop().insets(0,5,5,10)); 164 165 checkClipboardContents(); 166 167 getInputMap(WHEN_IN_FOCUSED_WINDOW).put( 168 KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK), "checkClipboardContents"); 169 170 getActionMap().put("checkClipboardContents", new AbstractAction() { 171 public void actionPerformed(ActionEvent e) { 172 checkClipboardContents(); 173 } 174 }); 148 175 } 149 176 177 private void checkClipboardContents() { 178 String result = ""; 179 Transferable contents = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null); 180 181 if(contents == null || !contents.isDataFlavorSupported(DataFlavor.stringFlavor)) 182 return; 183 184 try { 185 result = (String)contents.getTransferData(DataFlavor.stringFlavor); 186 } 187 catch(Exception ex) { 188 return; 189 } 190 191 Bounds b = OsmUrlToBounds.parse(result); 192 if (b != null) { 193 minlon = b.min.lon(); 194 minlat = b.min.lat(); 195 maxlon = b.max.lon(); 196 maxlat = b.max.lat(); 197 boundingBoxChanged(null); 198 } 199 } 200 150 201 private void updateSizeCheck() { 151 202 if ((maxlon-minlon)*(maxlat-minlat) > Main.pref.getDouble("osm-server.max-request-area", 0.25)) { 152 203 sizeCheck.setText(tr("Download area too large; will probably be rejected by server")); -
src/org/openstreetmap/josm/Main.java
diff -u -r -N orig/src/org/openstreetmap/josm/Main.java trunk/src/org/openstreetmap/josm/Main.java
old new 49 49 import org.openstreetmap.josm.gui.MapFrame; 50 50 import org.openstreetmap.josm.gui.PleaseWaitDialog; 51 51 import org.openstreetmap.josm.gui.SplashScreen; 52 import org.openstreetmap.josm.gui.download.BoundingBoxSelection;53 52 import org.openstreetmap.josm.gui.download.DownloadDialog.DownloadTask; 54 53 import org.openstreetmap.josm.gui.layer.Layer; 55 54 import org.openstreetmap.josm.gui.layer.OsmDataLayer; … … 60 59 import org.openstreetmap.josm.plugins.PluginInformation; 61 60 import org.openstreetmap.josm.plugins.PluginProxy; 62 61 import org.openstreetmap.josm.tools.ImageProvider; 62 import org.openstreetmap.josm.tools.OsmUrlToBounds; 63 63 import org.openstreetmap.josm.tools.PlatformHook; 64 64 import org.openstreetmap.josm.tools.PlatformHookUnixoid; 65 65 import org.openstreetmap.josm.tools.PlatformHookWindows; … … 486 486 487 487 private static void downloadFromParamString(final boolean rawGps, String s) { 488 488 if (s.startsWith("http:")) { 489 final Bounds b = BoundingBoxSelection.osmurl2bounds(s);489 final Bounds b = OsmUrlToBounds.parse(s); 490 490 if (b == null) 491 491 JOptionPane.showMessageDialog(Main.parent, tr("Ignoring malformed URL: \"{0}\"", s)); 492 492 else { -
src/org/openstreetmap/josm/tools/OsmUrlToBounds.java
diff -u -r -N orig/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java trunk/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java
old new 1 // License: GPL. Copyright 2007 by Immanuel Scholz and others 2 package org.openstreetmap.josm.tools; 3 4 import java.util.HashMap; 5 6 import org.openstreetmap.josm.data.Bounds; 7 import org.openstreetmap.josm.data.coor.LatLon; 8 9 public class OsmUrlToBounds { 10 public static Bounds parse(String url) { 11 int i = url.indexOf('?'); 12 if (i == -1) 13 return null; 14 String[] args = url.substring(i+1).split("&"); 15 HashMap<String, String> map = new HashMap<String, String>(); 16 for (String arg : args) { 17 int eq = arg.indexOf('='); 18 if (eq != -1) { 19 map.put(arg.substring(0, eq), arg.substring(eq + 1)); 20 } 21 } 22 23 Bounds b = null; 24 try { 25 if (map.containsKey("bbox")) { 26 String bbox[] = map.get("bbox").split(","); 27 b = new Bounds( 28 new LatLon(Double.parseDouble(bbox[1]), Double.parseDouble(bbox[0])), 29 new LatLon(Double.parseDouble(bbox[3]), Double.parseDouble(bbox[2]))); 30 31 } else { 32 double size = 180.0 / Math.pow(2, Integer.parseInt(map.get("zoom"))); 33 b = new Bounds( 34 new LatLon(parseDouble(map, "lat") - size/2, parseDouble(map, "lon") - size), 35 new LatLon(parseDouble(map, "lat") + size/2, parseDouble(map, "lon") + size)); 36 } 37 } catch (NumberFormatException x) { 38 } catch (NullPointerException x) { 39 } 40 return b; 41 } 42 43 public static double parseDouble(HashMap<String, String> map, String key) { 44 if (map.containsKey(key)) 45 return Double.parseDouble(map.get(key)); 46 return Double.parseDouble(map.get("m"+key)); 47 } 48 }
