]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/data/TrackInfo.java
Moved source into separate src directory due to popular request
[GpsPrune.git] / tim / prune / data / TrackInfo.java
diff --git a/tim/prune/data/TrackInfo.java b/tim/prune/data/TrackInfo.java
deleted file mode 100644 (file)
index 2b5b67d..0000000
+++ /dev/null
@@ -1,516 +0,0 @@
-package tim.prune.data;
-
-import java.util.Set;
-import tim.prune.UpdateMessageBroker;
-
-/**
- * Class to hold all track information, including data
- * and the selection information
- */
-public class TrackInfo
-{
-       private Track _track = null;
-       private Selection _selection = null;
-       private FileInfo _fileInfo = null;
-       private PhotoList _photoList = null;
-       private AudioList _audioList = null;
-
-
-       /**
-        * Constructor
-        * @param inTrack Track object
-        */
-       public TrackInfo(Track inTrack)
-       {
-               _track = inTrack;
-               _selection = new Selection(_track);
-               _fileInfo = new FileInfo();
-               _photoList = new PhotoList();
-               _audioList = new AudioList();
-       }
-
-
-       /**
-        * @return the Track object
-        */
-       public Track getTrack() {
-               return _track;
-       }
-
-
-       /**
-        * @return the Selection object
-        */
-       public Selection getSelection() {
-               return _selection;
-       }
-
-
-       /**
-        * @return the FileInfo object
-        */
-       public FileInfo getFileInfo() {
-               return _fileInfo;
-       }
-
-       /**
-        * Replace the file info with a previously made clone
-        * @param inInfo cloned file info
-        */
-       public void setFileInfo(FileInfo inInfo) {
-               _fileInfo = inInfo;
-       }
-
-       /**
-        * @return the PhotoList object
-        */
-       public PhotoList getPhotoList() {
-               return _photoList;
-       }
-
-       /**
-        * @return the AudioList object
-        */
-       public AudioList getAudioList() {
-               return _audioList;
-       }
-
-       /**
-        * Get the currently selected point, if any
-        * @return DataPoint if single point selected, otherwise null
-        */
-       public DataPoint getCurrentPoint() {
-               return _track.getPoint(_selection.getCurrentPointIndex());
-       }
-
-       /**
-        * Get the currently selected photo, if any
-        * @return Photo if selected, otherwise null
-        */
-       public Photo getCurrentPhoto() {
-               return _photoList.getPhoto(_selection.getCurrentPhotoIndex());
-       }
-
-       /**
-        * Get the currently selected audio clip, if any
-        * @return AudioClip if selected, otherwise null
-        */
-       public AudioClip getCurrentAudio() {
-               return _audioList.getAudio(_selection.getCurrentAudioIndex());
-       }
-
-
-       /**
-        * Add a Set of Photos
-        * @param inSet Set containing Photo objects
-        * @return array containing number of photos and number of points added
-        */
-       public int[] addPhotos(Set<Photo> inSet)
-       {
-               // Firstly count number of points and photos to add
-               int numPhotosToAdd = 0;
-               int numPointsToAdd = 0;
-               if (inSet != null && !inSet.isEmpty())
-               {
-                       for (Photo photo : inSet)
-                       {
-                               if (photo != null && !_photoList.contains(photo))
-                               {
-                                       numPhotosToAdd++;
-                                       if (photo.getDataPoint() != null) {
-                                               numPointsToAdd++;
-                                       }
-                               }
-                       }
-               }
-               // If there are any photos to add, add them
-               if (numPhotosToAdd > 0)
-               {
-                       DataPoint[] dataPoints = new DataPoint[numPointsToAdd];
-                       int pointNum = 0;
-                       boolean hasAltitude = false;
-                       // Add each Photo in turn
-                       for (Photo photo : inSet)
-                       {
-                               if (photo != null && !_photoList.contains(photo))
-                               {
-                                       // Add photo
-                                       _photoList.addPhoto(photo);
-                                       // Add point if there is one
-                                       if (photo.getDataPoint() != null)
-                                       {
-                                               dataPoints[pointNum] = photo.getDataPoint();
-                                               // Check if any points have altitudes
-                                               hasAltitude |= (photo.getDataPoint().getAltitude() != null);
-                                               pointNum++;
-                                       }
-                               }
-                       }
-                       if (numPointsToAdd > 0)
-                       {
-                               // add points to track
-                               _track.appendPoints(dataPoints);
-                               // modify track field list
-                               _track.getFieldList().extendList(Field.LATITUDE);
-                               _track.getFieldList().extendList(Field.LONGITUDE);
-                               if (hasAltitude) {_track.getFieldList().extendList(Field.ALTITUDE);}
-                       }
-               }
-               int[] result = {numPhotosToAdd, numPointsToAdd};
-               return result;
-       }
-
-       /**
-        * Add a Set of Audio objects
-        * @param inSet Set containing Audio objects
-        * @return number of audio objects added
-        */
-       public int addAudios(Set<AudioClip> inSet)
-       {
-               int numAudiosAdded = 0;
-               if (inSet != null && !inSet.isEmpty())
-               {
-                       for (AudioClip audio : inSet)
-                       {
-                               if (audio != null && !_audioList.contains(audio))
-                               {
-                                       // Add audio object
-                                       _audioList.addAudio(audio);
-                                       numAudiosAdded++;
-                                       // audio objects never have points when they're loaded
-                               }
-                       }
-               }
-               return numAudiosAdded;
-       }
-
-       /**
-        * Delete the currently selected point
-        * @return true if point deleted
-        */
-       public boolean deletePoint()
-       {
-               if (_track.deletePoint(_selection.getCurrentPointIndex()))
-               {
-                       _selection.modifyPointDeleted();
-                       return true;
-               }
-               return false;
-       }
-
-
-       /**
-        * Delete the currently selected photo and optionally its point too
-        * @param inPointToo true to also delete associated point
-        * @return true if delete successful
-        */
-       public boolean deleteCurrentPhoto(boolean inPointToo)
-       {
-               int photoIndex = _selection.getCurrentPhotoIndex();
-               if (photoIndex >= 0)
-               {
-                       Photo photo = _photoList.getPhoto(photoIndex);
-                       _photoList.deletePhoto(photoIndex);
-                       // has it got a point?
-                       if (photo.getDataPoint() != null)
-                       {
-                               if (inPointToo)
-                               {
-                                       // delete point
-                                       int pointIndex = _track.getPointIndex(photo.getDataPoint());
-                                       _track.deletePoint(pointIndex);
-                               }
-                               else
-                               {
-                                       // disconnect point from photo
-                                       photo.getDataPoint().setPhoto(null);
-                                       photo.setDataPoint(null);
-                               }
-                       }
-                       // update subscribers
-                       _selection.modifyPointDeleted();
-                       UpdateMessageBroker.informSubscribers();
-               }
-               return true;
-       }
-
-       /**
-        * Delete the currently selected audio item and optionally its point too
-        * @param inPointToo true to also delete associated point
-        * @return true if delete successful
-        */
-       public boolean deleteCurrentAudio(boolean inPointToo)
-       {
-               int audioIndex = _selection.getCurrentAudioIndex();
-               if (audioIndex >= 0)
-               {
-                       AudioClip audio = _audioList.getAudio(audioIndex);
-                       _audioList.deleteAudio(audioIndex);
-                       // has it got a point?
-                       if (audio.getDataPoint() != null)
-                       {
-                               if (inPointToo)
-                               {
-                                       // delete point
-                                       int pointIndex = _track.getPointIndex(audio.getDataPoint());
-                                       _track.deletePoint(pointIndex);
-                               }
-                               else
-                               {
-                                       // disconnect point from audio
-                                       audio.getDataPoint().setAudio(null);
-                                       audio.setDataPoint(null);
-                               }
-                       }
-                       // update subscribers
-                       _selection.modifyPointDeleted();
-                       UpdateMessageBroker.informSubscribers();
-               }
-               return true;
-       }
-
-
-       /**
-        * Delete all the points which have been marked for deletion
-        * @param inSplitSegments true to split segments at deleted points
-        * @return number of points deleted
-        */
-       public int deleteMarkedPoints(boolean inSplitSegments)
-       {
-               int numDeleted = _track.deleteMarkedPoints(inSplitSegments);
-               if (numDeleted > 0)
-               {
-                       _selection.clearAll();
-                       UpdateMessageBroker.informSubscribers();
-               }
-               return numDeleted;
-       }
-
-
-       /**
-        * Clone the selected range of data points
-        * @return shallow copy of DataPoint objects
-        */
-       public DataPoint[] cloneSelectedRange()
-       {
-               return _track.cloneRange(_selection.getStart(), _selection.getEnd());
-       }
-
-       /**
-        * Merge the track segments within the given range
-        * @param inStart start index
-        * @param inEnd end index
-        * @return true if successful
-        */
-       public boolean mergeTrackSegments(int inStart, int inEnd)
-       {
-               boolean firstTrackPoint = true;
-               // Loop between start and end
-               for (int i=inStart; i<=inEnd; i++)
-               {
-                       DataPoint point = _track.getPoint(i);
-                       // Set all segments to false apart from first track point
-                       if (point != null && !point.isWaypoint()) {
-                               point.setSegmentStart(firstTrackPoint);
-                               firstTrackPoint = false;
-                       }
-               }
-               // Find following track point, if any
-               DataPoint nextPoint = _track.getNextTrackPoint(inEnd+1);
-               if (nextPoint != null) {
-                       nextPoint.setSegmentStart(true);
-               }
-               _selection.markInvalid();
-               UpdateMessageBroker.informSubscribers();
-               return true;
-       }
-
-
-       /**
-        * Average selected points to create a new one
-        * @return true if successful
-        */
-       public boolean average()
-       {
-               boolean success = _track.average(_selection.getStart(), _selection.getEnd());
-               if (success) {
-                       selectPoint(_selection.getEnd()+1);
-               }
-               return success;
-       }
-
-
-       /**
-        * Select the given DataPoint
-        * @param inPoint DataPoint object to select
-        */
-       public void selectPoint(DataPoint inPoint)
-       {
-               selectPoint(_track.getPointIndex(inPoint));
-       }
-
-       /**
-        * Increment the selected point index by the given increment
-        * @param inPointIncrement +1 for next point, -1 for previous etc
-        */
-       public void incrementPointIndex(int inPointIncrement)
-       {
-               int index = _selection.getCurrentPointIndex() + inPointIncrement;
-               if (index < 0)
-                       index = 0;
-               else if (index >= _track.getNumPoints())
-                       index = _track.getNumPoints()-1;
-               selectPoint(index);
-       }
-
-       /**
-        * Select the data point with the given index
-        * @param inPointIndex index of DataPoint to select, or -1 for none
-        */
-       public void selectPoint(int inPointIndex)
-       {
-               if (_selection.getCurrentPointIndex() == inPointIndex || inPointIndex >= _track.getNumPoints()) {
-                       return;
-               }
-               DataPoint selectedPoint = _track.getPoint(inPointIndex);
-               // get the index of the current photo
-               int photoIndex = _selection.getCurrentPhotoIndex();
-               // Check if point has photo or not
-               boolean pointHasPhoto = inPointIndex >= 0 && selectedPoint.getPhoto() != null;
-               if (pointHasPhoto) {
-                       photoIndex = _photoList.getPhotoIndex(selectedPoint.getPhoto());
-               }
-               else if (photoIndex < 0 || _photoList.getPhoto(photoIndex).isConnected()) {
-                       // selected point hasn't got a photo - deselect photo if necessary
-                       photoIndex = -1;
-               }
-               // Check if point has an audio item or not
-               int audioIndex = _selection.getCurrentAudioIndex();
-               boolean pointHasAudio = inPointIndex >= 0 && selectedPoint.getAudio() != null;
-               if (pointHasAudio) {
-                       audioIndex = _audioList.getAudioIndex(selectedPoint.getAudio());
-               }
-               else if (audioIndex < 0 || _audioList.getAudio(audioIndex).isConnected()) {
-                       // deselect current audio clip
-                       audioIndex = -1;
-               }
-               // give to selection
-               _selection.selectPointPhotoAudio(inPointIndex, photoIndex, audioIndex);
-       }
-
-       /**
-        * Select the given Photo and its point if any
-        * @param inPhotoIndex index of photo to select
-        */
-       public void selectPhoto(int inPhotoIndex)
-       {
-               if (_selection.getCurrentPhotoIndex() == inPhotoIndex) {
-                       return;
-               }
-               // Photo is primary selection here, not as a result of a point selection
-               // Therefore the photo selection takes priority, deselecting point if necessary
-               // Find Photo object
-               Photo photo = _photoList.getPhoto(inPhotoIndex);
-               int pointIndex = _selection.getCurrentPointIndex();
-               DataPoint currPoint = getCurrentPoint();
-               if (photo != null)
-               {
-                       // Has the photo got a point?
-                       if (photo.isConnected()) {
-                               pointIndex = _track.getPointIndex(photo.getDataPoint());
-                       }
-                       else {
-                               // Check whether to deselect current point or not if photo not correlated
-                               if (pointIndex >= 0 && _track.getPoint(pointIndex).getPhoto() != null) {
-                                       pointIndex = -1;
-                               }
-                       }
-               }
-               else {
-                       // no photo, but maybe need to deselect point
-                       if (currPoint != null && currPoint.getPhoto() != null) {
-                               pointIndex = -1;
-                       }
-               }
-               // Has the new point got an audio clip?
-               DataPoint selectedPoint = _track.getPoint(pointIndex);
-               int audioIndex = _selection.getCurrentAudioIndex();
-               if (selectedPoint != null && selectedPoint.getAudio() != null)
-               {
-                       // New point has an audio, so select it
-                       audioIndex = _audioList.getAudioIndex(selectedPoint.getAudio());
-               }
-               else if (currPoint != null && selectedPoint != currPoint && currPoint.getAudio() != null)
-               {
-                       // Old point had an audio, so deselect it
-                       audioIndex = -1;
-               }
-               // give to selection object
-               _selection.selectPointPhotoAudio(pointIndex, inPhotoIndex, audioIndex);
-       }
-
-       /**
-        * Select the given audio object and its point if any
-        * @param inAudioIndex index of audio item to select
-        */
-       public void selectAudio(int inAudioIndex)
-       {
-               if (_selection.getCurrentAudioIndex() == inAudioIndex) {
-                       return;
-               }
-               // Audio selection takes priority, deselecting point if necessary
-               AudioClip audio = _audioList.getAudio(inAudioIndex);
-               int pointIndex = _selection.getCurrentPointIndex();
-               DataPoint currPoint = getCurrentPoint();
-               if (audio != null)
-               {
-                       // Find point object and its index
-                       if (audio.isConnected()) {
-                               pointIndex = _track.getPointIndex(audio.getDataPoint());
-                       }
-                       else {
-                               // Check whether to deselect current point or not if audio not correlated
-                               if (pointIndex >= 0 && _track.getPoint(pointIndex).getAudio() != null) {
-                                       pointIndex = -1;
-                               }
-                       }
-               }
-               else {
-                       // check if current point has audio or not
-                       if (currPoint != null && currPoint.getAudio() != null) {
-                               pointIndex = -1;
-                       }
-               }
-               // Has the new point got a photo?
-               DataPoint selectedPoint = _track.getPoint(pointIndex);
-               int photoIndex = _selection.getCurrentPhotoIndex();
-               if (selectedPoint != null && selectedPoint.getPhoto() != null) {
-                       // New point has a photo, so select it
-                       photoIndex = _photoList.getPhotoIndex(selectedPoint.getPhoto());
-               }
-               else if (currPoint != null && selectedPoint != currPoint && currPoint.getPhoto() != null) {
-                       // Old point had a photo, so deselect it
-                       photoIndex = -1;
-               }
-               // give to selection object
-               _selection.selectPointPhotoAudio(pointIndex, photoIndex, inAudioIndex);
-       }
-
-
-       /**
-        * Extend the current selection to end at the given point, eg by shift-clicking
-        * @param inPointNum index of end point
-        */
-       public void extendSelection(int inPointNum)
-       {
-               // See whether to start selection from current range start or current point
-               int rangeStart = _selection.getStart();
-               if (rangeStart < 0 || _selection.getCurrentPointIndex() != _selection.getEnd()) {
-                       rangeStart = _selection.getCurrentPointIndex();
-               }
-               selectPoint(inPointNum);
-               if (rangeStart < inPointNum) {
-                       _selection.selectRange(rangeStart, inPointNum);
-               }
-       }
-}