]> gitweb.fperrin.net Git - GpsPrune.git/blob - tim/prune/undo/UndoSewSegments.java
Version 16, February 2014
[GpsPrune.git] / tim / prune / undo / UndoSewSegments.java
1 package tim.prune.undo;\r
2 \r
3 import tim.prune.data.DataPoint;\r
4 import tim.prune.data.Track;\r
5 import tim.prune.data.TrackInfo;\r
6 \r
7 /**\r
8  * Operation to undo the sewing together of track segments\r
9  */\r
10 public class UndoSewSegments extends UndoReorder\r
11 {\r
12         /** All segment start flags need to be remembered as well */\r
13         private boolean[] _segmentStartFlags = null;\r
14 \r
15         /**\r
16          * Constructor\r
17          * @param inTrack track contents to copy\r
18          */\r
19         public UndoSewSegments(Track inTrack)\r
20         {\r
21                 super(inTrack, "undo.sewsegments");\r
22                 // Also remember segment start flags, as they may have been changed by reversals\r
23                 final int numPoints = inTrack.getNumPoints();\r
24                 _segmentStartFlags = new boolean[numPoints];\r
25                 for (int i=0; i<numPoints; i++) {\r
26                         _segmentStartFlags[i] = inTrack.getPoint(i).getSegmentStart();\r
27                 }\r
28         }\r
29 \r
30         /** Perform the undo */\r
31         public void performUndo(TrackInfo inTrackInfo) throws UndoException\r
32         {\r
33                 // Put all the points back in the right order\r
34                 super.performUndo(inTrackInfo);\r
35                 // And then restore the segment flags\r
36                 for (int i=0; i<_segmentStartFlags.length; i++)\r
37                 {\r
38                         DataPoint point = inTrackInfo.getTrack().getPoint(i);\r
39                         if (point != null && !point.isWaypoint()) {\r
40                                 point.setSegmentStart(_segmentStartFlags[i]);\r
41                         }\r
42                 }\r
43         }\r
44 }\r