Ignore:
Timestamp:
2010-01-30T20:15:37+01:00 (15 years ago)
Author:
jttt
Message:

Adapted for JOSM r2907

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

    r18962 r19683  
    1313import java.awt.event.ActionEvent;
    1414import java.util.ArrayList;
     15import java.util.Collection;
    1516import java.util.Date;
     17import java.util.HashMap;
    1618import java.util.HashSet;
     19import java.util.Iterator;
     20import java.util.List;
     21import java.util.Map;
    1722
    1823import javax.swing.AbstractAction;
     
    2530import org.openstreetmap.josm.data.Bounds;
    2631import org.openstreetmap.josm.data.gpx.GpxData;
    27 import org.openstreetmap.josm.data.gpx.GpxTrack;
     32import org.openstreetmap.josm.data.gpx.ImmutableGpxTrack;
    2833import org.openstreetmap.josm.data.gpx.WayPoint;
    2934import org.openstreetmap.josm.data.osm.DataSet;
     
    4247public class EditGpxLayer extends Layer {
    4348
    44     private static Icon icon = new ImageIcon(Toolkit.getDefaultToolkit().createImage(EditGpxPlugin.class.getResource("/images/editgpx_layer.png")));
    45     private DataSet dataSet;
    46     private GPXLayerImportAction layerImport;
    47 
    48     public EditGpxLayer(String str, DataSet ds) {
    49         super(str);
    50         dataSet = ds;
    51         layerImport = new GPXLayerImportAction(dataSet);
    52     }
    53 
    54     /**
    55      * check if dataSet is empty
    56      * if so show import dialog to user
    57      */
    58     public void initializeImport() {
    59         try {
    60             if(dataSet.getNodes().isEmpty() ) {
    61                 layerImport.activateImport();
    62             }
    63         } catch (Exception e) {
    64             System.out.println(e.getMessage());
    65             e.printStackTrace();
    66         }
    67     }
    68 
    69     @Override
    70     public Icon getIcon() {
    71         return icon;
    72     }
    73 
    74     @Override
    75     public Object getInfoComponent() {
    76         return getToolTipText();
    77     }
    78 
    79     @Override
    80     public Component[] getMenuEntries() {
    81         return new Component[] {
    82             new JMenuItem(LayerListDialog.getInstance().createShowHideLayerAction(this)),
    83             new JMenuItem(LayerListDialog.getInstance().createDeleteLayerAction(this)),
    84             new JSeparator(),
    85             new JMenuItem(layerImport),
    86             new JMenuItem(new ConvertToGpxLayerAction()),
    87             new JMenuItem(new ConvertToAnonTimeGpxLayerAction()),
    88             new JSeparator(),
    89             new JMenuItem(new LayerListPopup.InfoAction(this))};
    90     }
    91 
    92     @Override
    93     public String getToolTipText() {
    94         return tr("Layer for editing GPX tracks");
    95     }
    96 
    97     @Override
    98     public boolean isMergable(Layer other) {
    99         // TODO
    100         return false;
    101     }
    102 
    103     @Override
    104     public void mergeFrom(Layer from) {
    105         // TODO
    106     }
    107 
    108     @Override
    109     public void paint(Graphics2D g, MapView mv, Bounds bounds) {
    110         g.setColor(Color.yellow);
    111 
    112         //don't iterate through dataSet whiling making changes
    113         synchronized(layerImport.importing) {
    114             for(Node n: dataSet.getNodes()) {
    115                 if (!n.isDeleted()) {
    116                     Point pnt = Main.map.mapView.getPoint(n.getEastNorth());
    117                     g.drawOval(pnt.x - 2, pnt.y - 2, 4, 4);
    118                 }
    119             }
    120         }
    121     }
    122 
    123 
    124     public void reset(){
    125         //TODO implement a reset
    126     }
    127 
    128 
    129     @Override
    130     public void visitBoundingBox(BoundingXYVisitor v) {
    131         // TODO Auto-generated method stub
    132     }
    133 
    134 
    135     /**
    136      * convert a DataSet to GPX
    137      *
    138      * @param boolean anonTime If true set all time and date in GPX to 01/01/1970 00:00 ?
    139      * @return GPXData
    140      */
    141     private GpxData toGpxData(boolean anonTime) {
    142         GpxData gpxData = new GpxData();
    143         HashSet<Node> doneNodes = new HashSet<Node>();
    144         //add all ways
    145         for (Way w : dataSet.getWays()) {
    146             if (w.isIncomplete() || w.isDeleted()) continue;
    147             GpxTrack trk = new GpxTrack();
    148             gpxData.tracks.add(trk);
    149 
    150             if (w.get("name") != null)
    151                 trk.attr.put("name", w.get("name"));
    152 
    153             ArrayList<WayPoint> trkseg = null;
    154             for (Node n : w.getNodes()) {
    155                 if (n.isIncomplete() || n.isDeleted()) {
    156                     trkseg = null;
    157                     continue;
    158                 }
    159 
    160                 Date tstamp = n.getTimestamp();
    161 
    162                 if (trkseg == null) {
    163                     trkseg = new ArrayList<WayPoint>();
    164                     trk.trackSegs.add(trkseg);
    165                 }
    166                 doneNodes.add(n);
    167 
    168                 WayPoint wpt = new WayPoint(n.getCoor());
    169                 if (anonTime) {
    170                     wpt.attr.put("time", "1970-01-01T00:00:00Z");
    171                 } else {
    172                     wpt.attr.put("time", DateUtils.fromDate(tstamp));
    173                 }
    174                 wpt.setTime();
    175 
    176                 trkseg.add(wpt);
    177             }
    178         }
    179 
    180         // add nodes as waypoints
    181         for (Node n : dataSet.getNodes()) {
    182             if (n.isIncomplete() || n.isDeleted() || doneNodes.contains(n)) continue;
    183 
    184             Date tstamp = n.getTimestamp();
    185 
    186             WayPoint wpt = new WayPoint(n.getCoor());
    187             if (anonTime) {
    188                 wpt.attr.put("time", "1970-01-01T00:00:00Z");
    189             } else {
    190                 wpt.attr.put("time", DateUtils.fromDate(tstamp));
    191             }
    192             wpt.setTime();
    193 
    194             if (n.getKeys() != null && n.keySet().contains("name")) {
    195                 wpt.attr.put("name", n.get("name"));
    196             }
    197             gpxData.waypoints.add(wpt);
    198         }
    199         return gpxData;
    200     }
    201 
    202     //context item "Convert to GPX layer"
    203     public class ConvertToGpxLayerAction extends AbstractAction {
    204         public ConvertToGpxLayerAction() {
    205             super(tr("Convert to GPX layer"), ImageProvider.get("converttogpx"));
    206         }
    207         public void actionPerformed(ActionEvent e) {
    208             Main.main.addLayer(new GpxLayer(toGpxData(false), tr("Converted from: {0}", getName())));
    209             Main.main.removeLayer(EditGpxLayer.this);
    210         }
    211     }
    212 
    213     //context item "Convert to GPX layer with anonymised time"
    214     public class ConvertToAnonTimeGpxLayerAction extends AbstractAction {
    215         public ConvertToAnonTimeGpxLayerAction() {
    216             super(tr("Convert to GPX layer with anonymised time"), ImageProvider.get("converttogpx"));
    217         }
    218         public void actionPerformed(ActionEvent e) {
    219             Main.main.addLayer(new GpxLayer(toGpxData(true), tr("Converted from: {0}", getName())));
    220             Main.main.removeLayer(EditGpxLayer.this);
    221         }
    222     }
     49        private static Icon icon = new ImageIcon(Toolkit.getDefaultToolkit().createImage(EditGpxPlugin.class.getResource("/images/editgpx_layer.png")));
     50        private DataSet dataSet;
     51        private GPXLayerImportAction layerImport;
     52
     53        public EditGpxLayer(String str, DataSet ds) {
     54                super(str);
     55                dataSet = ds;
     56                layerImport = new GPXLayerImportAction(dataSet);
     57        }
     58
     59        /**
     60         * check if dataSet is empty
     61         * if so show import dialog to user
     62         */
     63        public void initializeImport() {
     64                try {
     65                        if(dataSet.getNodes().isEmpty() ) {
     66                                layerImport.activateImport();
     67                        }
     68                } catch (Exception e) {
     69                        System.out.println(e.getMessage());
     70                        e.printStackTrace();
     71                }
     72        }
     73
     74        @Override
     75        public Icon getIcon() {
     76                return icon;
     77        }
     78
     79        @Override
     80        public Object getInfoComponent() {
     81                return getToolTipText();
     82        }
     83
     84        @Override
     85        public Component[] getMenuEntries() {
     86                return new Component[] {
     87                                new JMenuItem(LayerListDialog.getInstance().createShowHideLayerAction(this)),
     88                                new JMenuItem(LayerListDialog.getInstance().createDeleteLayerAction(this)),
     89                                new JSeparator(),
     90                                new JMenuItem(layerImport),
     91                                new JMenuItem(new ConvertToGpxLayerAction()),
     92                                new JMenuItem(new ConvertToAnonTimeGpxLayerAction()),
     93                                new JSeparator(),
     94                                new JMenuItem(new LayerListPopup.InfoAction(this))};
     95        }
     96
     97        @Override
     98        public String getToolTipText() {
     99                return tr("Layer for editing GPX tracks");
     100        }
     101
     102        @Override
     103        public boolean isMergable(Layer other) {
     104                // TODO
     105                return false;
     106        }
     107
     108        @Override
     109        public void mergeFrom(Layer from) {
     110                // TODO
     111        }
     112
     113        @Override
     114        public void paint(Graphics2D g, MapView mv, Bounds bounds) {
     115                g.setColor(Color.yellow);
     116
     117                //don't iterate through dataSet whiling making changes
     118                synchronized(layerImport.importing) {
     119                        for(Node n: dataSet.getNodes()) {
     120                                if (!n.isDeleted()) {
     121                                        Point pnt = Main.map.mapView.getPoint(n.getEastNorth());
     122                                        g.drawOval(pnt.x - 2, pnt.y - 2, 4, 4);
     123                                }
     124                        }
     125                }
     126        }
     127
     128
     129        public void reset(){
     130                //TODO implement a reset
     131        }
     132
     133
     134        @Override
     135        public void visitBoundingBox(BoundingXYVisitor v) {
     136                // TODO Auto-generated method stub
     137        }
     138
     139
     140        /**
     141         * convert a DataSet to GPX
     142         *
     143         * @param boolean anonTime If true set all time and date in GPX to 01/01/1970 00:00 ?
     144         * @return GPXData
     145         */
     146        private GpxData toGpxData(boolean anonTime) {
     147                GpxData gpxData = new GpxData();
     148                HashSet<Node> doneNodes = new HashSet<Node>();
     149                //add all ways
     150                for (Way w : dataSet.getWays()) {
     151                        if (w.isIncomplete() || w.isDeleted()) continue;
     152                        List<Collection<WayPoint>> segments = new ArrayList<Collection<WayPoint>>();
     153
     154                        List<WayPoint> trkseg = null;
     155                        for (Node n : w.getNodes()) {
     156                                if (n.isIncomplete() || n.isDeleted()) {
     157                                        trkseg = null;
     158                                        continue;
     159                                }
     160
     161                                Date tstamp = n.getTimestamp();
     162
     163                                if (trkseg == null) {
     164                                        trkseg = new ArrayList<WayPoint>();
     165                                        segments.add(trkseg);
     166                                }
     167                                doneNodes.add(n);
     168
     169                                WayPoint wpt = new WayPoint(n.getCoor());
     170                                if (anonTime) {
     171                                        wpt.attr.put("time", "1970-01-01T00:00:00Z");
     172                                } else {
     173                                        wpt.attr.put("time", DateUtils.fromDate(tstamp));
     174                                }
     175                                wpt.setTime();
     176
     177                                trkseg.add(wpt);
     178                        }
     179
     180                        // Do not create empty segments
     181                        for (Iterator<Collection<WayPoint>>  segIt = segments.iterator(); segIt.hasNext(); ) {
     182                                if (segIt.next().isEmpty()) {
     183                                        segIt.remove();
     184                                }
     185                        }
     186
     187                        Map<String, Object> trkAttributes = new HashMap<String, Object>();
     188                        if (w.get("name") != null) {
     189                                trkAttributes.put("name", w.get("name"));
     190                        }
     191                        if (!segments.isEmpty()) {
     192                                gpxData.tracks.add(new ImmutableGpxTrack(segments, trkAttributes));
     193                        }
     194
     195                }
     196
     197                // add nodes as waypoints
     198                for (Node n : dataSet.getNodes()) {
     199                        if (n.isIncomplete() || n.isDeleted() || doneNodes.contains(n)) continue;
     200
     201                        Date tstamp = n.getTimestamp();
     202
     203                        WayPoint wpt = new WayPoint(n.getCoor());
     204                        if (anonTime) {
     205                                wpt.attr.put("time", "1970-01-01T00:00:00Z");
     206                        } else {
     207                                wpt.attr.put("time", DateUtils.fromDate(tstamp));
     208                        }
     209                        wpt.setTime();
     210
     211                        if (n.getKeys() != null && n.keySet().contains("name")) {
     212                                wpt.attr.put("name", n.get("name"));
     213                        }
     214                        gpxData.waypoints.add(wpt);
     215                }
     216                return gpxData;
     217        }
     218
     219        //context item "Convert to GPX layer"
     220        public class ConvertToGpxLayerAction extends AbstractAction {
     221                public ConvertToGpxLayerAction() {
     222                        super(tr("Convert to GPX layer"), ImageProvider.get("converttogpx"));
     223                }
     224                public void actionPerformed(ActionEvent e) {
     225                        Main.main.addLayer(new GpxLayer(toGpxData(false), tr("Converted from: {0}", getName())));
     226                        Main.main.removeLayer(EditGpxLayer.this);
     227                }
     228        }
     229
     230        //context item "Convert to GPX layer with anonymised time"
     231        public class ConvertToAnonTimeGpxLayerAction extends AbstractAction {
     232                public ConvertToAnonTimeGpxLayerAction() {
     233                        super(tr("Convert to GPX layer with anonymised time"), ImageProvider.get("converttogpx"));
     234                }
     235                public void actionPerformed(ActionEvent e) {
     236                        Main.main.addLayer(new GpxLayer(toGpxData(true), tr("Converted from: {0}", getName())));
     237                        Main.main.removeLayer(EditGpxLayer.this);
     238                }
     239        }
    223240}
  • applications/editors/josm/plugins/editgpx/src/org/openstreetmap/josm/plugins/editgpx/EditGpxMode.java

    r18426 r19683  
    99import java.awt.Point;
    1010import java.awt.Rectangle;
     11import java.awt.event.InputEvent;
    1112import java.awt.event.MouseEvent;
    1213
     
    5152
    5253    @Override public void mouseDragged(MouseEvent e) {
    53         if ( (e.getModifiersEx() & MouseEvent.BUTTON1_DOWN_MASK) ==  MouseEvent.BUTTON1_DOWN_MASK) {
     54        if ( (e.getModifiersEx() & InputEvent.BUTTON1_DOWN_MASK) ==  InputEvent.BUTTON1_DOWN_MASK) {
    5455            //if button1 is hold, draw the rectangle.
    5556            paintRect(pointPressed, e.getPoint());
  • applications/editors/josm/plugins/editgpx/src/org/openstreetmap/josm/plugins/editgpx/GPXLayerImportAction.java

    r18426 r19683  
    2626import org.openstreetmap.josm.Main;
    2727import org.openstreetmap.josm.data.gpx.GpxTrack;
     28import org.openstreetmap.josm.data.gpx.GpxTrackSegment;
    2829import org.openstreetmap.josm.data.gpx.WayPoint;
    2930import org.openstreetmap.josm.data.osm.DataSet;
     
    112113            synchronized(importing) {
    113114                for (GpxTrack trk : gpx.data.tracks) {
    114                     for (Collection<WayPoint> segment : trk.trackSegs) {
     115                    for (GpxTrackSegment segment : trk.getSegments()) {
    115116                        Way w = new Way();
    116                         for (WayPoint p : segment) {
     117                        for (WayPoint p : segment.getWayPoints()) {
    117118                            Node n = new Node(p.getCoor());
    118119                            String timestr = p.getString("time");
Note: See TracChangeset for help on using the changeset viewer.