X-Git-Url: http://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=src%2Ftim%2Fprune%2Fundo%2FUndoDeleteRange.java;fp=src%2Ftim%2Fprune%2Fundo%2FUndoDeleteRange.java;h=da42bc411c892c11814a8daedf135e8f3864aad5;hp=0000000000000000000000000000000000000000;hb=ce6f2161b8596f7018d6a76bff79bc9e571f35fd;hpb=2d8cb72e84d5cc1089ce77baf1e34ea3ea2f8465 diff --git a/src/tim/prune/undo/UndoDeleteRange.java b/src/tim/prune/undo/UndoDeleteRange.java new file mode 100644 index 0000000..da42bc4 --- /dev/null +++ b/src/tim/prune/undo/UndoDeleteRange.java @@ -0,0 +1,192 @@ +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