package tim.prune.undo; import tim.prune.I18nManager; import tim.prune.data.AudioList; import tim.prune.data.DataPoint; import tim.prune.data.PhotoList; import tim.prune.data.TrackInfo; /** * Operation to undo a delete of a range of points */ public class UndoDeleteRange extends UndoDeleteOperation { /** * Inner class to hold a single range information set */ static class RangeInfo { public int _startIndex = -1; public DataPoint[] _points = null; public DataPoint _nextTrackPoint = null; public boolean _segmentStart = false; /** * @param inPoint next track point after deleted section, or null */ public void setNextTrackPoint(DataPoint inPoint) { _nextTrackPoint = inPoint; if (inPoint != null) { _segmentStart = inPoint.getSegmentStart(); } } /** * @return true if the range is valid */ public boolean isValid() { return _startIndex >= 0 && _points != null && _points.length > 0; } /** * @return end index of range */ public int getEndIndex() { return _startIndex + _points.length - 1; } } // Instance variables for UndoDeleteRange private RangeInfo _rangeInfo1 = null; private RangeInfo _rangeInfo2 = null; private PhotoList _photoList = null; private AudioList _audioList = null; private String _nameKey = null; private int _totalDeleted = 0; /** * Constructor * @param inTrackInfo track info object * @param inNameKey key to use for undo text * @param inStartIndex1 start index of first deleted segment * @param inDeleteMedias1 flags to delete media for range1 * @param inStartIndex2 start index of second segment * @param inDeleteMedias2 flags to delete media for range2 */ public UndoDeleteRange(TrackInfo inTrackInfo, String inNameKey, int inStartIndex1, boolean[] inDeleteMedias1, int inStartIndex2, boolean[] inDeleteMedias2) { _nameKey = inNameKey; boolean mediaDeleted = false; _totalDeleted = 0; // Check if there's a valid first range if (inStartIndex1 >= 0 && inDeleteMedias1 != null) { final int numPoints = inDeleteMedias1.length; if (numPoints > 0) { _totalDeleted += numPoints; _rangeInfo1 = new RangeInfo(); _rangeInfo1._startIndex = inStartIndex1; for (int i=0; i= 0 && inDeleteMedias2 != null) { final int numPoints = inDeleteMedias2.length; if (numPoints > 0) { _totalDeleted += numPoints; _rangeInfo2 = new RangeInfo(); _rangeInfo2._startIndex = inStartIndex2; for (int i=0; i