package tim.prune.undo; import tim.prune.I18nManager; import tim.prune.data.DataPoint; import tim.prune.data.Track; import tim.prune.data.TrackInfo; /** * Operation to undo the deletion of marked points */ public class UndoDeleteMarked implements UndoOperation { private DataPoint[] _contents = null; protected int _numPointsDeleted = -1; private boolean[] _segmentStarts = null; /** * Constructor * @param inTrack track contents to copy */ public UndoDeleteMarked(Track inTrack) { _contents = inTrack.cloneContents(); // Copy boolean segment start flags _segmentStarts = new boolean[inTrack.getNumPoints()]; for (int i=0; i 0) desc = desc + " (" + _numPointsDeleted + ")"; return desc; } /** * Perform the undo operation on the given Track * @param inTrackInfo TrackInfo object on which to perform the operation */ public void performUndo(TrackInfo inTrackInfo) throws UndoException { // restore track to previous values inTrackInfo.getTrack().replaceContents(_contents); // Copy boolean segment start flags Track track = inTrackInfo.getTrack(); if (_segmentStarts.length != track.getNumPoints()) throw new UndoException("Cannot undo delete - track length no longer matches"); for (int i=0; i<_segmentStarts.length; i++) { track.getPoint(i).setSegmentStart(_segmentStarts[i]); } // clear selection inTrackInfo.getSelection().clearAll(); } }