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

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

fix #18678 - fix DownloadAlong with locked layers

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().getActiveDataSet().getSelectedWays();
46 if (selectedWays.isEmpty()) {
47 JOptionPane.showMessageDialog(MainApplication.getMainFrame(), tr("Please select 1 or more ways to download along"));
48 return null;
49 }
50
51 final DownloadAlongPanel panel = new DownloadAlongPanel(
52 PREF_DOWNLOAD_ALONG_WAY_OSM, PREF_DOWNLOAD_ALONG_WAY_GPS,
53 PREF_DOWNLOAD_ALONG_WAY_DISTANCE, PREF_DOWNLOAD_ALONG_WAY_AREA, null);
54
55 int ret = panel.showInDownloadDialog(tr("Download from OSM along selected ways"), HelpUtil.ht("/Tools/DownloadAlong"));
56 if (0 != ret && 1 != ret) {
57 return null;
58 }
59
60 // Convert OSM ways to Path2D
61 Path2D alongPath = new Path2D.Double();
62 for (Way way : selectedWays) {
63 boolean first = true;
64 for (Node p : way.getNodes()) {
65 if (first) {
66 alongPath.moveTo(p.lon(), p.lat());
67 first = false;
68 } else {
69 alongPath.lineTo(p.lon(), p.lat());
70 }
71 }
72 }
73 return createCalcTask(alongPath, panel, tr("Download from OSM along selected ways"), 1 == ret);
74 }
75
76 @Override
77 protected void updateEnabledState() {
78 if (getLayerManager().getEditDataSet() == null) {
79 setEnabled(false);
80 } else {
81 updateEnabledState(getLayerManager().getEditDataSet().getSelected());
82 }
83 }
84
85 @Override
86 protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
87 setEnabled(selection.stream().anyMatch(Way.class::isInstance));
88 }
89}
Note: See TracBrowser for help on using the repository browser.