#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));
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 )
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. */
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 )
{
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 );
}
}
}
}
- 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 );