source: josm/trunk/src/org/openstreetmap/josm/actions/DownloadAlongWayAction.java@ 15363

Last change on this file since 15363 was 15363, checked in by Don-vip, 5 years ago

fix #18050 - DownloadAlong: download as new layer

File size: 3.4 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.actions;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.event.KeyEvent;
7import java.awt.geom.Path2D;
8import java.util.Collection;
9
10import javax.swing.JOptionPane;
11
12import org.openstreetmap.josm.data.osm.Node;
13import org.openstreetmap.josm.data.osm.OsmPrimitive;
14import org.openstreetmap.josm.data.osm.Way;
15import org.openstreetmap.josm.gui.MainApplication;
16import org.openstreetmap.josm.gui.PleaseWaitRunnable;
17import org.openstreetmap.josm.gui.help.HelpUtil;
18import org.openstreetmap.josm.gui.layer.gpx.DownloadAlongPanel;
19import org.openstreetmap.josm.tools.Shortcut;
20
21/**
22 * Calculate area around selected ways and split it into reasonable parts so
23 * that they can be downloaded.
24 *
25 */
26public class DownloadAlongWayAction extends DownloadAlongAction {
27
28 private static final String PREF_DOWNLOAD_ALONG_WAY_DISTANCE = "downloadAlongWay.distance";
29 private static final String PREF_DOWNLOAD_ALONG_WAY_AREA = "downloadAlongWay.area";
30
31 private static final String PREF_DOWNLOAD_ALONG_WAY_OSM = "downloadAlongWay.download.osm";
32 private static final String PREF_DOWNLOAD_ALONG_WAY_GPS = "downloadAlongWay.download.gps";
33
34 /**
35 * Create new {@link DownloadAlongWayAction}.
36 */
37 public DownloadAlongWayAction() {
38 super(tr("Download along..."), "download_along_way", tr("Download OSM data along the selected ways."),
39 Shortcut.registerShortcut("file:download_along", tr("File: {0}", tr("Download Along")),
40 KeyEvent.VK_D, Shortcut.ALT_SHIFT), true);
41 }
42
43 @Override
44 protected PleaseWaitRunnable createTask() {
45 Collection<Way> selectedWays = getLayerManager().getEditDataSet().getSelectedWays();
46
47 if (selectedWays.isEmpty()) {
48 JOptionPane.showMessageDialog(MainApplication.getMainFrame(), tr("Please select 1 or more ways to download along"));
49 return null;
50 }
51
52 final DownloadAlongPanel panel = new DownloadAlongPanel(
53 PREF_DOWNLOAD_ALONG_WAY_OSM, PREF_DOWNLOAD_ALONG_WAY_GPS,
54 PREF_DOWNLOAD_ALONG_WAY_DISTANCE, PREF_DOWNLOAD_ALONG_WAY_AREA, null);
55
56 int ret = panel.showInDownloadDialog(tr("Download from OSM along selected ways"), HelpUtil.ht("/Tools/DownloadAlong"));
57 if (0 != ret && 1 != ret) {
58 return null;
59 }
60
61 // Convert OSM ways to Path2D
62 Path2D alongPath = new Path2D.Double();
63 for (Way way : selectedWays) {
64 boolean first = true;
65 for (Node p : way.getNodes()) {
66 if (first) {
67 alongPath.moveTo(p.lon(), p.lat());
68 first = false;
69 } else {
70 alongPath.lineTo(p.lon(), p.lat());
71 }
72 }
73 }
74 return createCalcTask(alongPath, panel, tr("Download from OSM along selected ways"), 1 == ret);
75 }
76
77 @Override
78 protected void updateEnabledState() {
79 if (getLayerManager().getEditDataSet() == null) {
80 setEnabled(false);
81 } else {
82 updateEnabledState(getLayerManager().getEditDataSet().getSelected());
83 }
84 }
85
86 @Override
87 protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
88 setEnabled(selection.stream().anyMatch(Way.class::isInstance));
89 }
90}
Note: See TracBrowser for help on using the repository browser.