Changeset 32 in josm for src


Ignore:
Timestamp:
2005-12-19T22:58:10+01:00 (19 years ago)
Author:
imi
Message:
  • Fixed bugs in reading/writing
  • Added correct extension filter to load/save
  • Delete now moves to deleted. modified flag reintroduced
Location:
src/org/openstreetmap/josm
Files:
1 added
14 edited

Legend:

Unmodified
Added
Removed
  • src/org/openstreetmap/josm/actions/OpenAction.java

    r30 r32  
    1717import javax.swing.JPanel;
    1818import javax.swing.KeyStroke;
    19 import javax.swing.filechooser.FileFilter;
    2019
    2120import org.jdom.JDOMException;
     
    4948        public void actionPerformed(ActionEvent e) {
    5049                JFileChooser fc = new JFileChooser("data");
    51                 fc.setFileFilter(new FileFilter(){
    52                         @Override
    53                         public boolean accept(File f) {
    54                                 String name = f.getName().toLowerCase();
    55                                 return f.isDirectory() || name.endsWith(".gpx") || name.endsWith(".xml");
    56                         }
    57                         @Override
    58                         public String getDescription() {
    59                                 return "GPX or XML Files";
    60                         }});
     50                for (int i = 0; i < ExtensionFileFilter.filters.length; ++i)
     51                        fc.addChoosableFileFilter(ExtensionFileFilter.filters[i]);
     52                fc.setAcceptAllFileFilterUsed(true);
    6153               
    6254                // additional options
  • src/org/openstreetmap/josm/actions/SaveAction.java

    r30 r32  
    1111import javax.swing.JOptionPane;
    1212import javax.swing.KeyStroke;
    13 import javax.swing.filechooser.FileFilter;
    1413
    1514import org.openstreetmap.josm.Main;
     
    3938                }
    4039                JFileChooser fc = new JFileChooser("data");
    41                 fc.setFileFilter(new FileFilter(){
    42                         @Override
    43                         public boolean accept(File f) {
    44                                 String name = f.getName().toLowerCase();
    45                                 return f.isDirectory() || name.endsWith(".xml") || name.endsWith(".gpx");
    46                         }
    47                         @Override
    48                         public String getDescription() {
    49                                 return "GPX or XML Files";
    50                         }
    51                 });
     40                for (int i = 0; i < ExtensionFileFilter.filters.length; ++i)
     41                        fc.addChoosableFileFilter(ExtensionFileFilter.filters[i]);
     42                fc.setAcceptAllFileFilterUsed(true);
    5243                fc.showSaveDialog(Main.main);
    5344                File file = fc.getSelectedFile();
  • src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java

    r31 r32  
    111111                for (OsmPrimitive osm : selection)
    112112                        deleteCommands.add(new DeleteCommand(Main.main.ds, osm));
    113                 mv.editLayer().add(new SequenceCommand(deleteCommands));
     113                if (!deleteCommands.isEmpty())
     114                        mv.editLayer().add(new SequenceCommand(deleteCommands));
    114115        }
    115116
     
    133134                                deleteCommands.add(new DeleteCommand(Main.main.ds, osm));
    134135                }
    135                 mv.editLayer().add(new SequenceCommand(deleteCommands));
     136                if (!deleteCommands.isEmpty())
     137                        mv.editLayer().add(new SequenceCommand(deleteCommands));
    136138        }
    137139}
  • src/org/openstreetmap/josm/command/ChangeKeyValueCommand.java

    r31 r32  
    3838         */
    3939        private List<Map<Key, String>> oldProperties;
     40       
     41        /**
     42         * These are the old modified states of the data.
     43         */
     44        private List<Boolean> oldModified = new LinkedList<Boolean>();
    4045
    4146        public ChangeKeyValueCommand(Collection<OsmPrimitive> objects, Key key, String value) {
     
    4853                // save old
    4954                oldProperties = new LinkedList<Map<Key, String>>();
    50                 for (OsmPrimitive osm : objects)
     55                for (OsmPrimitive osm : objects) {
    5156                        oldProperties.add(osm.keys == null ? null : new HashMap<Key, String>(osm.keys));
     57                        oldModified.add(osm.modified);
     58                }
    5259                       
    5360                if (value == null) {
     
    7077        public void undoCommand() {
    7178                Iterator<Map<Key, String>> it = oldProperties.iterator();
    72                 for (OsmPrimitive osm : objects)
     79                Iterator<Boolean> itMod = oldModified.iterator();
     80                for (OsmPrimitive osm : objects) {
    7381                        osm.keys = it.next();
     82                        osm.modified = itMod.next();
     83                }
    7484        }
    7585
  • src/org/openstreetmap/josm/command/MoveCommand.java

    r31 r32  
    11package org.openstreetmap.josm.command;
    22
    3 import java.awt.geom.Point2D;
    43import java.util.Collection;
    54import java.util.Iterator;
     
    3332
    3433        /**
    35          * x/y List of all old positions of the objects.
     34         * Small helper for holding the interesting part of the old data state of the
     35         * objects.
     36         * @author imi
    3637         */
    37         private List<Point2D.Double> oldPositions = new LinkedList<Point2D.Double>();
     38        class OldState
     39        {
     40                double x,y;
     41                boolean modified;
     42        }
     43        /**
     44         * List of all old states of the objects.
     45         */
     46        private List<OldState> oldState = new LinkedList<OldState>();
    3847
    3948        /**
     
    4453                this.y = y;
    4554                this.objects = getAffectedNodes(objects);
    46                 for (Node n : this.objects)
    47                         oldPositions.add(new Point2D.Double(n.coor.x, n.coor.y));
     55                for (Node n : this.objects) {
     56                        OldState os = new OldState();
     57                        os.x = n.coor.x;
     58                        os.y = n.coor.y;
     59                        os.modified = n.modified;
     60                        oldState.add(os);
     61                }
    4862        }
    4963
     
    8094                        n.coor.x += x;
    8195                        n.coor.y += y;
     96                        n.modified = true;
    8297                }
    8398        }
    8499
    85100        public void undoCommand() {
    86                 Iterator<Point2D.Double> it = oldPositions.iterator();
     101                Iterator<OldState> it = oldState.iterator();
    87102                for (Node n : objects) {
    88                         Point2D.Double p = it.next();
    89                         n.coor.x = p.x;
    90                         n.coor.y = p.y;
     103                        OldState os = it.next();
     104                        n.coor.x = os.x;
     105                        n.coor.y = os.y;
     106                        n.modified = os.modified;
    91107                }
    92108        }
  • src/org/openstreetmap/josm/data/osm/DataSet.java

    r30 r32  
    4242         */
    4343        public Collection<Track> tracks = new LinkedList<Track>();
     44
     45        /**
     46         * All deleted objects goes here.
     47         */
     48        public Collection<OsmPrimitive> deleted = new LinkedList<OsmPrimitive>();
    4449
    4550        /**
  • src/org/openstreetmap/josm/data/osm/OsmPrimitive.java

    r31 r32  
    3232        public long id = 0;
    3333
     34        /**
     35         * <code>true</code>, if the object has been modified since it was loaded from
     36         * the server. In this case, on next upload, this object will be updated. Deleted
     37         * objects are deleted from the server, even if they are modified. If the objects
     38         * are added (id=0), the modified is ignored and the object is added to the server.
     39         */
     40        public boolean modified = false;
     41       
    3442        /**
    3543         * If set to true, this object is currently selected.
  • src/org/openstreetmap/josm/data/osm/visitor/AddVisitor.java

    r31 r32  
    2626        public void visit(Node n) {
    2727                ds.nodes.add(n);
     28                ds.deleted.remove(n); // remove if there.
    2829        }
    2930        public void visit(LineSegment ls) {
    3031                ds.lineSegments.add(ls);
     32                ds.deleted.remove(ls); // remove if there.
    3133        }
    3234        public void visit(Track t) {
    3335                ds.tracks.add(t);
     36                ds.deleted.remove(t); // remove if there.
    3437        }
    3538        public void visit(Key k) {}
  • src/org/openstreetmap/josm/data/osm/visitor/DeleteVisitor.java

    r31 r32  
    2525       
    2626        public void visit(Node n) {
    27                 ds.nodes.remove(n);
     27                if (ds.nodes.remove(n))
     28                        ds.deleted.add(n);
    2829        }
    2930        public void visit(LineSegment ls) {
    30                 ds.lineSegments.remove(ls);
     31                if (ds.lineSegments.remove(ls))
     32                        ds.deleted.add(ls);
    3133        }
    3234        public void visit(Track t) {
    33                 ds.tracks.remove(t);
     35                if (ds.tracks.remove(t))
     36                        ds.deleted.add(t);
    3437        }
    3538        public void visit(Key k) {}
  • src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java

    r31 r32  
    8282        @Override
    8383        public String getToolTipText() {
    84                 return data.nodes.size()+" nodes, "+data.tracks.size()+" streets.";
     84                return data.nodes.size()+" nodes, "+data.lineSegments.size()+" segments, "+data.tracks.size()+" streets.";
    8585        }
    8686
  • src/org/openstreetmap/josm/io/GpxReader.java

    r31 r32  
    9999                        addNode(data, parseWaypoint((Element)o));
    100100       
    101                 // read tracks
     101                // read tracks (and line segments)
    102102                for (Object trackElement : e.getChildren("trk", GPX))
    103103                        parseTrack((Element)trackElement, data);
     
    143143                                parseKeyValueTag(track, child);
    144144                }
    145                 if (realLineSegment && track.segments.size() == 1)
    146                         ds.lineSegments.add(track.segments.get(0));
    147                 else {
     145                ds.lineSegments.addAll(track.segments);
     146                if (!realLineSegment)
    148147                        ds.tracks.add(track);
    149                         ds.lineSegments.addAll(track.segments);
    150                 }
    151148        }
    152149       
  • src/org/openstreetmap/josm/io/GpxWriter.java

    r30 r32  
    8080                Element e = new Element("gpx", GPX);
    8181                e.setAttribute("version", "1.0");
    82                 e.setAttribute("creator", "JOSM Beta2");
     82                e.setAttribute("creator", "JOSM");
    8383                // for getting all unreferenced waypoints in the wpt-list
    84                 LinkedList<Node> nodes = new LinkedList<Node>(Main.main.ds.nodes);
     84                LinkedList<Node> unrefNodes = new LinkedList<Node>(Main.main.ds.nodes);
     85                // for getting all unreferenced line segments
     86                LinkedList<LineSegment> unrefLs = new LinkedList<LineSegment>(Main.main.ds.lineSegments);
    8587
    8688                // tracks
     
    101103                        for (LineSegment ls : t.segments) {
    102104                                tElem.getChildren().add(parseLineSegment(ls));
    103                                 nodes.remove(ls.start);
    104                                 nodes.remove(ls.end);
     105                                unrefNodes.remove(ls.start);
     106                                unrefNodes.remove(ls.end);
     107                                unrefLs.remove(ls);
    105108                        }
    106109
     
    109112               
    110113                // encode pending line segments as tracks
    111                 for (LineSegment ls : Main.main.ds.lineSegments) {
     114                for (LineSegment ls : unrefLs) {
    112115                        Element t = new Element("trk", GPX);
    113116                        t.getChildren().add(parseLineSegment(ls));
    114                         nodes.remove(ls.start);
    115                         nodes.remove(ls.end);
     117                        unrefNodes.remove(ls.start);
     118                        unrefNodes.remove(ls.end);
    116119                        Element ext = new Element("extensions", GPX);
    117120                        ext.getChildren().add(new Element("segment", OSM));
     
    121124
    122125                // waypoints (missing nodes)
    123                 for (Node n : nodes)
     126                for (Node n : unrefNodes)
    124127                        e.getChildren().add(parseWaypoint(n, "wpt"));
    125128
  • src/org/openstreetmap/josm/io/OsmReader.java

    r30 r32  
    120120                                if (data.lineSegments.contains(ls))
    121121                                        throw new JDOMException("Double segment definition "+ls.id);
    122                                 for (Track t : data.tracks)
    123                                         if (t.segments.contains(ls))
    124                                                 throw new JDOMException("Double segment definition "+ls.id);
    125122                                data.lineSegments.add(ls);
    126123                        } else if (child.getName().equals("track")) {
     
    176173                        long id = Long.parseLong(child.getAttributeValue("uid"));
    177174                        LineSegment ls = findLineSegment(data.lineSegments, id);
    178                         if (ls != null) {
    179                                 track.segments.add(ls);
    180                                 data.lineSegments.remove(ls);
    181                                 continue;
    182                         }
    183                         for (Track t : data.tracks) {
    184                                 ls = findLineSegment(t.segments, id);
    185                                 if (ls != null) {
    186                                         track.segments.add(ls);
    187                                         break;
    188                                 }
    189                         }
     175                        track.segments.add(ls);
    190176                }
    191177                return track;
     
    195181         * Search for a segment in a collection by comparing the id.
    196182         */
    197         private LineSegment findLineSegment(Collection<LineSegment> segments, long id) {
     183        private LineSegment findLineSegment(Collection<LineSegment> segments, long id) throws JDOMException {
    198184                for (LineSegment ls : segments)
    199185                        if (ls.id == id)
    200186                                return ls;
    201                 return null;
     187                throw new JDOMException("Unknown line segment reference: "+id);
    202188        }
    203189       
  • src/org/openstreetmap/josm/io/OsmWriter.java

    r30 r32  
    6363                        list.add(parseNode(n, properties));
    6464                for (LineSegment ls : ds.lineSegments)
    65                         list.add(parseLineSegment(ls, properties));
    66                 // all other line segments
    67                 Collection<LineSegment> lineSegments = new HashSet<LineSegment>();
    68                 for (Track t : ds.tracks)
    69                         lineSegments.addAll(t.segments);
    70                 for (LineSegment ls : lineSegments)
    7165                        list.add(parseLineSegment(ls, properties));
    7266                for (Track t : ds.tracks)
Note: See TracChangeset for help on using the changeset viewer.