]> git.street.me.uk Git - andy/viking.git/blobdiff - src/viktrwlayer_tpwin.c
Use $(top_srcdir) to locate AUTHORS file
[andy/viking.git] / src / viktrwlayer_tpwin.c
index 9ccfdc3cd20d136cb83d477492eff7ea77ef91f7..8a270b4e318b21d00d35ce900f9ade04cd70b100 100644 (file)
@@ -33,6 +33,7 @@
 #include "viktrwlayer_tpwin.h"
 #include "vikwaypoint.h"
 #include "dialog.h"
 #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));
 
 
 #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 )
 {
 
 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 )
 }
 
 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 );
   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. */
 
 
   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 );
   }
 
     gtk_label_set_text (tpwin->localtime, NULL );
   }
 
+  vik_units_distance_t dist_units = a_vik_get_units_distance ();
   if ( tpwin->cur_tp )
   {
   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 )
     {
     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
       {
         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 );
       }
     }
         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 );
   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 );
 
   g_snprintf ( tmp_str, sizeof(tmp_str), "%d / %d", tp->nsats, tp->fix_mode );
   gtk_label_set_text ( tpwin->sat, tmp_str );