X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/4b00e58107b4b87377d09d856783d82e251b6014..8cd10bb4dc58e659a2f1527c4eb5927320540898:/src/viktrwlayer_propwin.c diff --git a/src/viktrwlayer_propwin.c b/src/viktrwlayer_propwin.c index 163cc998..1e98f1f5 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);