X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/745627344812a9167667a40e6516a7d468c9aa62..0a25e23214e753d9190e33e58b23685783099bd5:/src/viktrwlayer_propwin.c diff --git a/src/viktrwlayer_propwin.c b/src/viktrwlayer_propwin.c index f8cbf9cc..be96f509 100644 --- a/src/viktrwlayer_propwin.c +++ b/src/viktrwlayer_propwin.c @@ -42,6 +42,7 @@ #include "viking.h" #include "vikviewport.h" /* ugh */ #include "vikutils.h" +#include "ui_util.h" #include typedef enum { @@ -748,6 +749,9 @@ void track_profile_move( GtkWidget *event_box, GdkEventMotion *event, PropWidget case VIK_UNITS_DISTANCE_MILES: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f miles", VIK_METERS_TO_MILES(meters_from_start) ); break; + case VIK_UNITS_DISTANCE_NAUTICAL_MILES: + g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f NM", VIK_METERS_TO_NAUTICAL_MILES(meters_from_start) ); + break; default: g_critical("Houston, we've had a problem. distance=%d", dist_units); } @@ -828,6 +832,9 @@ void track_gradient_move( GtkWidget *event_box, GdkEventMotion *event, PropWidge case VIK_UNITS_DISTANCE_MILES: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f miles", VIK_METERS_TO_MILES(meters_from_start) ); break; + case VIK_UNITS_DISTANCE_NAUTICAL_MILES: + g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f NM", VIK_METERS_TO_NAUTICAL_MILES(meters_from_start) ); + break; default: g_critical("Houston, we've had a problem. distance=%d", dist_units); } @@ -1031,10 +1038,17 @@ void track_dt_move( GtkWidget *event_box, GdkEventMotion *event, PropWidgets *wi if (trackpoint && widgets->w_cur_dist_dist) { static gchar tmp_buf[20]; - if ( a_vik_get_units_distance () == VIK_UNITS_DISTANCE_MILES ) + switch ( a_vik_get_units_distance () ) { + case VIK_UNITS_DISTANCE_MILES: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f miles", widgets->distances[ix]); - else + break; + case VIK_UNITS_DISTANCE_NAUTICAL_MILES: + g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f NM", widgets->distances[ix]); + break; + default: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f km", widgets->distances[ix]); + break; + } gtk_label_set_text(GTK_LABEL(widgets->w_cur_dist_dist), tmp_buf); } @@ -1181,6 +1195,9 @@ void track_sd_move( GtkWidget *event_box, GdkEventMotion *event, PropWidgets *wi case VIK_UNITS_DISTANCE_MILES: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f miles", VIK_METERS_TO_MILES(meters_from_start) ); break; + case VIK_UNITS_DISTANCE_NAUTICAL_MILES: + g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f NM", VIK_METERS_TO_NAUTICAL_MILES(meters_from_start) ); + break; default: g_critical("Houston, we've had a problem. distance=%d", dist_units); } @@ -1409,16 +1426,27 @@ static void draw_grid_x_time ( GtkWidget *window, GtkWidget *image, PropWidgets static void draw_grid_x_distance ( GtkWidget *window, GtkWidget *image, PropWidgets *widgets, GdkPixmap *pix, guint ii, gdouble dd, guint xx, vik_units_distance_t dist_units ) { gchar *label_markup = NULL; - if ( dist_units == VIK_UNITS_DISTANCE_MILES ) + switch ( dist_units ) { + case VIK_UNITS_DISTANCE_MILES: if ( ii > 4 ) label_markup = g_strdup_printf ( "%d %s", (guint)dd, _("miles") ); else label_markup = g_strdup_printf ( "%.1f %s", dd, _("miles") ); - else + break; + case VIK_UNITS_DISTANCE_NAUTICAL_MILES: + if ( ii > 4 ) + label_markup = g_strdup_printf ( "%d %s", (guint)dd, _("NM") ); + else + label_markup = g_strdup_printf ( "%.1f %s", dd, _("NM") ); + break; + default: + // VIK_UNITS_DISTANCE_KILOMETRES: if ( ii > 4 ) label_markup = g_strdup_printf ( "%d %s", (guint)dd, _("km") ); else label_markup = g_strdup_printf ( "%.1f %s", dd, _("km") ); + break; + } if ( label_markup ) { PangoLayout *pl = gtk_widget_create_pango_layout (GTK_WIDGET(image), NULL); @@ -1456,12 +1484,18 @@ static void draw_distance_divisions ( GtkWidget *window, GtkWidget *image, GdkPi { // Set to display units from length in metres. gdouble length = widgets->track_length_inc_gaps; - if ( dist_units == VIK_UNITS_DISTANCE_MILES ) - length = VIK_METERS_TO_MILES(length); - else - // KM - length = length/1000.0; - + switch (dist_units) { + case VIK_UNITS_DISTANCE_MILES: + length = VIK_METERS_TO_MILES(length); + break; + case VIK_UNITS_DISTANCE_NAUTICAL_MILES: + length = VIK_METERS_TO_NAUTICAL_MILES(length); + break; + default: + // KM + length = length/1000.0; + break; + } guint index = get_distance_chunk_index ( length ); gdouble dist_per_pixel = length/widgets->profile_width; @@ -1875,16 +1909,23 @@ static void draw_dt ( GtkWidget *image, VikTrack *tr, PropWidgets *widgets ) // Convert into appropriate units vik_units_distance_t dist_units = a_vik_get_units_distance (); - if ( dist_units == VIK_UNITS_DISTANCE_MILES ) { - for ( i = 0; i < widgets->profile_width; i++ ) { - widgets->distances[i] = VIK_METERS_TO_MILES(widgets->distances[i]); - } - } - else { - // Metres - but want in kms - for ( i = 0; i < widgets->profile_width; i++ ) { - widgets->distances[i] = widgets->distances[i]/1000.0; - } + switch ( dist_units ) { + case VIK_UNITS_DISTANCE_MILES: + for ( i = 0; i < widgets->profile_width; i++ ) { + widgets->distances[i] = VIK_METERS_TO_MILES(widgets->distances[i]); + } + break; + case VIK_UNITS_DISTANCE_NAUTICAL_MILES: + for ( i = 0; i < widgets->profile_width; i++ ) { + widgets->distances[i] = VIK_METERS_TO_NAUTICAL_MILES(widgets->distances[i]); + } + break; + default: + // Metres - but want in kms + for ( i = 0; i < widgets->profile_width; i++ ) { + widgets->distances[i] = widgets->distances[i]/1000.0; + } + break; } widgets->duration = vik_track_get_duration ( widgets->tr ); @@ -1901,10 +1942,17 @@ static void draw_dt ( GtkWidget *image, VikTrack *tr, PropWidgets *widgets ) // Assign locally // mind = 0.0; - Thus not used gdouble maxd; - if ( dist_units == VIK_UNITS_DISTANCE_MILES ) + switch ( dist_units ) { + case VIK_UNITS_DISTANCE_MILES: maxd = VIK_METERS_TO_MILES(vik_track_get_length_including_gaps (tr)); - else + break; + case VIK_UNITS_DISTANCE_NAUTICAL_MILES: + maxd = VIK_METERS_TO_NAUTICAL_MILES(vik_track_get_length_including_gaps (tr)); + break; + default: maxd = vik_track_get_length_including_gaps (tr) / 1000.0; + break; + } /* Find suitable chunk index */ gdouble dummy = 0.0; // expect this to remain the same! (not that it's used) @@ -1917,10 +1965,17 @@ static void draw_dt ( GtkWidget *image, VikTrack *tr, PropWidgets *widgets ) for (i=0; i<=LINES; i++) { gchar s[32]; - if ( dist_units == VIK_UNITS_DISTANCE_MILES ) + switch ( dist_units ) { + case VIK_UNITS_DISTANCE_MILES: sprintf(s, _("%.1f miles"), ((LINES-i)*chunksd[widgets->cid])); - else + break; + case VIK_UNITS_DISTANCE_NAUTICAL_MILES: + sprintf(s, _("%.1f NM"), ((LINES-i)*chunksd[widgets->cid])); + break; + default: sprintf(s, _("%.1f km"), ((LINES-i)*chunksd[widgets->cid])); + break; + } draw_grid_y ( window, image, widgets, pix, s, i ); } @@ -3142,21 +3197,24 @@ void vik_trw_layer_propwin_run ( GtkWindow *parent, case VIK_UNITS_DISTANCE_MILES: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f miles", VIK_METERS_TO_MILES(tr_len) ); break; + case VIK_UNITS_DISTANCE_NAUTICAL_MILES: + g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f NM", VIK_METERS_TO_NAUTICAL_MILES(tr_len) ); + break; default: g_critical("Houston, we've had a problem. distance=%d", dist_units); } - widgets->w_track_length = content[cnt++] = gtk_label_new ( tmp_buf ); + widgets->w_track_length = content[cnt++] = ui_label_new_selectable ( tmp_buf ); tp_count = vik_track_get_tp_count(tr); g_snprintf(tmp_buf, sizeof(tmp_buf), "%lu", tp_count ); - widgets->w_tp_count = content[cnt++] = gtk_label_new ( tmp_buf ); + widgets->w_tp_count = content[cnt++] = ui_label_new_selectable ( tmp_buf ); seg_count = vik_track_get_segment_count(tr) ; g_snprintf(tmp_buf, sizeof(tmp_buf), "%u", seg_count ); - widgets->w_segment_count = content[cnt++] = gtk_label_new ( tmp_buf ); + widgets->w_segment_count = content[cnt++] = ui_label_new_selectable ( tmp_buf ); g_snprintf(tmp_buf, sizeof(tmp_buf), "%lu", vik_track_get_dup_point_count(tr) ); - widgets->w_duptp_count = content[cnt++] = gtk_label_new ( tmp_buf ); + widgets->w_duptp_count = content[cnt++] = ui_label_new_selectable ( tmp_buf ); vik_units_speed_t speed_units = a_vik_get_units_speed (); tmp_speed = vik_track_get_max_speed(tr); @@ -3181,7 +3239,7 @@ void vik_trw_layer_propwin_run ( GtkWindow *parent, g_critical("Houston, we've had a problem. speed=%d", speed_units); } } - widgets->w_max_speed = content[cnt++] = gtk_label_new ( tmp_buf ); + widgets->w_max_speed = content[cnt++] = ui_label_new_selectable ( tmp_buf ); tmp_speed = vik_track_get_average_speed(tr); if ( tmp_speed == 0 ) @@ -3205,7 +3263,7 @@ void vik_trw_layer_propwin_run ( GtkWindow *parent, g_critical("Houston, we've had a problem. speed=%d", speed_units); } } - widgets->w_avg_speed = content[cnt++] = gtk_label_new ( tmp_buf ); + widgets->w_avg_speed = content[cnt++] = ui_label_new_selectable ( tmp_buf ); // Use 60sec as the default period to be considered stopped // this is the TrackWaypoint draw stops default value 'vtl->stop_length' @@ -3233,7 +3291,7 @@ void vik_trw_layer_propwin_run ( GtkWindow *parent, g_critical("Houston, we've had a problem. speed=%d", speed_units); } } - widgets->w_mvg_speed = content[cnt++] = gtk_label_new ( tmp_buf ); + widgets->w_mvg_speed = content[cnt++] = ui_label_new_selectable ( tmp_buf ); switch (dist_units) { case VIK_UNITS_DISTANCE_KILOMETRES: @@ -3243,10 +3301,13 @@ void vik_trw_layer_propwin_run ( GtkWindow *parent, case VIK_UNITS_DISTANCE_MILES: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.3f miles", (tp_count - seg_count) == 0 ? 0 : VIK_METERS_TO_MILES(tr_len / ( tp_count - seg_count )) ); break; + case VIK_UNITS_DISTANCE_NAUTICAL_MILES: + g_snprintf(tmp_buf, sizeof(tmp_buf), "%.3f NM", (tp_count - seg_count) == 0 ? 0 : VIK_METERS_TO_NAUTICAL_MILES(tr_len / ( tp_count - seg_count )) ); + break; default: g_critical("Houston, we've had a problem. distance=%d", dist_units); } - widgets->w_avg_dist = content[cnt++] = gtk_label_new ( tmp_buf ); + widgets->w_avg_dist = content[cnt++] = ui_label_new_selectable ( tmp_buf ); vik_units_height_t height_units = a_vik_get_units_height (); if ( min_alt == VIK_DEFAULT_ALTITUDE ) @@ -3264,7 +3325,7 @@ void vik_trw_layer_propwin_run ( GtkWindow *parent, g_critical("Houston, we've had a problem. height=%d", height_units); } } - widgets->w_elev_range = content[cnt++] = gtk_label_new ( tmp_buf ); + widgets->w_elev_range = content[cnt++] = ui_label_new_selectable ( tmp_buf ); vik_track_get_total_elevation_gain(tr, &max_alt, &min_alt ); if ( min_alt == VIK_DEFAULT_ALTITUDE ) @@ -3282,7 +3343,7 @@ void vik_trw_layer_propwin_run ( GtkWindow *parent, g_critical("Houston, we've had a problem. height=%d", height_units); } } - widgets->w_elev_gain = content[cnt++] = gtk_label_new ( tmp_buf ); + widgets->w_elev_gain = content[cnt++] = ui_label_new_selectable ( tmp_buf ); #if 0 #define PACK(w) gtk_box_pack_start (GTK_BOX(right_vbox), w, FALSE, FALSE, 0); @@ -3314,15 +3375,15 @@ void vik_trw_layer_propwin_run ( GtkWindow *parent, gchar *msg; msg = vu_get_time_string ( &t1, "%c", &vc, widgets->tz ); - widgets->w_time_start = content[cnt++] = gtk_label_new(msg); + widgets->w_time_start = content[cnt++] = ui_label_new_selectable(msg); g_free ( msg ); msg = vu_get_time_string ( &t2, "%c", &vc, widgets->tz ); - widgets->w_time_end = content[cnt++] = gtk_label_new(msg); + widgets->w_time_end = content[cnt++] = ui_label_new_selectable(msg); g_free ( msg ); g_snprintf(tmp_buf, sizeof(tmp_buf), _("%d minutes"), (int)(t2-t1)/60); - widgets->w_time_dur = content[cnt++] = gtk_label_new(tmp_buf); + widgets->w_time_dur = content[cnt++] = ui_label_new_selectable(tmp_buf); } else { widgets->w_time_start = content[cnt++] = gtk_label_new(_("No Data")); widgets->w_time_end = content[cnt++] = gtk_label_new(_("No Data")); @@ -3335,8 +3396,8 @@ void vik_trw_layer_propwin_run ( GtkWindow *parent, if ( widgets->elev_box ) { GtkWidget *page = NULL; - widgets->w_cur_dist = gtk_label_new(_("No Data")); - widgets->w_cur_elevation = gtk_label_new(_("No Data")); + widgets->w_cur_dist = ui_label_new_selectable(_("No Data")); + widgets->w_cur_elevation = ui_label_new_selectable(_("No Data")); widgets->w_show_dem = gtk_check_button_new_with_mnemonic(_("Show D_EM")); widgets->w_show_alt_gps_speed = gtk_check_button_new_with_mnemonic(_("Show _GPS Speed")); page = create_graph_page (widgets->elev_box, @@ -3352,8 +3413,8 @@ void vik_trw_layer_propwin_run ( GtkWindow *parent, if ( widgets->gradient_box ) { GtkWidget *page = NULL; - widgets->w_cur_gradient_dist = gtk_label_new(_("No Data")); - widgets->w_cur_gradient_gradient = gtk_label_new(_("No Data")); + widgets->w_cur_gradient_dist = ui_label_new_selectable(_("No Data")); + widgets->w_cur_gradient_gradient = ui_label_new_selectable(_("No Data")); widgets->w_show_gradient_gps_speed = gtk_check_button_new_with_mnemonic(_("Show _GPS Speed")); page = create_graph_page (widgets->gradient_box, _("Track Distance:"), widgets->w_cur_gradient_dist, @@ -3367,9 +3428,9 @@ void vik_trw_layer_propwin_run ( GtkWindow *parent, if ( widgets->speed_box ) { GtkWidget *page = NULL; - widgets->w_cur_time = gtk_label_new(_("No Data")); - widgets->w_cur_speed = gtk_label_new(_("No Data")); - widgets->w_cur_time_real = gtk_label_new(_("No Data")); + widgets->w_cur_time = ui_label_new_selectable(_("No Data")); + widgets->w_cur_speed = ui_label_new_selectable(_("No Data")); + widgets->w_cur_time_real = ui_label_new_selectable(_("No Data")); widgets->w_show_gps_speed = gtk_check_button_new_with_mnemonic(_("Show _GPS Speed")); page = create_graph_page (widgets->speed_box, _("Track Time:"), widgets->w_cur_time, @@ -3383,9 +3444,9 @@ void vik_trw_layer_propwin_run ( GtkWindow *parent, if ( widgets->dist_box ) { GtkWidget *page = NULL; - widgets->w_cur_dist_time = gtk_label_new(_("No Data")); - widgets->w_cur_dist_dist = gtk_label_new(_("No Data")); - widgets->w_cur_dist_time_real = gtk_label_new(_("No Data")); + widgets->w_cur_dist_time = ui_label_new_selectable(_("No Data")); + widgets->w_cur_dist_dist = ui_label_new_selectable(_("No Data")); + widgets->w_cur_dist_time_real = ui_label_new_selectable(_("No Data")); widgets->w_show_dist_speed = gtk_check_button_new_with_mnemonic(_("Show S_peed")); page = create_graph_page (widgets->dist_box, _("Track Distance:"), widgets->w_cur_dist_dist, @@ -3399,9 +3460,9 @@ void vik_trw_layer_propwin_run ( GtkWindow *parent, if ( widgets->elev_time_box ) { GtkWidget *page = NULL; - widgets->w_cur_elev_time = gtk_label_new(_("No Data")); - widgets->w_cur_elev_elev = gtk_label_new(_("No Data")); - widgets->w_cur_elev_time_real = gtk_label_new(_("No Data")); + widgets->w_cur_elev_time = ui_label_new_selectable(_("No Data")); + widgets->w_cur_elev_elev = ui_label_new_selectable(_("No Data")); + widgets->w_cur_elev_time_real = ui_label_new_selectable(_("No Data")); widgets->w_show_elev_speed = gtk_check_button_new_with_mnemonic(_("Show S_peed")); widgets->w_show_elev_dem = gtk_check_button_new_with_mnemonic(_("Show D_EM")); page = create_graph_page (widgets->elev_time_box, @@ -3417,8 +3478,8 @@ void vik_trw_layer_propwin_run ( GtkWindow *parent, if ( widgets->speed_dist_box ) { GtkWidget *page = NULL; - widgets->w_cur_speed_dist = gtk_label_new(_("No Data")); - widgets->w_cur_speed_speed = gtk_label_new(_("No Data")); + widgets->w_cur_speed_dist = ui_label_new_selectable(_("No Data")); + widgets->w_cur_speed_speed = ui_label_new_selectable(_("No Data")); widgets->w_show_sd_gps_speed = gtk_check_button_new_with_mnemonic(_("Show _GPS Speed")); page = create_graph_page (widgets->speed_dist_box, _("Track Distance:"), widgets->w_cur_speed_dist,