--- /dev/null
+package tim.prune.load;
+
+import java.util.ArrayList;
+
+/**
+ * Class to hold and manage a list of track names
+ * from a gpx file, and report back which points
+ * belong to which track
+ */
+public class TrackNameList
+{
+ /** Current point number */
+ private int _pointNum = -1;
+ /** Current track number */
+ private int _trackNum = -1;
+ /** List of unique track names */
+ private ArrayList<String> _trackNames = new ArrayList<String>();
+ /** List of point numbers at the start of each track */
+ private ArrayList<Integer> _startIndices = new ArrayList<Integer>();
+
+
+ /**
+ * Inform list of a new point
+ * @param inTrackNum number of track, starting at zero
+ * @param inTrackName name of track, if any
+ * @param inIsTrackpoint true if point is a trackpoint
+ */
+ public void addPoint(int inTrackNum, String inTrackName, boolean inIsTrackpoint)
+ {
+ _pointNum++;
+ if (inIsTrackpoint)
+ {
+ if (inTrackNum != _trackNum) {
+ _trackNames.add(inTrackName);
+ _startIndices.add(Integer.valueOf(_pointNum));
+ }
+ }
+ _trackNum = inTrackNum;
+ }
+
+ /**
+ * @return number of tracks found in file
+ */
+ public int getNumTracks()
+ {
+ return _trackNames.size();
+ }
+
+ /**
+ * @param inTrackNum index of track, starting from zero
+ * @return name of specified track (or null if none given)
+ */
+ public String getTrackName(int inTrackNum)
+ {
+ if (inTrackNum < 0 || inTrackNum >= getNumTracks()) {return "";}
+ String name = _trackNames.get(inTrackNum);
+ return name;
+ }
+
+ /**
+ * @param inTrackNum index of track, starting from zero
+ * @return number of points in the specified track
+ */
+ public int getNumPointsInTrack(int inTrackNum)
+ {
+ if (inTrackNum < 0 || inTrackNum >= getNumTracks()) {return 0;}
+ if (inTrackNum == (getNumTracks()-1)) {
+ // last track, use total points
+ return _pointNum - _startIndices.get(inTrackNum) + 1;
+ }
+ return _startIndices.get(inTrackNum+1) - _startIndices.get(inTrackNum);
+ }
+
+ /**
+ * @param inTrackNum index of track, starting from zero
+ * @return start index of the specified track
+ */
+ public int getStartIndex(int inTrackNum)
+ {
+ if (inTrackNum < 0 || inTrackNum >= getNumTracks()) {return 0;}
+ return _startIndices.get(inTrackNum);
+ }
+}