X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2Fdata%2FTrackInfo.java;h=f8e3c844b8ac86bc46c7c45bf8b78c7bc976f88e;hb=da0b1f449260a0b4a94318006382a9039726ef3e;hp=4695d351e6c124c398e0df90c911dbe0583c4dbe;hpb=d3679d647d57c2ee7376ddbf6def2d5b23c04307;p=GpsPrune.git diff --git a/tim/prune/data/TrackInfo.java b/tim/prune/data/TrackInfo.java index 4695d35..f8e3c84 100644 --- a/tim/prune/data/TrackInfo.java +++ b/tim/prune/data/TrackInfo.java @@ -1,7 +1,7 @@ package tim.prune.data; -import java.util.List; - +import java.util.Iterator; +import java.util.Set; import tim.prune.UpdateMessageBroker; /** @@ -14,7 +14,6 @@ public class TrackInfo private Track _track = null; private Selection _selection = null; private FileInfo _fileInfo = null; - // TODO: How to store photos? In separate list to be maintained or dynamic? Only store pointless photos? private PhotoList _photoList = null; @@ -76,6 +75,15 @@ public class TrackInfo 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()); + } + /** * Load the specified data into the Track @@ -92,24 +100,31 @@ public class TrackInfo /** - * Add a List of Photos - * @param inList List containing Photo objects - * @return number of photos added + * 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(List inList) + public int[] addPhotos(Set inSet) { - // Firstly count number to add to make array + // Firstly count number of points and photos to add int numPhotosToAdd = 0; - if (inList != null && !inList.isEmpty()) + int numPointsToAdd = 0; + Iterator iterator = null; + if (inSet != null && !inSet.isEmpty()) { - for (int i=0; i 0) { - DataPoint[] dataPoints = new DataPoint[numPhotosToAdd]; + DataPoint[] dataPoints = new DataPoint[numPointsToAdd]; int pointNum = 0; + boolean hasAltitude = false; // Add each Photo in turn - for (int i=0; i 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);} + } } - return numPhotosToAdd; + int[] result = {numPhotosToAdd, numPointsToAdd}; + return result; } @@ -147,8 +180,6 @@ public class TrackInfo */ public boolean deleteRange() { - // TODO: Check whether to delete photos associated with this range - int currPoint = _selection.getCurrentPointIndex(); int startSel = _selection.getStart(); int endSel = _selection.getEnd(); boolean answer = _track.deleteRange(startSel, endSel); @@ -166,7 +197,6 @@ public class TrackInfo { if (_track.deletePoint(_selection.getCurrentPointIndex())) { - // TODO: Check whether to delete photo associated with this point _selection.modifyPointDeleted(); _broker.informSubscribers(); return true; @@ -175,6 +205,43 @@ public class TrackInfo } + /** + * 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) + { + // delete currently selected photo + 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(); + _broker.informSubscribers(); + } + return true; + } + + /** * Compress the track to the given resolution * @param inResolution resolution @@ -183,8 +250,10 @@ public class TrackInfo public int compress(int inResolution) { int numDeleted = _track.compress(inResolution); - if (numDeleted > 0) + if (numDeleted > 0) { _selection.clearAll(); + _broker.informSubscribers(); + } return numDeleted; } @@ -196,8 +265,10 @@ public class TrackInfo public int deleteDuplicates() { int numDeleted = _track.deleteDuplicates(); - if (numDeleted > 0) + if (numDeleted > 0) { _selection.clearAll(); + _broker.informSubscribers(); + } return numDeleted; } @@ -238,4 +309,35 @@ public class TrackInfo // give to selection _selection.selectPoint(index); } + + /** + * Select the given Photo and its point if any + * @param inPhotoIndex index of photo to select + */ + public void selectPhoto(int inPhotoIndex) + { + // Find Photo object + Photo photo = _photoList.getPhoto(inPhotoIndex); + if (photo != null) + { + // Find point object and its index + int pointIndex = _track.getPointIndex(photo.getDataPoint()); + // give to selection object + _selection.selectPhotoAndPoint(inPhotoIndex, pointIndex); + } + else + { + // no photo, just reset selection + _selection.selectPhotoAndPoint(-1, -1); + } + } + + + /** + * Fire a trigger to all data subscribers + */ + public void triggerUpdate() + { + _broker.informSubscribers(); + } }