+void Tree_V_move_cursor_cb (GtkWidget *widget, GtkMovementStep arg1, gint arg2, gpointer data)
+{
+ GtkTreePath *path; // = gtk_tree_path_new();
+ gint *indices;
+ gdouble value;
+ EventViewerData *Event_Viewer_Data = (EventViewerData*)data;
+
+ gtk_tree_view_get_cursor(GTK_TREE_VIEW(Event_Viewer_Data->Tree_V), &path, NULL);
+ if(path == NULL)
+ {
+ /* No prior cursor, put it at beginning of page and let the execution do */
+ path = gtk_tree_path_new_from_indices(0, -1);
+ gtk_tree_view_set_cursor(GTK_TREE_VIEW(Event_Viewer_Data->Tree_V), path, NULL, FALSE);
+ }
+
+ indices = gtk_tree_path_get_indices(path);
+
+ g_critical("DEBUG : move cursor step : %u , int : %i , indice : %i", (guint)arg1, arg2, indices[0]) ;
+
+ value = gtk_adjustment_get_value(Event_Viewer_Data->VAdjust_C);
+
+ if(arg1 == GTK_MOVEMENT_DISPLAY_LINES)
+ {
+ /* Move one line */
+ if(arg2 == 1)
+ {
+ /* move one line down */
+ if(indices[0] == Event_Viewer_Data->Num_Visible_Events - 1)
+ {
+ if(value + Event_Viewer_Data->Num_Visible_Events <=
+ Event_Viewer_Data->Number_Of_Events -1)
+ {
+ g_critical("need 1 event down") ;
+ Event_Viewer_Data->Currently_Selected_Event += 1;
+ gtk_adjustment_set_value(Event_Viewer_Data->VAdjust_C, value+1);
+ //gtk_tree_path_free(path);
+ //path = gtk_tree_path_new_from_indices(Event_Viewer_Data->Num_Visible_Events-1, -1);
+ //gtk_tree_view_set_cursor(GTK_TREE_VIEW(Event_Viewer_Data->Tree_V), path, NULL, FALSE);
+ g_signal_stop_emission_by_name(G_OBJECT(widget), "move-cursor");
+ }
+ }
+ } else {
+ /* Move one line up */
+ if(indices[0] == 0)
+ {
+ if(value - 1 >= 0 )
+ {
+ g_critical("need 1 event up") ;
+ Event_Viewer_Data->Currently_Selected_Event -= 1;
+ gtk_adjustment_set_value(Event_Viewer_Data->VAdjust_C, value-1);
+ //gtk_tree_path_free(path);
+ //path = gtk_tree_path_new_from_indices(0, -1);
+ //gtk_tree_view_set_cursor(GTK_TREE_VIEW(Event_Viewer_Data->Tree_V), path, NULL, FALSE);
+ g_signal_stop_emission_by_name(G_OBJECT(widget), "move-cursor");
+ }
+
+ }
+ }
+
+ }
+
+ if(arg1 == GTK_MOVEMENT_PAGES)
+ {
+ /* Move one page */
+ if(arg2 == 1)
+ {
+ if(Event_Viewer_Data->Num_Visible_Events == 1)
+ value += 1 ;
+ /* move one page down */
+ if(value + Event_Viewer_Data->Num_Visible_Events-1 <=
+ Event_Viewer_Data->Number_Of_Events )
+ {
+ g_critical("need 1 page down") ;
+
+ Event_Viewer_Data->Currently_Selected_Event += Event_Viewer_Data->Num_Visible_Events-1;
+ gtk_adjustment_set_value(Event_Viewer_Data->VAdjust_C,
+ value+(Event_Viewer_Data->Num_Visible_Events-1));
+ //gtk_tree_path_free(path);
+ //path = gtk_tree_path_new_from_indices(0, -1);
+ //gtk_tree_view_set_cursor(GTK_TREE_VIEW(Event_Viewer_Data->Tree_V), path, NULL, FALSE);
+ g_signal_stop_emission_by_name(G_OBJECT(widget), "move-cursor");
+ }
+ } else {
+ /* Move one page up */
+ if(Event_Viewer_Data->Num_Visible_Events == 1)
+ value -= 1 ;
+
+ if(indices[0] < Event_Viewer_Data->Num_Visible_Events - 2 )
+ {
+ if(value - (Event_Viewer_Data->Num_Visible_Events-1) >= 0)
+ {
+ g_critical("need 1 page up") ;
+
+ Event_Viewer_Data->Currently_Selected_Event -= Event_Viewer_Data->Num_Visible_Events-1;
+
+ gtk_adjustment_set_value(Event_Viewer_Data->VAdjust_C,
+ value-(Event_Viewer_Data->Num_Visible_Events-1));
+ //gtk_tree_path_free(path);
+ //path = gtk_tree_path_new_from_indices(0, -1);
+ //gtk_tree_view_set_cursor(GTK_TREE_VIEW(Event_Viewer_Data->Tree_V), path, NULL, FALSE);
+ g_signal_stop_emission_by_name(G_OBJECT(widget), "move-cursor");
+
+ } else {
+ /* Go to first Event */
+ g_critical("need 1 page up") ;
+
+ Event_Viewer_Data->Currently_Selected_Event == 0 ;
+ gtk_adjustment_set_value(Event_Viewer_Data->VAdjust_C,
+ 0);
+ //gtk_tree_path_free(path);
+ //path = gtk_tree_path_new_from_indices(0, -1);
+ //gtk_tree_view_set_cursor(GTK_TREE_VIEW(Event_Viewer_Data->Tree_V), path, NULL, FALSE);
+ g_signal_stop_emission_by_name(G_OBJECT(widget), "move-cursor");
+
+ }
+ }
+
+ }
+
+ }
+
+ if(arg1 == GTK_MOVEMENT_BUFFER_ENDS)
+ {
+ /* Move to the ends of the buffer */
+ if(arg2 == 1)
+ {
+ /* move end of buffer */
+ g_critical("End of buffer") ;
+ Event_Viewer_Data->Currently_Selected_Event = Event_Viewer_Data->Number_Of_Events-1 ;
+ gtk_adjustment_set_value(Event_Viewer_Data->VAdjust_C,
+ Event_Viewer_Data->Number_Of_Events -
+ Event_Viewer_Data->Num_Visible_Events);
+ //gtk_tree_path_free(path);
+ //path = gtk_tree_path_new_from_indices(Event_Viewer_Data->Num_Visible_Events-1, -1);
+ //gtk_tree_view_set_cursor(GTK_TREE_VIEW(Event_Viewer_Data->Tree_V), path, NULL, FALSE);
+ g_signal_stop_emission_by_name(G_OBJECT(widget), "move-cursor");
+ } else {
+ /* Move beginning of buffer */
+ g_critical("Beginning of buffer") ;
+ Event_Viewer_Data->Currently_Selected_Event = 0 ;
+ gtk_adjustment_set_value(Event_Viewer_Data->VAdjust_C, 0);
+ //gtk_tree_path_free(path);
+ //path = gtk_tree_path_new_from_indices(0, -1);
+ //gtk_tree_view_set_cursor(GTK_TREE_VIEW(Event_Viewer_Data->Tree_V), path, NULL, FALSE);
+ g_signal_stop_emission_by_name(G_OBJECT(widget), "move-cursor");
+ }
+
+ }
+
+
+ gtk_tree_path_free(path);
+}
+
+void Tree_V_cursor_changed_cb (GtkWidget *widget, gpointer data)
+{
+ EventViewerData *Event_Viewer_Data = (EventViewerData*) data;
+
+ g_critical("DEBUG : cursor change");
+ /* On cursor change, modify the currently selected event by calling
+ * the right API function */
+ Tree_V_get_cursor(Event_Viewer_Data);
+}
+
+
+void v_scroll_cb (GtkAdjustment *adjustment, gpointer data)
+{
+ EventViewerData *Event_Viewer_Data = (EventViewerData*)data;
+ GtkTreePath *Tree_Path;
+
+ g_critical("DEBUG : scroll signal, value : %f", adjustment->value);
+
+ get_test_data((int)adjustment->value, Event_Viewer_Data->Num_Visible_Events,
+ Event_Viewer_Data);