From 62525c73007d8cf1a3786887b61c904d379f80c9 Mon Sep 17 00:00:00 2001 From: Rob Norris Date: Sat, 14 Jun 2014 12:01:28 +0100 Subject: [PATCH] Add trackpoint message output option value of the distance to the end of the track. --- help/C/viking.xml | 1 + src/vikutils.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/help/C/viking.xml b/help/C/viking.xml index 8c53fde4..fda9aad1 100644 --- a/help/C/viking.xml +++ b/help/C/viking.xml @@ -3102,6 +3102,7 @@ Accept: */* M = Time diff of a Trackpoint from the previous trackpoint X = Number of satellites used in the trackpoint fix D = Distance of the trackpoint from the start of a track (following along the track) + F = Distance of the trackpoint from the finish (end) of a track (following along the track) P = Distance difference of the trackpoint from the previous trackpoint N = Name of track to which the trackpoint belongs E = Name of the trackpoint diff --git a/src/vikutils.c b/src/vikutils.c index bbe36583..c4f088fc 100644 --- a/src/vikutils.c +++ b/src/vikutils.c @@ -207,6 +207,35 @@ gchar* vu_trackpoint_formatted_message ( gchar *format_code, VikTrackpoint *trkp case 'X': values[i] = g_strdup_printf ( _("%sNo. of Sats %d"), separator, trkpt->nsats ); break; + case 'F': { + if ( trk ) { + // Distance to the end 'Finish' (along the track) + gdouble distd = vik_track_get_length_to_trackpoint (trk, trkpt); + gdouble diste = vik_track_get_length_including_gaps ( trk ); + gdouble dist = diste - distd; + gchar *dist_units_str = NULL; + vik_units_distance_t dist_units = a_vik_get_units_distance (); + switch (dist_units) { + case VIK_UNITS_DISTANCE_MILES: + dist_units_str = g_strdup ( _("miles") ); + dist = VIK_METERS_TO_MILES(dist); + break; + case VIK_UNITS_DISTANCE_NAUTICAL_MILES: + dist_units_str = g_strdup ( _("NM") ); + dist = VIK_METERS_TO_NAUTICAL_MILES(dist); + break; + default: + // VIK_UNITS_DISTANCE_KILOMETRES: + dist_units_str = g_strdup ( _("km") ); + dist = dist / 1000.0; + break; + } + values[i] = g_strdup_printf ( _("%sTo End %.2f%s"), separator, dist, dist_units_str ); + g_free ( dist_units_str ); + } + break; + } + case 'D': { if ( trk ) { // Distance from start (along the track) -- 2.39.5