static gchar * params_degree_formats[] = {"DDD", "DMM", "DMS", NULL};
static gchar * params_units_distance[] = {"Kilometres", "Miles", NULL};
+static gchar * params_units_speed[] = {"km/h", "mph", "m/s", NULL};
static VikLayerParam prefs1[] = {
{ VIKING_PREFERENCES_NAMESPACE "degree_format", VIK_LAYER_PARAM_UINT, VIK_DEGREE_FORMAT_DMS, N_("Degree format:"), VIK_LAYER_WIDGET_COMBOBOX, params_degree_formats, NULL },
{ VIKING_PREFERENCES_NAMESPACE "units_distance", VIK_LAYER_PARAM_UINT, VIK_UNITS_DISTANCE_KILOMETRES, N_("Distance units:"), VIK_LAYER_WIDGET_COMBOBOX, params_units_distance, NULL },
};
+static VikLayerParam prefs3[] = {
+ { VIKING_PREFERENCES_NAMESPACE "units_speed", VIK_LAYER_PARAM_UINT, VIK_UNITS_SPEED_KILOMETRES_PER_HOUR, N_("Speed units:"), VIK_LAYER_WIDGET_COMBOBOX, params_units_speed, NULL },
+};
+
void a_vik_preferences_init ()
{
a_preferences_register_group ( VIKING_PREFERENCES_GROUP_KEY, "Global preferences" );
tmp.u = VIK_UNITS_DISTANCE_KILOMETRES;
a_preferences_register(prefs2, tmp, VIKING_PREFERENCES_GROUP_KEY);
+
+ tmp.u = VIK_UNITS_SPEED_KILOMETRES_PER_HOUR;
+ a_preferences_register(prefs3, tmp, VIKING_PREFERENCES_GROUP_KEY);
}
vik_degree_format_t a_vik_get_degree_format ( )
units = a_preferences_get(VIKING_PREFERENCES_NAMESPACE "units_distance")->u;
return units;
}
+
+vik_units_speed_t a_vik_get_units_speed ( )
+{
+ vik_units_speed_t units;
+ units = a_preferences_get(VIKING_PREFERENCES_NAMESPACE "units_speed")->u;
+ return units;
+}
return eventbox;
}
-#define METRIC 1
-#ifdef METRIC
-#define MTOK(v) ( (v)*3.6) /* m/s to km/h */
-#else
-#define MTOK(v) ( (v)*3600.0/1000.0 * 0.6214) /* m/s to mph - we'll handle this globally eventually but for now ...*/
-#endif
GtkWidget *vik_trw_layer_create_vtdiag ( GtkWidget *window, VikTrack *tr, gpointer vlp, PropWidgets *widgets)
{
pix = gdk_pixmap_new( window->window, PROFILE_WIDTH + MARGIN, PROFILE_HEIGHT, -1 );
image = gtk_image_new_from_pixmap ( pix, NULL );
- for (i=0; i<PROFILE_WIDTH; i++) {
- speeds[i] = MTOK(speeds[i]);
- }
-
minmax_alt(speeds, &mins, &maxs);
if (mins < 0.0)
mins = 0; /* splines sometimes give negative speeds */
pfd = pango_font_description_from_string (LABEL_FONT);
pango_layout_set_font_description (pl, pfd);
pango_font_description_free (pfd);
-#ifdef METRIC
- sprintf(s, "%5dkm/h", (int)(mins + (LINES-i)*(maxs-mins)/LINES));
-#else
- sprintf(s, "%8dmph", (int)(mins + (LINES-i)*(maxs-mins)/LINES));
-#endif
+ vik_units_speed_t speed_units = a_vik_get_units_speed ();
+ switch (speed_units) {
+ case VIK_UNITS_SPEED_KILOMETRES_PER_HOUR:
+ sprintf(s, "%8dkm/h", (int)((mins + (LINES-i)*(maxs-mins)/LINES)*3.6));
+ break;
+ case VIK_UNITS_SPEED_MILES_PER_HOUR:
+ sprintf(s, "%8dmph", (int)((mins + (LINES-i)*(maxs-mins)/LINES)*2.23693629));
+ break;
+ case VIK_UNITS_SPEED_METRES_PER_SECOND:
+ sprintf(s, "%8dm/s", (int)(mins + (LINES-i)*(maxs-mins)/LINES));
+ break;
+ default:
+ sprintf(s, "--");
+ g_critical("Houston, we've had a problem. speed=%d", speed_units);
+ }
+
pango_layout_set_text(pl, s, -1);
pango_layout_get_pixel_size (pl, &w, &h);
gdk_draw_layout(GDK_DRAWABLE(pix), window->style->fg_gc[0], MARGIN-w-3,
if (isnan(gps_speed))
continue;
int x = MARGIN + PROFILE_WIDTH * (VIK_TRACKPOINT(iter->data)->timestamp - beg_time) / dur;
- int y = PROFILE_HEIGHT - PROFILE_HEIGHT*(MTOK(gps_speed) - mins)/(maxs - mins);
+ int y = PROFILE_HEIGHT - PROFILE_HEIGHT*(gps_speed - mins)/(maxs - mins);
gdk_draw_rectangle(GDK_DRAWABLE(pix), gps_speed_gc, TRUE, x-2, y-2, 4, 4);
}
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 );
+ vik_units_speed_t speed_units = a_vik_get_units_speed ();
tmp_speed = vik_track_get_max_speed(tr);
if ( tmp_speed == 0 )
g_snprintf(tmp_buf, sizeof(tmp_buf), _("No Data"));
- else
- g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f m/s (%.0f km/h)", tmp_speed, MTOK(tmp_speed) );
+ else {
+ switch (speed_units) {
+ case VIK_UNITS_SPEED_KILOMETRES_PER_HOUR:
+ g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f km/h", tmp_speed*3.6 );
+ break;
+ case VIK_UNITS_SPEED_MILES_PER_HOUR:
+ g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f mph", tmp_speed*2.23693629 );
+ break;
+ case VIK_UNITS_SPEED_METRES_PER_SECOND:
+ g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f m/s", tmp_speed );
+ break;
+ default:
+ g_snprintf (tmp_buf, sizeof(tmp_buf), "--" );
+ g_critical("Houston, we've had a problem. speed=%d", speed_units);
+ }
+ }
widgets->w_max_speed = content[cnt++] = gtk_label_new ( tmp_buf );
tmp_speed = vik_track_get_average_speed(tr);
if ( tmp_speed == 0 )
g_snprintf(tmp_buf, sizeof(tmp_buf), _("No Data"));
- else
- g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f m/s (%.0f km/h)", tmp_speed, MTOK(tmp_speed) );
+ else {
+ switch (speed_units) {
+ case VIK_UNITS_SPEED_KILOMETRES_PER_HOUR:
+ g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f km/h", tmp_speed*3.6 );
+ break;
+ case VIK_UNITS_SPEED_MILES_PER_HOUR:
+ g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f mph", tmp_speed* 2.23693629 );
+ break;
+ case VIK_UNITS_SPEED_METRES_PER_SECOND:
+ g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f m/s", tmp_speed );
+ break;
+ default:
+ g_snprintf (tmp_buf, sizeof(tmp_buf), "--" );
+ g_critical("Houston, we've had a problem. speed=%d", speed_units);
+ }
+ }
widgets->w_avg_speed = content[cnt++] = gtk_label_new ( tmp_buf );
switch (dist_units) {
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_coord_diff(&(tp->coord), &(tpwin->cur_tp->coord)) / (ABS(tp->timestamp - tpwin->cur_tp->timestamp)) * 3.6 );
+ break;
+ case VIK_UNITS_SPEED_MILES_PER_HOUR:
+ g_snprintf ( tmp_str, sizeof(tmp_str), "%.2f mph", vik_coord_diff(&(tp->coord), &(tpwin->cur_tp->coord)) / (ABS(tp->timestamp - tpwin->cur_tp->timestamp)) * 2.23693629 );
+ 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;
+ 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 );
}
}