X-Git-Url: https://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=tim%2Fprune%2Fundo%2FUndoDeleteRange.java;h=ba2b31ab5ef89540b8496be4e8908f0a9855ae7e;hp=e2a76995ebb478ec868c9e4a8c68b8a9d4fcfed8;hb=4d5796d02a15808311c09448d79e6e7d1de9d636;hpb=f1b92378a792131ac8fb33a869405851d5b2d1f7 diff --git a/tim/prune/undo/UndoDeleteRange.java b/tim/prune/undo/UndoDeleteRange.java index e2a7699..ba2b31a 100644 --- a/tim/prune/undo/UndoDeleteRange.java +++ b/tim/prune/undo/UndoDeleteRange.java @@ -1,6 +1,7 @@ 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; @@ -10,37 +11,116 @@ import tim.prune.data.TrackInfo; */ public class UndoDeleteRange implements UndoOperation { - private int _startIndex = -1; - private DataPoint[] _points = null; + /** + * Inner class to hold a single range information set + */ + 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; + } + } + + + // Instance variables for UndoDeleteRange + private RangeInfo _rangeInfo1 = null; + private RangeInfo _rangeInfo2 = null; private PhotoList _photoList = null; - private DataPoint _nextTrackPoint = null; - private boolean _segmentStart = false; + 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) + public UndoDeleteRange(TrackInfo inTrackInfo, String inNameKey, + int inStartIndex1, boolean[] inDeleteMedias1, + int inStartIndex2, boolean[] inDeleteMedias2) { - _startIndex = inTrackInfo.getSelection().getStart(); - _points = inTrackInfo.cloneSelectedRange(); - _photoList = inTrackInfo.getPhotoList().cloneList(); - // Save segment flag of following track point - _nextTrackPoint = inTrackInfo.getTrack().getNextTrackPoint(_startIndex + _points.length); - if (_nextTrackPoint != null) { - _segmentStart = _nextTrackPoint.getSegmentStart(); + _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