Ignore:
Timestamp:
2010-05-27T21:07:52+02:00 (15 years ago)
Author:
jttt
Message:

Do not reuse old gpx data after layer is removed and EditGpx mode reactivated

Location:
applications/editors/josm/plugins/editgpx/src/org/openstreetmap/josm/plugins/editgpx
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/editgpx/src/org/openstreetmap/josm/plugins/editgpx/EditGpxLayer.java

    r21472 r21474  
    3838
    3939        private static Icon icon = new ImageIcon(Toolkit.getDefaultToolkit().createImage(EditGpxPlugin.class.getResource("/images/editgpx_layer.png")));
    40         private final EditGpxData data;
     40        public final EditGpxData data;
    4141        private GPXLayerImportAction layerImport;
    4242
  • applications/editors/josm/plugins/editgpx/src/org/openstreetmap/josm/plugins/editgpx/EditGpxMode.java

    r21472 r21474  
    33 */
    44package org.openstreetmap.josm.plugins.editgpx;
     5
     6import static org.openstreetmap.josm.tools.I18n.tr;
    57
    68import java.awt.Color;
     
    1113import java.awt.event.InputEvent;
    1214import java.awt.event.MouseEvent;
     15import java.util.List;
    1316
    1417import org.openstreetmap.josm.Main;
    1518import org.openstreetmap.josm.actions.mapmode.MapMode;
    1619import org.openstreetmap.josm.gui.MapFrame;
     20import org.openstreetmap.josm.gui.MapView;
     21import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
     22import org.openstreetmap.josm.gui.layer.Layer;
    1723import org.openstreetmap.josm.plugins.editgpx.data.EditGpxData;
    1824import org.openstreetmap.josm.plugins.editgpx.data.EditGpxTrack;
     
    2127
    2228
    23 public class EditGpxMode extends MapMode {
     29public class EditGpxMode extends MapMode implements LayerChangeListener {
    2430
    2531        private static final long serialVersionUID = 7940589057093872411L;
    2632        Point pointPressed;
    27         EditGpxData data;
    2833        MapFrame mapFrame;
    2934        Rectangle oldRect;
    3035        MapFrame frame;
     36        EditGpxLayer currentEditLayer;
    3137
    32         public EditGpxMode(MapFrame mapFrame, String name, String desc, EditGpxData gpxData) {
     38        public EditGpxMode(MapFrame mapFrame, String name, String desc) {
    3339                super(name, "editgpx_mode.png", desc, mapFrame, Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
    34                 this.data = gpxData;
    3540        }
    3641
     
    3944                Main.map.mapView.addMouseListener(this);
    4045                Main.map.mapView.addMouseMotionListener(this);
     46                MapView.addLayerChangeListener(this);
     47                updateLayer();
    4148        }
    4249
     
    6370                if (e.getButton() != MouseEvent.BUTTON1) {
    6471                        return;
    65                 } else {
    66                         Point pointReleased = e.getPoint();
     72                }
    6773
    68                         Rectangle r = createRect(pointReleased, pointPressed);
     74                Point pointReleased = e.getPoint();
    6975
    70                         //go through nodes and mark the ones in the selection rect as deleted
    71                         for (EditGpxTrack track: data.getTracks()) {
     76                Rectangle r = createRect(pointReleased, pointPressed);
     77
     78                //go through nodes and mark the ones in the selection rect as deleted
     79                if (currentEditLayer != null) {
     80                        for (EditGpxTrack track: currentEditLayer.data.getTracks()) {
    7281                                for (EditGpxTrackSegment segment: track.getSegments()) {
    7382                                        for (EditGpxWayPoint wayPoint: segment.getWayPoints()) {
     
    7988                                }
    8089                        }
    81                         oldRect = null;
    82                         Main.map.mapView.repaint();
    8390                }
     91                oldRect = null;
     92                Main.map.mapView.repaint();
     93
    8494        }
    8595
     
    139149                frame = mapFrame;
    140150        }
     151
     152        /**
     153         * create new layer, add listeners and try importing gpx data.
     154         */
     155        private void updateLayer() {
     156
     157                List<EditGpxLayer> layers = Main.map.mapView.getLayersOfType(EditGpxLayer.class);
     158                currentEditLayer = layers.isEmpty()?null:layers.get(0);
     159
     160                if(currentEditLayer == null) {
     161                        currentEditLayer = new EditGpxLayer(tr("EditGpx"), new EditGpxData());
     162                        Main.main.addLayer(currentEditLayer);
     163                        currentEditLayer.initializeImport();
     164                }
     165                Main.map.mapView.repaint();
     166        }
     167
     168        public void activeLayerChange(Layer oldLayer, Layer newLayer) { }
     169
     170        public void layerAdded(Layer newLayer) { }
     171
     172        public void layerRemoved(Layer oldLayer) {
     173                if (oldLayer instanceof EditGpxLayer) {
     174                        currentEditLayer = null;
     175                }
     176        }
     177
    141178}
  • applications/editors/josm/plugins/editgpx/src/org/openstreetmap/josm/plugins/editgpx/EditGpxPlugin.java

    r21472 r21474  
    66import static org.openstreetmap.josm.tools.I18n.tr;
    77
    8 import java.awt.event.ActionEvent;
    9 import java.awt.event.ActionListener;
    108import java.net.URL;
    119
     
    1513import org.openstreetmap.josm.gui.IconToggleButton;
    1614import org.openstreetmap.josm.gui.MapFrame;
    17 import org.openstreetmap.josm.gui.MapView;
    18 import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
    19 import org.openstreetmap.josm.gui.layer.Layer;
    2015import org.openstreetmap.josm.plugins.Plugin;
    2116import org.openstreetmap.josm.plugins.PluginInformation;
    22 import org.openstreetmap.josm.plugins.editgpx.data.EditGpxData;
    2317
    2418/**
     
    4034        private IconToggleButton btn;
    4135        private EditGpxMode mode;
    42         protected static EditGpxLayer eGpxLayer;
    43         protected static EditGpxData gpxData;
    44         public static boolean active = false;
    4536
    4637        public EditGpxPlugin(PluginInformation info) {
    4738                super(info);
    48                 gpxData = new EditGpxData();
    49                 mode = new EditGpxMode(Main.map, "editgpx", tr("edit gpx tracks"), gpxData);
     39                mode = new EditGpxMode(Main.map, "editgpx", tr("edit gpx tracks"));
    5040
    5141                btn = new IconToggleButton(mode);
     
    6353                        if(Main.map != null)
    6454                                Main.map.addMapMode(btn);
    65 
    66                         active = btn.isSelected();
    67 
    68                         btn.addActionListener(new ActionListener() {
    69                                 public void actionPerformed(ActionEvent e) {
    70                                         active = btn.isSelected();
    71                                         if (active) {
    72                                                 Main.worker.execute(new Runnable() {
    73                                                         public void run() {
    74                                                                 updateLayer();
    75                                                         }
    76                                                 });
    77                                         }
    78                                 }
    79                         });
    8055                }
    81         }
    82 
    83         /**
    84          * create new layer, add listeners and try importing gpx data.
    85          */
    86         private void updateLayer() {
    87                 if(eGpxLayer == null) {
    88                         eGpxLayer = new EditGpxLayer(tr("EditGpx"), gpxData);
    89                         Main.main.addLayer(eGpxLayer);
    90                         MapView.addLayerChangeListener(new LayerChangeListener(){
    91 
    92                                 public void activeLayerChange(final Layer oldLayer, final Layer newLayer) {
    93                                         if(newLayer instanceof EditGpxLayer)
    94                                                 EditGpxPlugin.eGpxLayer = (EditGpxLayer)newLayer;
    95                                 }
    96 
    97                                 public void layerAdded(final Layer newLayer) {
    98                                 }
    99 
    100                                 public void layerRemoved(final Layer oldLayer) {
    101                                         if(oldLayer == eGpxLayer) {
    102                                                 eGpxLayer = null;
    103                                                 //dataSet = new DataSet();
    104                                                 MapView.removeLayerChangeListener(this);
    105                                         }
    106                                 }
    107                         });
    108 
    109                         eGpxLayer.initializeImport();
    110                 }
    111                 Main.map.mapView.repaint();
    11256        }
    11357
Note: See TracChangeset for help on using the changeset viewer.