]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/data/Track.java
Version 13, August 2011
[GpsPrune.git] / tim / prune / data / Track.java
index d33886ea3f22eb2eee5057cba3bbd6a2cd9a8524..fc65959bd3c6f2c25442d4e3bd15a78d98842f60 100644 (file)
@@ -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
+       }
 }