Changeset 102 in josm for src


Ignore:
Timestamp:
2006-06-10T23:45:21+02:00 (18 years ago)
Author:
imi
Message:
  • added more timestamp formats to GeoImage - date import (all ISO formats)
  • changed insert node into segment mode to not move the new node out of line (except pressing Alt)
  • fixed bug in Merger, where two new (but unrelated) segments got merged
  • fixed NPE in MapMover when pressing Ctrl+- or Ctrl-- and mouse outside of JOSM
  • added "modified" as search criteria for searching after modified elements
Location:
src/org/openstreetmap/josm
Files:
2 added
8 edited

Legend:

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

    r101 r102  
    1717import org.openstreetmap.josm.command.Command;
    1818import org.openstreetmap.josm.command.SequenceCommand;
     19import org.openstreetmap.josm.data.coor.EastNorth;
    1920import org.openstreetmap.josm.data.osm.Node;
    2021import org.openstreetmap.josm.data.osm.Segment;
     
    8889                                return;
    8990
     91                        if ((e.getModifiersEx() & MouseEvent.ALT_DOWN_MASK) == 0) {
     92                                // moving the new point to the perpendicular point
     93                                EastNorth A = s.from.eastNorth;
     94                                EastNorth B = s.to.eastNorth;
     95                                double ab = A.distance(B);
     96                                double nb = n.eastNorth.distance(B);
     97                                double na = n.eastNorth.distance(A);
     98                                double q = (nb-na+ab)/ab/2;
     99                                n.eastNorth = new EastNorth(B.east() + q*(A.east()-B.east()), B.north() + q*(A.north()-B.north()));
     100                                n.coor = Main.proj.eastNorth2latlon(n.eastNorth);
     101                        }
     102                       
    90103                        Collection<Command> cmds = new LinkedList<Command>();
    91104                        cmds.add(c);
  • src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java

    r100 r102  
    238238         */
    239239        private boolean match(Segment ls1, Segment ls2) {
    240                 if (ls1.id == ls2.id)
     240                if (ls1.id == ls2.id && ls1.id != 0)
    241241                        return true;
    242242                if (ls1.incomplete || ls2.incomplete)
     
    294294                        if (my.realEqual(other))
    295295                                return true; // no merge needed.
    296                         if (my.id == other.id) {
     296                        if (my.id == other.id && my.id != 0) {
    297297                                if (my instanceof Segment && ((Segment)my).incomplete)
    298298                                        return false; // merge always over an incomplete
  • src/org/openstreetmap/josm/gui/ConflictResolver.java

    r86 r102  
    120120        }
    121121
    122         public final List<ConflictItem> conflicts;
     122        public final List<ConflictItem> conflicts = new ArrayList<ConflictItem>();
    123123
    124124        private final ConflictTableModel my = new ConflictTableModel(Resolution.MY);
    125         private final JTable myTable = new JTable(my);
     125        private final JTable myTable;
    126126        private final ConflictTableModel their = new ConflictTableModel(Resolution.THEIR);
    127         private final JTable theirTable = new JTable(their);
     127        private final JTable theirTable;
    128128        private final ConflictTableModel resolve = new ConflictTableModel(null);
    129         private final JTable resolveTable = new JTable(resolve);
     129        private final JTable resolveTable;
    130130
    131131       
    132132        public ConflictResolver(Map<OsmPrimitive, OsmPrimitive> conflicts) {
    133133                super(new GridBagLayout());
    134                 this.conflicts = new ArrayList<ConflictItem>();
    135134                Collection<ConflictItem> possibleConflicts = new ArrayList<ConflictItem>();
    136135                possibleConflicts.add(new DeleteConflict());
     
    161160                        throw new RuntimeException("No conflicts but in conflict list:\n" + Arrays.toString(conflicts.entrySet().toArray()));
    162161
     162                // have to initialize the JTables here and not in the declaration, because its constructor
     163                // may access this.conflicts (indirectly)
     164                myTable = new JTable(my);
     165                theirTable = new JTable(their);
     166                resolveTable = new JTable(resolve);
     167               
    163168                myTable.setPreferredScrollableViewportSize(new Dimension(250,70));
    164169                theirTable.setPreferredScrollableViewportSize(new Dimension(250,70));
  • src/org/openstreetmap/josm/gui/MapMover.java

    r101 r102  
    22
    33import java.awt.Cursor;
     4import java.awt.Point;
    45import java.awt.event.ActionEvent;
    56import java.awt.event.KeyEvent;
     
    3233            public void actionPerformed(ActionEvent e) {
    3334                if (action.equals("+") || action.equals("-")) {
    34                         MouseWheelEvent we = new MouseWheelEvent(nc, e.getID(), e.getWhen(), e.getModifiers(), nc.getMousePosition().x, nc.getMousePosition().y, 0, false, MouseWheelEvent.WHEEL_UNIT_SCROLL, 1, action.equals("+") ? -1 : 1);
     35                        Point mouse = nc.getMousePosition();
     36                        if (mouse == null)
     37                                mouse = new Point((int)nc.getBounds().getCenterX(), (int)nc.getBounds().getCenterY());
     38                        MouseWheelEvent we = new MouseWheelEvent(nc, e.getID(), e.getWhen(), e.getModifiers(), mouse.x, mouse.y, 0, false, MouseWheelEvent.WHEEL_UNIT_SCROLL, 1, action.equals("+") ? -1 : 1);
    3539                        mouseWheelMoved(we);
    3640                } else {
  • src/org/openstreetmap/josm/gui/layer/GeoImageLayer.java

    r101 r102  
    5353import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
    5454import org.openstreetmap.josm.gui.layer.RawGpsLayer.GpsPoint;
     55import org.openstreetmap.josm.tools.DateParser;
    5556import org.openstreetmap.josm.tools.ExifReader;
    5657import org.openstreetmap.josm.tools.GBC;
     
    9798                                                if (!m.matches())
    9899                                                        throw new IOException("Cannot read time from point "+p.latlon.lat()+","+p.latlon.lon());
    99                                                 Date d = dateFormat.parse(m.group(1)+" "+m.group(2));
     100                                                Date d = DateParser.parse(m.group(1)+" "+m.group(2));
    100101                                                gps.add(new TimedPoint(d, p.eastNorth));
    101102                                                if (last != null && last.after(d))
     
    381382                                return;
    382383                        try {
    383                                 delta = dateFormat.parse(gpsText.getText()).getTime() - exifDate.getTime();
     384                                delta = DateParser.parse(gpsText.getText()).getTime() - exifDate.getTime();
    384385                                Main.pref.put("tagimages.delta", ""+delta);
    385386                                String time = gpsTimezone.getText();
  • src/org/openstreetmap/josm/gui/layer/RawGpsLayer.java

    r100 r102  
    1010import java.util.LinkedList;
    1111
     12import javax.swing.AbstractAction;
    1213import javax.swing.Icon;
    1314import javax.swing.JColorChooser;
     
    2324import org.openstreetmap.josm.data.coor.EastNorth;
    2425import org.openstreetmap.josm.data.coor.LatLon;
     26import org.openstreetmap.josm.data.osm.DataSet;
     27import org.openstreetmap.josm.data.osm.Node;
     28import org.openstreetmap.josm.data.osm.Segment;
     29import org.openstreetmap.josm.data.osm.Way;
    2530import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
    2631import org.openstreetmap.josm.gui.MapView;
     
    3641 */
    3742public class RawGpsLayer extends Layer implements PreferenceChangedListener {
     43
     44        public class ConvertToOsmAction extends AbstractAction {
     45                public ConvertToOsmAction() {
     46                        super("Convert layer to OSM");
     47        }
     48                public void actionPerformed(ActionEvent e) {
     49                        DataSet ds = new DataSet();
     50                        for (Collection<GpsPoint> c : data) {
     51                                Way w = new Way();
     52                                Node start = null;
     53                                for (GpsPoint p : c) {
     54                                        Node end = new Node(p.latlon);
     55                                        ds.nodes.add(end);
     56                                        if (start != null) {
     57                                                Segment segment = new Segment(start,end);
     58                                                w.segments.add(segment);
     59                                                ds.segments.add(segment);
     60                                        }
     61                                        start = end;
     62                                }
     63                                ds.ways.add(w);
     64                        }
     65                        Main.main.addLayer(new OsmDataLayer(ds, "Data Layer", true));
     66                        Main.main.removeLayer(RawGpsLayer.this);
     67        }
     68    }
    3869
    3970        public static class GpsPoint {
     
    184215                menu.add(tagimage);
    185216               
     217                menu.add(new JMenuItem(new ConvertToOsmAction()));
     218               
    186219                menu.addSeparator();
    187220                menu.add(new LayerListPopup.InfoAction(this));
  • src/org/openstreetmap/josm/test/MergeVisitorTest.java

    r100 r102  
    4848                n.modified = true;
    4949                dsNode.modified = true;
    50                 v.visit(n);
    51                 assertEquals(1, v.conflicts.size());
    52                 assertFalse(n.equals(dsNode));
     50                n.id = 1;
     51                dsNode.id = 1;
     52                v.visit(n);
     53                assertEquals(1, v.conflicts.size());
    5354        }
    5455        public void testNodesConflict() {
     
    9192        }
    9293
     94        public void testNoConflictNewNodesMerged() {
     95                assertEquals(0, n.id);
     96                assertEquals(0, dsNode.id);
     97                v.visit(n);
     98                v.fixReferences();
     99                assertEquals(0,v.conflicts.size());
     100                assertTrue(ds.nodes.contains(n));
     101                assertEquals(2, ds.nodes.size());
     102        }
     103
     104        /**
     105         * Test that two new segments that have different from/to are not merged
     106         */
     107        @Bug(101)
     108        public void testNewSegmentNotMerged() {
     109                v.visit(n);
     110                Segment s1 = new Segment(n, dsNode);
     111                v.visit(s1);
     112                Segment s2 = new Segment(dsNode, n);
     113                v.visit(s2);
     114                assertEquals(2, ds.segments.size());
     115        }
     116       
    93117        public void testFixReferencesConflicts() {
    94118                // make two nodes mergable
     
    198222                assertSame("Do not import incomplete segments when merging ways.", s, w.segments.iterator().next());
    199223        }
    200        
     224               
    201225        /**
    202226         * Create that amount of nodes and add them to the dataset. The id will be 1,2,3,4...
  • src/org/openstreetmap/josm/tools/SearchCompiler.java

    r90 r102  
    2020                abstract public boolean match(OsmPrimitive osm);
    2121        }
    22        
     22
    2323        private static class Always extends Match {
    2424                @Override public boolean match(OsmPrimitive osm) {
     
    3535                @Override public String toString() {return "!"+match;}
    3636        }
    37        
     37
    3838        private static class And extends Match {
    3939                private Match lhs;
     
    4545                @Override public String toString() {return lhs+" && "+rhs;}
    4646        }
    47        
     47
    4848        private static class Or extends Match {
    4949                private Match lhs;
     
    5555                @Override public String toString() {return lhs+" || "+rhs;}
    5656        }
    57        
     57
    5858        private static class Id extends Match {
    5959                private long id;
     
    6464                @Override public String toString() {return "id="+id;}
    6565        }
    66        
     66
    6767        private static class KeyValue extends Match {
    6868                private String key;
     
    111111                @Override public String toString() {return "type="+type;}
    112112        }
    113 
    114113       
     114        private static class Modified extends Match {
     115                @Override public boolean match(OsmPrimitive osm) {
     116                        return osm.modified;
     117                }
     118                @Override public String toString() {return "modified";}
     119        }
     120
    115121        public static Match compile(String searchStr) {
    116122                return new SearchCompiler().parse(new PushbackReader(new StringReader(searchStr)));
     
    152158                        default:
    153159                                s = new StringBuilder();
    154                                 for (;;) {
    155                                         s.append(c);
    156                                         next = search.read();
    157                                         if (next == -1) {
    158                                                 if (s.toString().equals("OR"))
    159                                                         return "|";
    160                                                 return " "+s.toString();
    161                                         }
    162                                         c = (char)next;
    163                                         if (c == ' ' || c == '\t' || c == ':' || c == '"') {
    164                                                 if (c == ':')
    165                                                         return ":"+s.toString();
    166                                                 search.unread(next);
    167                                                 if (s.toString().equals("OR"))
    168                                                         return "|";
    169                                                 return " "+s.toString();
    170                                         }
     160                        for (;;) {
     161                                s.append(c);
     162                                next = search.read();
     163                                if (next == -1) {
     164                                        if (s.toString().equals("OR"))
     165                                                return "|";
     166                                        return " "+s.toString();
    171167                                }
     168                                c = (char)next;
     169                                if (c == ' ' || c == '\t' || c == ':' || c == '"') {
     170                                        if (c == ':')
     171                                                return ":"+s.toString();
     172                                        search.unread(next);
     173                                        if (s.toString().equals("OR"))
     174                                                return "|";
     175                                        return " "+s.toString();
     176                                }
     177                        }
    172178                        }
    173179                } catch (IOException e) {
     
    175181                }               
    176182        }
    177        
    178        
     183
     184
    179185        private boolean notKey = false;
    180186        private boolean notValue = false;
     
    185191                String value = token.substring(1);
    186192                if (key == null) {
    187                         Match c = new Any(value);
     193                        Match c = null;
     194                        if (value.equals("modified"))
     195                                c = new Modified();
     196                        else
     197                                c = new Any(value);
    188198                        if (notValue)
    189199                                return new Not(c);
     
    207217                return c;
    208218        }
    209        
     219
    210220        private Match parse(PushbackReader search) {
    211221                Match result = null;
     
    231241                                else
    232242                                        result = or ? new Or(result, current) : new And(result, current);
    233                                 key = null;
    234                                 notKey = false;
    235                                 notValue = false;
    236                                 or = false;
     243                                        key = null;
     244                                        notKey = false;
     245                                        notValue = false;
     246                                        or = false;
    237247                        }
    238248                }
Note: See TracChangeset for help on using the changeset viewer.