1 package tim.prune.undo;
\r
3 import tim.prune.data.DataPoint;
\r
4 import tim.prune.data.Track;
\r
5 import tim.prune.data.TrackInfo;
\r
8 * Operation to undo the sewing together of track segments
\r
10 public class UndoSewSegments extends UndoReorder
\r
12 /** All segment start flags need to be remembered as well */
\r
13 private boolean[] _segmentStartFlags = null;
\r
17 * @param inTrack track contents to copy
\r
19 public UndoSewSegments(Track inTrack)
\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
30 /** Perform the undo */
\r
31 public void performUndo(TrackInfo inTrackInfo) throws UndoException
\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
38 DataPoint point = inTrackInfo.getTrack().getPoint(i);
\r
39 if (point != null && !point.isWaypoint()) {
\r
40 point.setSegmentStart(_segmentStartFlags[i]);
\r