+ // restore photos and audios to how they were before\r
+ if (_photoList != null) {\r
+ inTrackInfo.getPhotoList().restore(_photoList);\r
+ }\r
+ if (_audioList != null) {\r
+ inTrackInfo.getAudioList().restore(_audioList);\r
+ }\r
+\r
+ // Undo both the ranges\r
+ performUndo(inTrackInfo, _rangeInfo1);\r
+ performUndo(inTrackInfo, _rangeInfo2);\r
+ // If there's a current point/range selected, maybe need to adjust start and/or end\r
+ if (_rangeInfo1 != null && _rangeInfo1.isValid()) {\r
+ modifySelection(inTrackInfo, _rangeInfo1._startIndex, _rangeInfo1.getEndIndex());\r
+ }\r
+ if (_rangeInfo2 != null && _rangeInfo2.isValid()) {\r
+ modifySelection(inTrackInfo, _rangeInfo2._startIndex, _rangeInfo2.getEndIndex());\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Perform the undo on a single deleted range\r
+ * @param inTrackInfo track info object\r
+ * @param inRangeInfo info object describing deleted range\r
+ */\r
+ private void performUndo(TrackInfo inTrackInfo, RangeInfo inRangeInfo)\r
+ {\r
+ if (inRangeInfo == null || !inRangeInfo.isValid()) return;\r
+\r
+ // reconnect photos and audios to points\r
+ final int numPoints = inRangeInfo._points.length;\r
+ for (int i=0; i<numPoints; i++)\r
+ {\r
+ DataPoint point = inRangeInfo._points[i];\r
+ if (point != null && point.hasMedia())\r
+ {\r
+ if (point.getPhoto() != null) {\r
+ point.getPhoto().setDataPoint(point);\r
+ }\r
+ if (point.getAudio() != null) {\r
+ point.getAudio().setDataPoint(point);\r
+ }\r
+ }\r
+ }\r