package tim.prune.undo;
import tim.prune.data.DataPoint;
import tim.prune.data.Track;
import tim.prune.data.TrackInfo;
/**
* Operation to undo the sewing together of track segments
*/
public class UndoSewSegments extends UndoReorder
{
/** All segment start flags need to be remembered as well */
private boolean[] _segmentStartFlags = null;
/**
* Constructor
* @param inTrack track contents to copy
*/
public UndoSewSegments(Track inTrack)
{
super(inTrack, "undo.sewsegments");
// Also remember segment start flags, as they may have been changed by reversals
final int numPoints = inTrack.getNumPoints();
_segmentStartFlags = new boolean[numPoints];
for (int i=0; i<numPoints; i++) {
_segmentStartFlags[i] = inTrack.getPoint(i).getSegmentStart();
}
}
/** Perform the undo */
public void performUndo(TrackInfo inTrackInfo) throws UndoException
{
// Put all the points back in the right order
super.performUndo(inTrackInfo);
// And then restore the segment flags
for (int i=0; i<_segmentStartFlags.length; i++)
{
DataPoint point = inTrackInfo.getTrack().getPoint(i);
if (point != null && !point.isWaypoint()) {
point.setSegmentStart(_segmentStartFlags[i]);
}
}
}
}