Ignore:
Timestamp:
2012-09-01T22:42:19+02:00 (12 years ago)
Author:
Don-vip
Message:

fix #8006 - Download remote marker layer

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java

    r5486 r5494  
    1616import org.openstreetmap.josm.gui.layer.GpxLayer;
    1717import org.openstreetmap.josm.gui.layer.Layer;
     18import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
    1819import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1920import org.openstreetmap.josm.gui.progress.ProgressTaskId;
    2021import org.openstreetmap.josm.gui.progress.ProgressTaskIds;
    2122import org.openstreetmap.josm.io.BoundingBoxDownloader;
     23import org.openstreetmap.josm.io.GpxImporter;
     24import org.openstreetmap.josm.io.GpxImporter.GpxImporterData;
    2225import org.openstreetmap.josm.io.OsmServerLocationReader;
    2326import org.openstreetmap.josm.io.OsmServerReader;
     
    2528import org.xml.sax.SAXException;
    2629
     30/**
     31 * Task allowing to download GPS data.
     32 */
    2733public class DownloadGpsTask extends AbstractDownloadTask {
    2834
     
    115121                return;
    116122            String name = newLayerName != null ? newLayerName : tr("Downloaded GPX Data");
    117             GpxLayer layer = new GpxLayer(rawData, name);
    118             Layer x = findMergeLayer();
    119             if (newLayer || x == null) {
     123           
     124            GpxImporterData layers = GpxImporter.loadLayers(rawData, reader.isGpxParsedProperly(), name, tr("Markers from {0}", name));
     125           
     126            GpxLayer gpxLayer = addOrMergeLayer(layers.gpxLayer, findGpxMergeLayer());
     127            addOrMergeLayer(layers.markerLayer, findMarkerMergeLayer(gpxLayer));
     128           
     129            layers.postLayerTask.run();
     130        }
     131       
     132        private <L extends Layer> L addOrMergeLayer(L layer, L mergeLayer) {
     133            if (layer == null) return null;
     134            if (newLayer || mergeLayer == null) {
    120135                Main.main.addLayer(layer);
     136                return layer;
    121137            } else {
    122                 x.mergeFrom(layer);
     138                mergeLayer.mergeFrom(layer);
    123139                Main.map.repaint();
     140                return mergeLayer;
    124141            }
    125142        }
    126143
    127         private Layer findMergeLayer() {
    128             boolean merge = Main.pref.getBoolean("download.gps.mergeWithLocal", false);
     144        private GpxLayer findGpxMergeLayer() {
    129145            if (!Main.isDisplayingMapView())
    130146                return null;
     147            boolean merge = Main.pref.getBoolean("download.gps.mergeWithLocal", false);
    131148            Layer active = Main.map.mapView.getActiveLayer();
    132149            if (active != null && active instanceof GpxLayer && (merge || ((GpxLayer)active).data.fromServer))
    133                 return active;
    134             for (Layer l : Main.map.mapView.getAllLayers()) {
    135                 if (l instanceof GpxLayer &&  (merge || ((GpxLayer)l).data.fromServer))
     150                return (GpxLayer) active;
     151            for (GpxLayer l : Main.map.mapView.getLayersOfType(GpxLayer.class)) {
     152                if (merge || l.data.fromServer)
     153                    return l;
     154            }
     155            return null;
     156        }
     157       
     158        private MarkerLayer findMarkerMergeLayer(GpxLayer fromLayer) {
     159            if (!Main.isDisplayingMapView())
     160                return null;
     161            for (MarkerLayer l : Main.map.mapView.getLayersOfType(MarkerLayer.class)) {
     162                if (fromLayer != null && l.fromLayer == fromLayer)
    136163                    return l;
    137164            }
Note: See TracChangeset for help on using the changeset viewer.