]> git.street.me.uk Git - andy/viking.git/blobdiff - src/viktrack.c
Ensure highlight for a single track or waypoint is always shown on top.
[andy/viking.git] / src / viktrack.c
index 13b3c00e0c150f32dbe4da4eacd46f6958e4e1c0..04e75f0260515d69e485ff0592e60a7086f117ac 100644 (file)
@@ -1363,6 +1363,22 @@ VikTrackpoint* vik_track_get_tp_by_min_alt ( const VikTrack *tr )
   return min_alt_tp;
 }
 
+VikTrackpoint *vik_track_get_tp_first( const VikTrack *tr )
+{
+  if ( !tr->trackpoints )
+    return NULL;
+
+  return (VikTrackpoint*)g_list_first(tr->trackpoints)->data;
+}
+
+VikTrackpoint *vik_track_get_tp_last ( const VikTrack *tr )
+{
+  if ( !tr->trackpoints )
+    return NULL;
+
+  return (VikTrackpoint*)g_list_last(tr->trackpoints)->data;
+}
+
 gboolean vik_track_get_minmax_alt ( const VikTrack *tr, gdouble *min_alt, gdouble *max_alt )
 {
   *min_alt = 25000;
@@ -1749,3 +1765,35 @@ VikCoord *vik_track_cut_back_to_double_point ( VikTrack *tr )
   return rv;
 }
 
+/**
+ * Function to compare two tracks by their first timestamp
+ **/
+int vik_track_compare_timestamp (const void *x, const void *y)
+{
+  VikTrack *a = (VikTrack *)x;
+  VikTrack *b = (VikTrack *)y;
+
+  VikTrackpoint *tpa = NULL;
+  VikTrackpoint *tpb = NULL;
+
+  if ( a->trackpoints )
+    tpa = VIK_TRACKPOINT(g_list_first(a->trackpoints)->data);
+
+  if ( b->trackpoints )
+    tpb = VIK_TRACKPOINT(g_list_first(b->trackpoints)->data);
+
+  if ( tpa && tpb ) {
+    if ( tpa->timestamp < tpb->timestamp )
+      return -1;
+    if ( tpa->timestamp > tpb->timestamp )
+      return 1;
+  }
+
+  if ( tpa && !tpb )
+    return 1;
+
+  if ( !tpa && tpb )
+    return -1;
+
+  return 0;
+}