]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/undo/UndoDeleteRange.java
Version 5, May 2008
[GpsPrune.git] / tim / prune / undo / UndoDeleteRange.java
index 6bb0b7df08aebc795a9ded8de37871051f71940f..e2a76995ebb478ec868c9e4a8c68b8a9d4fcfed8 100644 (file)
@@ -2,6 +2,7 @@ package tim.prune.undo;
 \r
 import tim.prune.I18nManager;\r
 import tim.prune.data.DataPoint;\r
+import tim.prune.data.PhotoList;\r
 import tim.prune.data.TrackInfo;\r
 \r
 /**\r
@@ -11,17 +12,25 @@ public class UndoDeleteRange implements UndoOperation
 {\r
        private int _startIndex = -1;\r
        private DataPoint[] _points = null;\r
+       private PhotoList _photoList = null;\r
+       private DataPoint _nextTrackPoint = null;\r
+       private boolean _segmentStart = false;\r
 \r
 \r
        /**\r
         * Constructor\r
-        * @param inIndex index number of point within track\r
-        * @param inPoint data point\r
+        * @param inTrackInfo track info object\r
         */\r
        public UndoDeleteRange(TrackInfo inTrackInfo)\r
        {\r
                _startIndex = inTrackInfo.getSelection().getStart();\r
                _points = inTrackInfo.cloneSelectedRange();\r
+               _photoList = inTrackInfo.getPhotoList().cloneList();\r
+               // Save segment flag of following track point\r
+               _nextTrackPoint = inTrackInfo.getTrack().getNextTrackPoint(_startIndex + _points.length);\r
+               if (_nextTrackPoint != null) {\r
+                       _segmentStart = _nextTrackPoint.getSegmentStart();\r
+               }\r
        }\r
 \r
 \r
@@ -41,7 +50,22 @@ public class UndoDeleteRange implements UndoOperation
         */\r
        public void performUndo(TrackInfo inTrackInfo)\r
        {\r
+               // restore photos to how they were before\r
+               inTrackInfo.getPhotoList().restore(_photoList);\r
+               // reconnect photos to points\r
+               for (int i=0; i<_points.length; i++)\r
+               {\r
+                       DataPoint point = _points[i];\r
+                       if (point != null && point.getPhoto() != null)\r
+                       {\r
+                               point.getPhoto().setDataPoint(point);\r
+                       }\r
+               }\r
                // restore point array into track\r
                inTrackInfo.getTrack().insertRange(_points, _startIndex);\r
+               // Restore segment flag of following track point\r
+               if (_nextTrackPoint != null) {\r
+                       _nextTrackPoint.setSegmentStart(_segmentStart);\r
+               }\r
        }\r
 }
\ No newline at end of file