]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/undo/UndoDeleteRange.java
Moved source into separate src directory due to popular request
[GpsPrune.git] / tim / prune / undo / UndoDeleteRange.java
diff --git a/tim/prune/undo/UndoDeleteRange.java b/tim/prune/undo/UndoDeleteRange.java
deleted file mode 100644 (file)
index da42bc4..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-package tim.prune.undo;\r
-\r
-import tim.prune.I18nManager;\r
-import tim.prune.data.AudioList;\r
-import tim.prune.data.DataPoint;\r
-import tim.prune.data.PhotoList;\r
-import tim.prune.data.TrackInfo;\r
-\r
-/**\r
- * Operation to undo a delete of a range of points\r
- */\r
-public class UndoDeleteRange extends UndoDeleteOperation\r
-{\r
-       /**\r
-        * Inner class to hold a single range information set\r
-        */\r
-       static class RangeInfo\r
-       {\r
-               public int _startIndex = -1;\r
-               public DataPoint[] _points = null;\r
-               public DataPoint _nextTrackPoint = null;\r
-               public boolean _segmentStart = false;\r
-\r
-               /**\r
-                * @param inPoint next track point after deleted section, or null\r
-                */\r
-               public void setNextTrackPoint(DataPoint inPoint)\r
-               {\r
-                       _nextTrackPoint = inPoint;\r
-                       if (inPoint != null) {\r
-                               _segmentStart = inPoint.getSegmentStart();\r
-                       }\r
-\r
-               }\r
-\r
-               /**\r
-                * @return true if the range is valid\r
-                */\r
-               public boolean isValid()\r
-               {\r
-                       return _startIndex >= 0 && _points != null && _points.length > 0;\r
-               }\r
-\r
-               /**\r
-                * @return end index of range\r
-                */\r
-               public int getEndIndex()\r
-               {\r
-                       return _startIndex + _points.length - 1;\r
-               }\r
-       }\r
-\r
-\r
-       // Instance variables for UndoDeleteRange\r
-       private RangeInfo _rangeInfo1 = null;\r
-       private RangeInfo _rangeInfo2 = null;\r
-       private PhotoList _photoList = null;\r
-       private AudioList _audioList = null;\r
-       private String _nameKey = null;\r
-       private int _totalDeleted = 0;\r
-\r
-\r
-       /**\r
-        * Constructor\r
-        * @param inTrackInfo track info object\r
-        * @param inNameKey key to use for undo text\r
-        * @param inStartIndex1 start index of first deleted segment\r
-        * @param inDeleteMedias1 flags to delete media for range1\r
-        * @param inStartIndex2 start index of second segment\r
-        * @param inDeleteMedias2 flags to delete media for range2\r
-        */\r
-       public UndoDeleteRange(TrackInfo inTrackInfo, String inNameKey,\r
-               int inStartIndex1, boolean[] inDeleteMedias1,\r
-               int inStartIndex2, boolean[] inDeleteMedias2)\r
-       {\r
-               _nameKey = inNameKey;\r
-               boolean mediaDeleted = false;\r
-               _totalDeleted = 0;\r
-               // Check if there's a valid first range\r
-               if (inStartIndex1 >= 0 && inDeleteMedias1 != null)\r
-               {\r
-                       final int numPoints = inDeleteMedias1.length;\r
-                       if (numPoints > 0)\r
-                       {\r
-                               _totalDeleted += numPoints;\r
-                               _rangeInfo1 = new RangeInfo();\r
-                               _rangeInfo1._startIndex = inStartIndex1;\r
-\r
-                               for (int i=0; i<numPoints && !mediaDeleted; i++) {\r
-                                       if (inDeleteMedias1[i]) mediaDeleted = true;\r
-                               }\r
-                               // Clone points\r
-                               _rangeInfo1._points = inTrackInfo.getTrack().cloneRange(inStartIndex1, inStartIndex1 + numPoints - 1);\r
-                               // Save segment flag of following track point\r
-                               _rangeInfo1.setNextTrackPoint(inTrackInfo.getTrack().getNextTrackPoint(inStartIndex1 + numPoints));\r
-                       }\r
-               }\r
-               // And the same for the second range, if any\r
-               if (inStartIndex2 >= 0 && inDeleteMedias2 != null)\r
-               {\r
-                       final int numPoints = inDeleteMedias2.length;\r
-                       if (numPoints > 0)\r
-                       {\r
-                               _totalDeleted += numPoints;\r
-                               _rangeInfo2 = new RangeInfo();\r
-                               _rangeInfo2._startIndex = inStartIndex2;\r
-                               for (int i=0; i<numPoints && !mediaDeleted; i++) {\r
-                                       if (inDeleteMedias2[i]) mediaDeleted = true;\r
-                               }\r
-\r
-                               // Clone points\r
-                               _rangeInfo2._points = inTrackInfo.getTrack().cloneRange(inStartIndex2, inStartIndex2 + numPoints - 1);\r
-                               // Save segment flag of following track point\r
-                               _rangeInfo2.setNextTrackPoint(inTrackInfo.getTrack().getNextTrackPoint(inStartIndex2 + numPoints));\r
-                       }\r
-               }\r
-               // If any media have been deleted, then the lists must be copied\r
-               if (mediaDeleted)\r
-               {\r
-                       _photoList = inTrackInfo.getPhotoList().cloneList();\r
-                       _audioList = inTrackInfo.getAudioList().cloneList();\r
-               }\r
-       }\r
-\r
-\r
-       /**\r
-        * @return description of operation including number of points deleted\r
-        */\r
-       public String getDescription()\r
-       {\r
-               return I18nManager.getText(_nameKey) + " (" + _totalDeleted + ")";\r
-       }\r
-\r
-\r
-       /**\r
-        * Perform the undo operation on the given Track\r
-        * @param inTrackInfo TrackInfo object on which to perform the operation\r
-        */\r
-       public void performUndo(TrackInfo inTrackInfo)\r
-       {\r
-               // 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
-               // restore point array into track\r
-               inTrackInfo.getTrack().insertRange(inRangeInfo._points, inRangeInfo._startIndex);\r
-               // Restore segment flag of following track point\r
-               if (inRangeInfo._nextTrackPoint != null) {\r
-                       inRangeInfo._nextTrackPoint.setSegmentStart(inRangeInfo._segmentStart);\r
-               }\r
-       }\r
-}\r