X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2Fdata%2FTrack.java;h=fc65959bd3c6f2c25442d4e3bd15a78d98842f60;hb=649c5da6ee1bbc590699e11a92316ece2ea8512d;hp=d33886ea3f22eb2eee5057cba3bbd6a2cd9a8524;hpb=1ee49ae3c8ef3aa2e63eadd458531e5f8bd4f92c;p=GpsPrune.git diff --git a/tim/prune/data/Track.java b/tim/prune/data/Track.java index d33886e..fc65959 100644 --- a/tim/prune/data/Track.java +++ b/tim/prune/data/Track.java @@ -46,6 +46,19 @@ public class Track _scaled = false; } + /** + * Constructor using fields and points from another Track + * @param inFieldList Field list from another Track object + * @param inPoints (edited) point array + */ + public Track(FieldList inFieldList, DataPoint[] inPoints) + { + _masterFieldList = inFieldList; + _dataPoints = inPoints; + if (_dataPoints == null) _dataPoints = new DataPoint[0]; + _numPoints = _dataPoints.length; + _scaled = false; + } /** * Load method, for initialising and reinitialising data @@ -173,7 +186,7 @@ public class Track { DataPoint point = _dataPoints[i]; // Don't delete photo points - if (point.getPhoto() != null || !point.getDeleteFlag()) + if (point.hasMedia() || !point.getDeleteFlag()) { newPointArray[numCopied] = point; numCopied++; @@ -292,9 +305,10 @@ public class Track * @param inStart start of range * @param inEnd end of range * @param inOffset offset to add (-ve to subtract) + * @param inUndo true for undo operation * @return true on success */ - public boolean addTimeOffset(int inStart, int inEnd, long inOffset) + public boolean addTimeOffset(int inStart, int inEnd, long inOffset, boolean inUndo) { // sanity check if (inStart < 0 || inEnd < 0 || inStart >= inEnd || inEnd >= _numPoints) { @@ -310,6 +324,7 @@ public class Track // This point has a timestamp so add the offset to it foundTimestamp = true; timestamp.addOffset(inOffset); + _dataPoints[i].setModified(inUndo); } } return foundTimestamp; @@ -341,6 +356,7 @@ public class Track // This point has an altitude so add the offset to it foundAlt = true; alt.addOffset(inOffset, inFormat, inDecimals); + _dataPoints[i].setModified(false); } } // needs to be scaled again @@ -748,11 +764,14 @@ public class Track } /** - * @return true if track has altitude data (which are not all zero) + * @return true if track has altitude data */ public boolean hasAltitudeData() { - return getAltitudeRange().getMaximum() > 0; + for (int i=0; i<_numPoints; i++) { + if (_dataPoints[i].hasAltitude()) {return true;} + } + return false; } /** @@ -960,6 +979,7 @@ public class Track */ public DataPoint getPreviousTrackPoint(int inStartIndex) { + // end index is given as _numPoints but actually it just counts down to -1 return getNextTrackPoint(inStartIndex, _numPoints, false); } @@ -1172,4 +1192,18 @@ public class Track } return false; } + + /** + * @param inPoint point to check + * @return true if this track contains the given point + */ + public boolean containsPoint(DataPoint inPoint) + { + if (inPoint == null) return false; + for (int i=0; i < getNumPoints(); i++) + { + if (getPoint(i) == inPoint) return true; + } + return false; // not found + } }