+ //update the value of the scroll bar
+ if(direction != SCROLL_NONE && direction != SCROLL_JUMP){
+ first = event_viewer_data->raw_trace_data_queue->head;
+ raw_data = (RawTraceData*)g_list_nth_data(first,event_number);
+ time = ltt_time_sub(raw_data->time, event_viewer_data->time_span.startTime);
+ event_viewer_data->vadjust_c->value = ltt_time_to_double(time) * NANOSECONDS_PER_SECOND;
+ g_signal_stop_emission_by_name(G_OBJECT(event_viewer_data->vadjust_c), "value-changed");
+ event_viewer_data->previous_value = event_viewer_data->vadjust_c->value;
+ }
+
+
+ event_viewer_data->start_event_index = event_number;
+ event_viewer_data->end_event_index = event_number + list_height - 1;
+
+ first = event_viewer_data->raw_trace_data_queue->head;
+ gtk_list_store_clear(event_viewer_data->store_m);
+ for(i=event_number; i<event_number+list_height; i++)
+ {
+ guint64 real_data;
+
+ if(i>=event_viewer_data->number_of_events) break;
+
+ raw_data = (RawTraceData*)g_list_nth_data(first, i);
+
+ // Add a new row to the model
+ real_data = raw_data->time.tv_sec;
+ real_data *= NANOSECONDS_PER_SECOND;
+ real_data += raw_data->time.tv_nsec;
+ gtk_list_store_append (event_viewer_data->store_m, &iter);
+ gtk_list_store_set (event_viewer_data->store_m, &iter,
+ CPUID_COLUMN, raw_data->cpu_id,
+ EVENT_COLUMN, raw_data->event_name,
+ TIME_COLUMN, real_data,
+ PID_COLUMN, raw_data->pid,
+ ENTRY_LEN_COLUMN, raw_data->entry_length,
+ EVENT_DESCR_COLUMN, raw_data->event_description,
+ -1);
+/*
+ gtk_list_store_append (event_viewer_data->store_m, &iter);
+ gtk_list_store_set (event_viewer_data->store_m, &iter,
+ CPUID_COLUMN, 0,
+ EVENT_COLUMN, "event irq",
+ TIME_COLUMN, i,
+ PID_COLUMN, 100,
+ ENTRY_LEN_COLUMN, 17,
+ EVENT_DESCR_COLUMN, "Detailed information",
+ -1);
+*/
+ }
+ }
+#ifdef DEBUG //do not use this, it's slower and broken
+ // } else {
+ /* Some events will be reused */
+ if(event_number < event_viewer_data->first_event)
+ {
+ /* scrolling up, prepend events */
+ tree_path = gtk_tree_path_new_from_indices
+ (event_number+list_height-1 -
+ event_viewer_data->first_event + 1,
+ -1);
+ for(i=0; i<event_viewer_data->last_event-(event_number+list_height-1);
+ i++)
+ {
+ /* Remove the last events from the list */
+ if(gtk_tree_model_get_iter(model, &iter, tree_path))
+ gtk_list_store_remove(event_viewer_data->store_m, &iter);
+ }
+
+ for(i=event_viewer_data->first_event-1; i>=event_number; i--)
+ {
+ if(i>=event_viewer_data->number_of_events) break;
+ /* Prepend new events */
+ gtk_list_store_prepend (event_viewer_data->store_m, &iter);
+ gtk_list_store_set (event_viewer_data->store_m, &iter,
+ CPUID_COLUMN, 0,
+ EVENT_COLUMN, "event irq",
+ TIME_COLUMN, i,
+ PID_COLUMN, 100,
+ ENTRY_LEN_COLUMN, 17,
+ EVENT_DESCR_COLUMN, "Detailed information",
+ -1);
+ }
+ } else {
+ /* Scrolling down, append events */
+ for(i=event_viewer_data->first_event; i<event_number; i++)
+ {
+ /* Remove these events from the list */
+ gtk_tree_model_get_iter_first(model, &iter);
+ gtk_list_store_remove(event_viewer_data->store_m, &iter);
+ }
+ for(i=event_viewer_data->last_event+1; i<event_number+list_height; i++)
+ {
+ if(i>=event_viewer_data->number_of_events) break;
+ /* Append new events */
+ gtk_list_store_append (event_viewer_data->store_m, &iter);
+ gtk_list_store_set (event_viewer_data->store_m, &iter,
+ CPUID_COLUMN, 0,
+ EVENT_COLUMN, "event irq",
+ TIME_COLUMN, i,
+ PID_COLUMN, 100,
+ ENTRY_LEN_COLUMN, 17,
+ EVENT_DESCR_COLUMN, "Detailed information",
+ -1);