X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/71cea316bc59b175f891ae7eff259742e013563e..b127ccd23c8c9afe3dae1aebb68a951093f92403:/src/viktrwlayer_tpwin.c diff --git a/src/viktrwlayer_tpwin.c b/src/viktrwlayer_tpwin.c index 9ccfdc3c..8a270b4e 100644 --- a/src/viktrwlayer_tpwin.c +++ b/src/viktrwlayer_tpwin.c @@ -33,6 +33,7 @@ #include "viktrwlayer_tpwin.h" #include "vikwaypoint.h" #include "dialog.h" +#include "globals.h" #define SET_BUTTON_SENSITIVE(tpwin,num,sens) gtk_widget_set_sensitive ( GTK_WIDGET(g_list_nth_data((tpwin->buttons),(num))), (sens)); @@ -92,8 +93,21 @@ static void tpwin_sync_ll_to_tp ( VikTrwLayerTpwin *tpwin ) static void tpwin_sync_alt_to_tp ( VikTrwLayerTpwin *tpwin ) { - if ( tpwin->cur_tp && (!tpwin->sync_to_tp_block) ) - tpwin->cur_tp->altitude = gtk_spin_button_get_value ( tpwin->alt ); + if ( tpwin->cur_tp && (!tpwin->sync_to_tp_block) ) { + // Always store internally in metres + vik_units_height_t height_units = a_vik_get_units_height (); + switch (height_units) { + case VIK_UNITS_HEIGHT_METRES: + tpwin->cur_tp->altitude = gtk_spin_button_get_value ( tpwin->alt ); + break; + case VIK_UNITS_HEIGHT_FEET: + tpwin->cur_tp->altitude = VIK_FEET_TO_METERS(gtk_spin_button_get_value ( tpwin->alt )); + break; + default: + tpwin->cur_tp->altitude = gtk_spin_button_get_value ( tpwin->alt ); + g_critical("Houston, we've had a problem. height=%d", height_units); + } + } } VikTrwLayerTpwin *vik_trw_layer_tpwin_new ( GtkWindow *parent ) @@ -251,7 +265,19 @@ void vik_trw_layer_tpwin_set_tp ( VikTrwLayerTpwin *tpwin, GList *tpl, gchar *tr vik_coord_to_latlon ( &(tp->coord), &ll ); gtk_spin_button_set_value ( tpwin->lat, ll.lat ); gtk_spin_button_set_value ( tpwin->lon, ll.lon ); - gtk_spin_button_set_value ( tpwin->alt, tp->altitude ); + vik_units_height_t height_units = a_vik_get_units_height (); + switch (height_units) { + case VIK_UNITS_HEIGHT_METRES: + gtk_spin_button_set_value ( tpwin->alt, tp->altitude ); + break; + case VIK_UNITS_HEIGHT_FEET: + gtk_spin_button_set_value ( tpwin->alt, VIK_METERS_TO_FEET(tp->altitude) ); + break; + default: + gtk_spin_button_set_value ( tpwin->alt, tp->altitude ); + g_critical("Houston, we've had a problem. height=%d", height_units); + } + tpwin->sync_to_tp_block = FALSE; /* don't update whlie setting data. */ @@ -270,9 +296,20 @@ void vik_trw_layer_tpwin_set_tp ( VikTrwLayerTpwin *tpwin, GList *tpl, gchar *tr gtk_label_set_text (tpwin->localtime, NULL ); } + vik_units_distance_t dist_units = a_vik_get_units_distance (); if ( tpwin->cur_tp ) { - g_snprintf ( tmp_str, sizeof(tmp_str), "%.3f m", vik_coord_diff(&(tp->coord), &(tpwin->cur_tp->coord))); + switch (dist_units) { + case VIK_UNITS_DISTANCE_KILOMETRES: + g_snprintf ( tmp_str, sizeof(tmp_str), "%.2f m", vik_coord_diff(&(tp->coord), &(tpwin->cur_tp->coord))); + break; + case VIK_UNITS_DISTANCE_MILES: + g_snprintf ( tmp_str, sizeof(tmp_str), "%.2f yards", vik_coord_diff(&(tp->coord), &(tpwin->cur_tp->coord))*1.0936133); + break; + default: + g_critical("Houston, we've had a problem. distance=%d", dist_units); + } + gtk_label_set_text ( tpwin->diff_dist, tmp_str ); if ( tp->has_timestamp && tpwin->cur_tp->has_timestamp ) { @@ -282,7 +319,24 @@ void vik_trw_layer_tpwin_set_tp ( VikTrwLayerTpwin *tpwin, GList *tpl, gchar *tr gtk_label_set_text ( tpwin->diff_speed, "--" ); else { - g_snprintf ( tmp_str, sizeof(tmp_str), "%.2f m/s", vik_coord_diff(&(tp->coord), &(tpwin->cur_tp->coord)) / ABS(tp->timestamp - tpwin->cur_tp->timestamp) ); + vik_units_speed_t speed_units = a_vik_get_units_speed (); + switch (speed_units) { + case VIK_UNITS_SPEED_KILOMETRES_PER_HOUR: + g_snprintf ( tmp_str, sizeof(tmp_str), "%.2f km/h", VIK_MPS_TO_KPH(vik_coord_diff(&(tp->coord), &(tpwin->cur_tp->coord)) / (ABS(tp->timestamp - tpwin->cur_tp->timestamp))) ); + break; + case VIK_UNITS_SPEED_MILES_PER_HOUR: + g_snprintf ( tmp_str, sizeof(tmp_str), "%.2f mph", VIK_MPS_TO_MPH(vik_coord_diff(&(tp->coord), &(tpwin->cur_tp->coord)) / (ABS(tp->timestamp - tpwin->cur_tp->timestamp))) ); + break; + case VIK_UNITS_SPEED_METRES_PER_SECOND: + g_snprintf ( tmp_str, sizeof(tmp_str), "%.2f m/s", vik_coord_diff(&(tp->coord), &(tpwin->cur_tp->coord)) / ABS(tp->timestamp - tpwin->cur_tp->timestamp) ); + break; + case VIK_UNITS_SPEED_KNOTS: + g_snprintf ( tmp_str, sizeof(tmp_str), "%.2f knots", VIK_MPS_TO_KNOTS(vik_coord_diff(&(tp->coord), &(tpwin->cur_tp->coord)) / (ABS(tp->timestamp - tpwin->cur_tp->timestamp))) ); + break; + default: + g_snprintf ( tmp_str, sizeof(tmp_str), "--" ); + g_critical("Houston, we've had a problem. speed=%d", speed_units); + } gtk_label_set_text ( tpwin->diff_speed, tmp_str ); } } @@ -293,12 +347,36 @@ void vik_trw_layer_tpwin_set_tp ( VikTrwLayerTpwin *tpwin, GList *tpl, gchar *tr } } - g_snprintf ( tmp_str, sizeof(tmp_str), "%.5f m", tp->vdop ); + switch (dist_units) { + case VIK_UNITS_DISTANCE_KILOMETRES: + g_snprintf ( tmp_str, sizeof(tmp_str), "%.5f m", tp->hdop ); + gtk_label_set_text ( tpwin->hdop, tmp_str ); + g_snprintf ( tmp_str, sizeof(tmp_str), "%.5f m", tp->pdop ); + gtk_label_set_text ( tpwin->pdop, tmp_str ); + break; + case VIK_UNITS_DISTANCE_MILES: + g_snprintf ( tmp_str, sizeof(tmp_str), "%.5f yards", tp->hdop*1.0936133 ); + gtk_label_set_text ( tpwin->hdop, tmp_str ); + g_snprintf ( tmp_str, sizeof(tmp_str), "%.5f yards", tp->pdop*1.0936133 ); + gtk_label_set_text ( tpwin->pdop, tmp_str ); + break; + default: + g_critical("Houston, we've had a problem. distance=%d", dist_units); + } + + switch (height_units) { + case VIK_UNITS_HEIGHT_METRES: + g_snprintf ( tmp_str, sizeof(tmp_str), "%.5f m", tp->vdop ); + break; + case VIK_UNITS_HEIGHT_FEET: + g_snprintf ( tmp_str, sizeof(tmp_str), "%.5f feet", VIK_METERS_TO_FEET(tp->vdop) ); + break; + default: + g_snprintf ( tmp_str, sizeof(tmp_str), "--" ); + g_critical("Houston, we've had a problem. height=%d", height_units); + } gtk_label_set_text ( tpwin->vdop, tmp_str ); - g_snprintf ( tmp_str, sizeof(tmp_str), "%.5f m", tp->hdop ); - gtk_label_set_text ( tpwin->hdop, tmp_str ); - g_snprintf ( tmp_str, sizeof(tmp_str), "%.5f m", tp->pdop ); - gtk_label_set_text ( tpwin->pdop, tmp_str ); + g_snprintf ( tmp_str, sizeof(tmp_str), "%d / %d", tp->nsats, tp->fix_mode ); gtk_label_set_text ( tpwin->sat, tmp_str );