From e1e2f2c685820111fb9733422544d1847dea2a59 Mon Sep 17 00:00:00 2001 From: Jocelyn Jaubert Date: Tue, 6 Feb 2007 12:54:24 +0000 Subject: [PATCH] Patch from Jocelyn Jaubert. Add time position to Track Poperties --- ChangeLog | 5 +++++ src/viktrack.c | 10 ++------- src/viktrack.h | 2 +- src/viktrwlayer_propwin.c | 54 ++++++++++++++++++++++++++++++++++++++++++----- 4 files changed, 57 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index fbdec64..71cffa5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,9 @@ 2007-02-06 +Jocelyn Jaubert + * Add new information to Track Properties. Postion in time will be + tracked and display when moving mouse cursor around the track graph. + +2007-02-06 Quy Tonthat : * New google version numbers. * correct main window title and viking website. diff --git a/src/viktrack.c b/src/viktrack.c index 2694537..5bc47c5 100644 --- a/src/viktrack.c +++ b/src/viktrack.c @@ -633,12 +633,11 @@ gdouble *vik_track_make_speed_map ( const VikTrack *tr, guint16 num_chunks ) } /* by Alex Foobarian */ -VikCoord *vik_track_get_closest_tp_by_percentage_dist ( VikTrack *tr, gdouble reldist ) +VikTrackpoint *vik_track_get_closest_tp_by_percentage_dist ( VikTrack *tr, gdouble reldist ) { gdouble dist = vik_track_get_length_including_gaps(tr) * reldist; gdouble current_dist = 0.0; gdouble current_inc = 0.0; - VikCoord *rv; if ( tr->trackpoints ) { GList *iter = tr->trackpoints->next; @@ -656,12 +655,7 @@ VikCoord *vik_track_get_closest_tp_by_percentage_dist ( VikTrack *tr, gdouble re if ( iter->prev && abs(current_dist-current_inc-dist) < abs(current_dist-dist) ) iter = iter->prev; - - - rv = g_malloc(sizeof(VikCoord)); - *rv = VIK_TRACKPOINT(iter->data)->coord; - - return rv; + return VIK_TRACKPOINT(iter->data); } return NULL; diff --git a/src/viktrack.h b/src/viktrack.h index f87452e..b74cea5 100644 --- a/src/viktrack.h +++ b/src/viktrack.h @@ -74,7 +74,7 @@ gdouble vik_track_get_average_speed(const VikTrack *tr); void vik_track_convert ( VikTrack *tr, VikCoordMode dest_mode ); gdouble *vik_track_make_elevation_map ( const VikTrack *tr, guint16 num_chunks ); void vik_track_get_total_elevation_gain(const VikTrack *tr, gdouble *up, gdouble *down); -VikCoord *vik_track_get_closest_tp_by_percentage_dist ( VikTrack *tr, gdouble reldist ); +VikTrackpoint *vik_track_get_closest_tp_by_percentage_dist ( VikTrack *tr, gdouble reldist ); gdouble *vik_track_make_speed_map ( const VikTrack *tr, guint16 num_chunks ); gboolean vik_track_get_minmax_alt ( const VikTrack *tr, gdouble *min_alt, gdouble *max_alt ); void vik_track_marshall ( VikTrack *tr, guint8 **data, guint *len); diff --git a/src/viktrwlayer_propwin.c b/src/viktrwlayer_propwin.c index 163cc99..1e98f1f 100644 --- a/src/viktrwlayer_propwin.c +++ b/src/viktrwlayer_propwin.c @@ -57,17 +57,51 @@ static void minmax_alt(const gdouble *altitudes, gdouble *min, gdouble *max) } } +static GtkWidget *label_date; + #define MARGIN 50 #define LINES 5 void track_profile_click( GtkWidget *image, GdkEventButton *event, gpointer *pass_along ) { + gdouble x = event->x - image->allocation.width / 2 + PROFILE_WIDTH / 2 - MARGIN / 2; + if (x < 0) + x = 0; + if (x > PROFILE_WIDTH) + x = PROFILE_WIDTH; VikTrack *tr = pass_along[0]; - VikCoord *coord = vik_track_get_closest_tp_by_percentage_dist ( tr, (gdouble) (event->x - MARGIN - 2) / PROFILE_WIDTH ); - if ( coord ) { + VikTrackpoint *trackpoint = vik_track_get_closest_tp_by_percentage_dist ( tr, (gdouble) x / PROFILE_WIDTH ); + if ( trackpoint ) { + VikCoord coord = trackpoint->coord; VikLayersPanel *vlp = pass_along[1]; - vik_viewport_set_center_coord ( vik_layers_panel_get_viewport(vlp), coord ); + vik_viewport_set_center_coord ( vik_layers_panel_get_viewport(vlp), &coord ); vik_layers_panel_emit_update ( vlp ); - g_free ( coord ); + } +} +void track_profile_move( GtkWidget *image, GdkEventMotion *event, gpointer *pass_along ) +{ + VikTrack *tr = pass_along[0]; + int mouse_x, mouse_y; + GdkModifierType state; + + if (event->is_hint) + gdk_window_get_pointer (event->window, &mouse_x, &mouse_y, &state); + else + mouse_x = event->x; + + gdouble x = mouse_x - image->allocation.width / 2 + PROFILE_WIDTH / 2 - MARGIN / 2; + if (x < 0) + x = 0; + if (x > PROFILE_WIDTH) + x = PROFILE_WIDTH; + + VikTrackpoint *trackpoint = vik_track_get_closest_tp_by_percentage_dist ( tr, (gdouble) x / PROFILE_WIDTH ); + if (trackpoint) { + time_t t1 = trackpoint->timestamp; + static gchar tmp_buf[25]; + strncpy(tmp_buf, ctime(&t1), sizeof(tmp_buf)); + tmp_buf[strlen(tmp_buf)-1] = 0; + + gtk_label_set_text(GTK_LABEL(label_date), tmp_buf); } } @@ -152,8 +186,12 @@ GtkWidget *vik_trw_layer_create_profile ( GtkWidget *window, VikTrack *tr, gdoub eventbox = gtk_event_box_new (); g_signal_connect ( G_OBJECT(eventbox), "button_press_event", G_CALLBACK(track_profile_click), pass_along ); + g_signal_connect ( G_OBJECT(eventbox), "motion_notify_event", G_CALLBACK(track_profile_move), pass_along ); g_signal_connect_swapped ( G_OBJECT(eventbox), "destroy", G_CALLBACK(g_free), pass_along ); gtk_container_add ( GTK_CONTAINER(eventbox), image ); + gtk_widget_set_events (eventbox, GDK_BUTTON_PRESS_MASK + | GDK_POINTER_MOTION_MASK + | GDK_POINTER_MOTION_HINT_MASK); return eventbox; } @@ -258,8 +296,12 @@ GtkWidget *vik_trw_layer_create_vtdiag ( GtkWidget *window, VikTrack *tr, gpoint eventbox = gtk_event_box_new (); g_signal_connect ( G_OBJECT(eventbox), "button_press_event", G_CALLBACK(track_profile_click), pass_along ); + g_signal_connect ( G_OBJECT(eventbox), "motion_notify_event", G_CALLBACK(track_profile_move), pass_along ); g_signal_connect_swapped ( G_OBJECT(eventbox), "destroy", G_CALLBACK(g_free), pass_along ); gtk_container_add ( GTK_CONTAINER(eventbox), image ); + gtk_widget_set_events (eventbox, GDK_BUTTON_PRESS_MASK + | GDK_POINTER_MOTION_MASK + | GDK_POINTER_MOTION_HINT_MASK); return eventbox; } @@ -297,7 +339,7 @@ gint vik_trw_layer_propwin_run ( GtkWindow *parent, VikTrack *tr, gpointer vlp ) int cnt; int i; - static gchar *label_texts[] = { "Comment:", "Track Length:", "Trackpoints:", "Segments:", "Duplicate Points:", "Max Speed:", "Avg. Speed:", "Avg. Dist. Between TPs:", "Elevation Range:", "Total Elevation Gain/Loss:", "Start:", "End:", "Duration:" }; + static gchar *label_texts[] = { "Comment:", "Track Length:", "Trackpoints:", "Segments:", "Duplicate Points:", "Max Speed:", "Avg. Speed:", "Avg. Dist. Between TPs:", "Elevation Range:", "Total Elevation Gain/Loss:", "Start:", "End:", "Duration:", "Selected date" }; static gchar tmp_buf[25]; gdouble tmp_speed; @@ -389,6 +431,8 @@ gint vik_trw_layer_propwin_run ( GtkWindow *parent, VikTrack *tr, gpointer vlp ) content[cnt++] = gtk_label_new("No Data"); content[cnt++] = gtk_label_new("No Data"); } + label_date = gtk_label_new("No Data"); + content[cnt++] = label_date; table = GTK_TABLE(gtk_table_new (cnt, 2, FALSE)); gtk_table_set_col_spacing (table, 0, 10); -- 2.11.4.GIT