]> gitweb.fperrin.net Git - GpsPrune.git/blob - tim/prune/undo/UndoDeleteRange.java
e2a76995ebb478ec868c9e4a8c68b8a9d4fcfed8
[GpsPrune.git] / tim / prune / undo / UndoDeleteRange.java
1 package tim.prune.undo;\r
2 \r
3 import tim.prune.I18nManager;\r
4 import tim.prune.data.DataPoint;\r
5 import tim.prune.data.PhotoList;\r
6 import tim.prune.data.TrackInfo;\r
7 \r
8 /**\r
9  * Operation to undo a delete of a range of points\r
10  */\r
11 public class UndoDeleteRange implements UndoOperation\r
12 {\r
13         private int _startIndex = -1;\r
14         private DataPoint[] _points = null;\r
15         private PhotoList _photoList = null;\r
16         private DataPoint _nextTrackPoint = null;\r
17         private boolean _segmentStart = false;\r
18 \r
19 \r
20         /**\r
21          * Constructor\r
22          * @param inTrackInfo track info object\r
23          */\r
24         public UndoDeleteRange(TrackInfo inTrackInfo)\r
25         {\r
26                 _startIndex = inTrackInfo.getSelection().getStart();\r
27                 _points = inTrackInfo.cloneSelectedRange();\r
28                 _photoList = inTrackInfo.getPhotoList().cloneList();\r
29                 // Save segment flag of following track point\r
30                 _nextTrackPoint = inTrackInfo.getTrack().getNextTrackPoint(_startIndex + _points.length);\r
31                 if (_nextTrackPoint != null) {\r
32                         _segmentStart = _nextTrackPoint.getSegmentStart();\r
33                 }\r
34         }\r
35 \r
36 \r
37         /**\r
38          * @return description of operation including range length\r
39          */\r
40         public String getDescription()\r
41         {\r
42                 return I18nManager.getText("undo.deleterange")\r
43                         + " (" + _points.length + ")";\r
44         }\r
45 \r
46 \r
47         /**\r
48          * Perform the undo operation on the given Track\r
49          * @param inTrackInfo TrackInfo object on which to perform the operation\r
50          */\r
51         public void performUndo(TrackInfo inTrackInfo)\r
52         {\r
53                 // restore photos to how they were before\r
54                 inTrackInfo.getPhotoList().restore(_photoList);\r
55                 // reconnect photos to points\r
56                 for (int i=0; i<_points.length; i++)\r
57                 {\r
58                         DataPoint point = _points[i];\r
59                         if (point != null && point.getPhoto() != null)\r
60                         {\r
61                                 point.getPhoto().setDataPoint(point);\r
62                         }\r
63                 }\r
64                 // restore point array into track\r
65                 inTrackInfo.getTrack().insertRange(_points, _startIndex);\r
66                 // Restore segment flag of following track point\r
67                 if (_nextTrackPoint != null) {\r
68                         _nextTrackPoint.setSegmentStart(_segmentStart);\r
69                 }\r
70         }\r
71 }