Ignore:
Timestamp:
2005-10-03T04:18:02+02:00 (19 years ago)
Author:
imi
Message:
  • added Selection Dialog
  • added support for graphic engines with a better default engine
  • reorganized data classes with back references
File:
1 edited

Legend:

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

    r7 r8  
    55import java.util.ArrayList;
    66import java.util.HashMap;
    7 import java.util.Iterator;
     7import java.util.LinkedList;
    88import java.util.Map;
    99
     
    133133                if (osm instanceof Node) {
    134134                        // delete any track and line segment the node is in.
    135                         for (Track t : ds.tracks)
    136                                 for (LineSegment ls : t.segments)
    137                                         if (ls.start == osm || ls.end == osm)
     135                        for (Track t : ds.tracks())
     136                                for (LineSegment ls : t.segments())
     137                                        if (ls.getStart() == osm || ls.getEnd() == osm)
    138138                                                tracksToDelete.add(t);
    139                         for (LineSegment ls : ds.pendingLineSegments)
    140                                 if (ls.start == osm || ls.end == osm)
     139                        for (LineSegment ls : ds.pendingLineSegments())
     140                                if (ls.getStart() == osm || ls.getEnd() == osm)
    141141                                        lineSegmentsToDelete.add(ls);
    142142                               
     
    144144                        LineSegment lineSegment = (LineSegment)osm;
    145145                        lineSegmentsToDelete.add(lineSegment);
    146                         for (Track t : ds.tracks)
    147                                 for (LineSegment ls : t.segments)
     146                        for (Track t : ds.tracks())
     147                                for (LineSegment ls : t.segments())
    148148                                        if (lineSegment == ls)
    149149                                                tracksToDelete.add(t);
     
    154154                ArrayList<Node> checkUnreferencing = new ArrayList<Node>();
    155155                for (Track t : tracksToDelete) {
    156                         for (LineSegment ls : t.segments) {
    157                                 checkUnreferencing.add(ls.start);
    158                                 checkUnreferencing.add(ls.end);
     156                        for (LineSegment ls : t.segments()) {
     157                                checkUnreferencing.add(ls.getStart());
     158                                checkUnreferencing.add(ls.getEnd());
    159159                        }
    160160                }
    161161                for (LineSegment ls : lineSegmentsToDelete) {
    162                         checkUnreferencing.add(ls.start);
    163                         checkUnreferencing.add(ls.end);
     162                        checkUnreferencing.add(ls.getStart());
     163                        checkUnreferencing.add(ls.getEnd());
    164164                }
    165165               
    166166                // delete tracks and areas
    167                 ds.tracks.removeAll(tracksToDelete);
    168                 ds.pendingLineSegments.removeAll(lineSegmentsToDelete);
     167                for (Track t : tracksToDelete)
     168                        ds.removeTrack(t);
     169                for (LineSegment ls : lineSegmentsToDelete)
     170                        ds.destroyPendingLineSegment(ls);
    169171
    170172                // removing all unreferenced nodes
     
    198200                        ds.nodes.remove(n);
    199201                } else if (osm instanceof LineSegment) {
    200                         for (Iterator<Track> it = ds.tracks.iterator(); it.hasNext();) {
    201                                 Track t = it.next();
    202                                 t.segments.remove(osm);
    203                                 if (t.segments.isEmpty())
    204                                         it.remove();
    205                         }
    206                         ds.pendingLineSegments.remove(osm);
     202                        LinkedList<Track> tracksToDelete = new LinkedList<Track>();
     203                        for (Track t : ds.tracks()) {
     204                                t.remove((LineSegment)osm);
     205                                if (t.segments().isEmpty())
     206                                        tracksToDelete.add(t);
     207                        }
     208                        for (Track t : tracksToDelete)
     209                                ds.removeTrack(t);
     210                        ds.destroyPendingLineSegment((LineSegment)osm);
    207211                } else if (osm instanceof Track) {
    208                         ds.tracks.remove(osm);
    209                         ds.pendingLineSegments.addAll(((Track)osm).segments);
     212                        ds.removeTrack((Track)osm);
     213                        for (LineSegment ls : ((Track)osm).segments())
     214                                ds.addPendingLineSegment(ls);
    210215                }
    211216        }
     
    218223         */
    219224        private boolean isReferenced(Node n) {
    220                 for (Track t : ds.tracks)
    221                         for (LineSegment ls : t.segments)
    222                                 if (ls.start == n || ls.end == n)
     225                for (Track t : ds.tracks())
     226                        for (LineSegment ls : t.segments())
     227                                if (ls.getStart() == n || ls.getEnd() == n)
    223228                                        return true;
    224                 for (LineSegment ls : ds.pendingLineSegments)
    225                         if (ls.start == n || ls.end == n)
     229                for (LineSegment ls : ds.pendingLineSegments())
     230                        if (ls.getStart() == n || ls.getEnd() == n)
    226231                                return true;
    227232                // TODO areas
     
    240245        private String combine(Node n) {
    241246                // first, check for pending line segments
    242                 for (LineSegment ls : ds.pendingLineSegments)
    243                         if (n == ls.start || n == ls.end)
     247                for (LineSegment ls : ds.pendingLineSegments())
     248                        if (n == ls.getStart() || n == ls.getEnd())
    244249                                return "Node used by a line segment which is not part of any track. Remove this first.";
    245250               
     
    253258                HashMap<ArrayList<LineSegment>, Track> lineSegments = new HashMap<ArrayList<LineSegment>, Track>();
    254259               
    255                 for (Track t : ds.tracks) {
     260                for (Track t : ds.tracks()) {
    256261                        ArrayList<LineSegment> current = new ArrayList<LineSegment>();
    257                         for (LineSegment ls : t.segments)
    258                                 if (ls.start == n || ls.end == n)
     262                        for (LineSegment ls : t.segments())
     263                                if (ls.getStart() == n || ls.getEnd() == n)
    259264                                        current.add(ls);
    260265                        if (!current.isEmpty()) {
     
    262267                                        return "Node used by more than two line segments.";
    263268                                if (current.size() == 1 &&
    264                                                 (current.get(0) == t.segments.get(0) || current.get(0) == t.segments.get(t.segments.size()-1)))
     269                                                (current.get(0) == t.getStartingSegment() || current.get(0) == t.getEndingSegment()))
    265270                                        pendingLineSegmentsForTrack.add(current.get(0));
    266                                 else if (current.get(0).end != current.get(1).start &&
    267                                                 current.get(1).end != current.get(0).start)
     271                                else if (current.get(0).getEnd() != current.get(1).getStart() &&
     272                                                current.get(1).getEnd() != current.get(0).getStart())
    268273                                        return "Node used by line segments that points together.";
    269274                                else if (!current.get(0).keyPropertiesMergable(current.get(1)))
     
    276281                // try to combine tracks
    277282                ArrayList<Track> tracks = new ArrayList<Track>();
    278                 for (Track t : ds.tracks)
    279                         if (!t.segments.isEmpty() && (t.segments.get(0).start == n || t.segments.get(t.segments.size()-1).end == n))
     283                for (Track t : ds.tracks())
     284                        if (t.getStartingNode() == n || t.getEndingNode() == n)
    280285                                tracks.add(t);
    281286                if (!tracks.isEmpty()) {
     
    286291                        Track t1 = tracks.get(0);
    287292                        Track t2 = tracks.get(1);
    288                         if (t1.segments.get(0).start != t2.segments.get(t2.segments.size()-1).end &&
    289                                         t2.segments.get(0).start != t1.segments.get(t1.segments.size()-1).end) {
    290                                 if (t1.segments.get(0).start == t2.segments.get(t2.segments.size()-1).start ||
    291                                                 t1.segments.get(0).end == t2.segments.get(t2.segments.size()-1).end)
     293                        if (t1.getStartingNode() != t2.getEndingNode() &&
     294                                        t2.getStartingNode() != t1.getEndingNode()) {
     295                                if (t1.getStartingNode() == t2.getStartingNode() ||
     296                                                t1.getEndingNode() == t2.getEndingNode())
    292297                                        return "Node used by tracks that point together.";
    293298                                return "Node used by tracks that cannot be combined.";
     
    301306                        LineSegment l1 = pendingLineSegmentsForTrack.get(0);
    302307                        LineSegment l2 = pendingLineSegmentsForTrack.get(1);
    303                         if (l1.start == l2.start || l1.end == l2.end)
     308                        if (l1.getStart() == l2.getStart() || l1.getEnd() == l2.getEnd())
    304309                                return "Node used by line segments that points together.";
    305                         if (l1.start == l2.end || l2.start == l1.end)
     310                        if (l1.getStart() == l2.getEnd() || l2.getStart() == l1.getEnd())
    306311                                pendingLineSegmentsForTrack.clear(); // resolved.
    307312                }
     
    316321                        LineSegment first = list.get(0);
    317322                        LineSegment second = list.get(1);
    318                         if (first.start == second.end) {
     323                        if (first.getStart() == second.getEnd()) {
    319324                                first = second;
    320325                                second = list.get(0);
    321326                        }
    322                         first.end = second.end;
     327                        first.setEnd(second.getEnd());
    323328                        first.keys = mergeKeys(first.keys, second.keys);
    324                         lineSegments.get(list).segments.remove(second);
     329                        lineSegments.get(list).remove(second);
    325330                }
    326331               
     
    329334                        Track first = tracks.get(0);
    330335                        Track second = tracks.get(1);
    331                         if (first.segments.get(0).start == second.segments.get(second.segments.size()-1).end) {
     336                        if (first.getStartingNode() == second.getEndingNode()) {
    332337                                first = second;
    333338                                second = tracks.get(0);
    334339                        }
    335340                        // concatenate the line segments.
    336                         LineSegment lastOfFirst = first.segments.get(first.segments.size()-1);
    337                         LineSegment firstOfSecond = second.segments.get(0);
    338                         lastOfFirst.end = firstOfSecond.end;
     341                        LineSegment lastOfFirst = first.getEndingSegment();
     342                        LineSegment firstOfSecond = second.getStartingSegment();
     343                        lastOfFirst.setEnd(firstOfSecond.getEnd());
    339344                        lastOfFirst.keys = mergeKeys(lastOfFirst.keys, firstOfSecond.keys);
    340                         second.segments.remove(firstOfSecond);
     345                        second.remove(firstOfSecond);
    341346                        // move the remaining line segments to first track.
    342                         first.segments.addAll(second.segments);
    343                         ds.tracks.remove(second);
     347                        first.addAll(second.segments());
     348                        ds.removeTrack(second);
    344349                }
    345350               
Note: See TracChangeset for help on using the changeset viewer.