Changeset 11774 in josm for trunk/src/org/openstreetmap/josm/actions/DownloadAction.java
- Timestamp:
- 2017-03-25T17:33:06+01:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/actions/DownloadAction.java
r11658 r11774 7 7 import java.awt.event.ActionEvent; 8 8 import java.awt.event.KeyEvent; 9 import java.util.ArrayList; 10 import java.util.List; 11 import java.util.concurrent.ExecutionException; 9 12 import java.util.concurrent.Future; 10 13 11 14 import org.openstreetmap.josm.Main; 15 import org.openstreetmap.josm.actions.downloadtasks.AbstractDownloadTask; 12 16 import org.openstreetmap.josm.actions.downloadtasks.DownloadGpsTask; 13 17 import org.openstreetmap.josm.actions.downloadtasks.DownloadNotesTask; … … 15 19 import org.openstreetmap.josm.actions.downloadtasks.PostDownloadHandler; 16 20 import org.openstreetmap.josm.data.Bounds; 21 import org.openstreetmap.josm.data.ProjectionBounds; 22 import org.openstreetmap.josm.data.ViewportData; 17 23 import org.openstreetmap.josm.gui.download.DownloadDialog; 24 import org.openstreetmap.josm.gui.util.GuiHelper; 25 import org.openstreetmap.josm.tools.Pair; 18 26 import org.openstreetmap.josm.tools.Shortcut; 19 27 … … 45 53 if (!dialog.isCanceled()) { 46 54 dialog.rememberSettings(); 47 Bounds area = dialog.getSelectedDownloadArea(); 55 final Bounds area = dialog.getSelectedDownloadArea(); 56 final boolean zoom = dialog.isZoomToDownloadedDataRequired(); 57 final List<Pair<AbstractDownloadTask<?>, Future<?>>> tasks = new ArrayList<>(); 48 58 if (dialog.isDownloadOsmData()) { 49 59 DownloadOsmTask task = new DownloadOsmTask(); 50 task.setZoomAfterDownload( dialog.isZoomToDownloadedDataRequired());60 task.setZoomAfterDownload(zoom && !dialog.isDownloadGpxData() && !dialog.isDownloadNotes()); 51 61 Future<?> future = task.download(dialog.isNewLayerRequired(), area, null); 52 62 Main.worker.submit(new PostDownloadHandler(task, future)); 63 if (zoom) { 64 tasks.add(new Pair<>(task, future)); 65 } 53 66 } 54 67 if (dialog.isDownloadGpxData()) { 55 68 DownloadGpsTask task = new DownloadGpsTask(); 56 task.setZoomAfterDownload( dialog.isZoomToDownloadedDataRequired());69 task.setZoomAfterDownload(zoom && !dialog.isDownloadOsmData() && !dialog.isDownloadNotes()); 57 70 Future<?> future = task.download(dialog.isNewLayerRequired(), area, null); 58 71 Main.worker.submit(new PostDownloadHandler(task, future)); 72 if (zoom) { 73 tasks.add(new Pair<>(task, future)); 74 } 59 75 } 60 76 if (dialog.isDownloadNotes()) { 61 77 DownloadNotesTask task = new DownloadNotesTask(); 62 task.setZoomAfterDownload( dialog.isZoomToDownloadedDataRequired());78 task.setZoomAfterDownload(zoom && !dialog.isDownloadOsmData() && !dialog.isDownloadGpxData()); 63 79 Future<?> future = task.download(false, area, null); 64 80 Main.worker.submit(new PostDownloadHandler(task, future)); 81 if (zoom) { 82 tasks.add(new Pair<>(task, future)); 83 } 84 } 85 if (zoom && tasks.size() > 1) { 86 Main.worker.submit(() -> { 87 ProjectionBounds bounds = null; 88 // Wait for completion of download jobs 89 for (Pair<AbstractDownloadTask<?>, Future<?>> p : tasks) { 90 try { 91 p.b.get(); 92 ProjectionBounds b = p.a.getDownloadProjectionBounds(); 93 if (bounds == null) { 94 bounds = b; 95 } else if (b != null) { 96 bounds.extend(b); 97 } 98 } catch (InterruptedException | ExecutionException ex) { 99 Main.warn(ex); 100 } 101 } 102 // Zoom to the larger download bounds 103 if (Main.map != null && bounds != null) { 104 final ProjectionBounds pb = bounds; 105 GuiHelper.runInEDTAndWait(() -> Main.map.mapView.zoomTo(new ViewportData(pb))); 106 } 107 }); 65 108 } 66 109 }
Note:
See TracChangeset
for help on using the changeset viewer.