#define RESERVE_SMALL_SIZE_SQUARE RESERVE_SMALL_SIZE*RESERVE_SMALL_SIZE
#define RESERVE_SMALL_SIZE_CUBE RESERVE_SMALL_SIZE*RESERVE_SMALL_SIZE_SQUARE
+static const LttTime ltt_time_backward = { 1 , 0 };
+
typedef enum _ScrollDirection{
SCROLL_STEP_UP,
SCROLL_STEP_DOWN,
unsigned start_event_index; // the first event shown in the window
unsigned end_event_index; // the last event shown in the window
unsigned size; // maxi number of events loaded when instance the viewer
- gboolean current_time_updated;
+ // gboolean current_time_updated;
//scroll window containing Tree View
GtkWidget * scroll_win;
LttvTracesetContext * tsc);
//! Event Viewer's constructor hook
-GtkWidget *h_gui_events(Tab *tab, LttvTracesetSelector * s, char* key);
+GtkWidget *h_gui_events(Tab *tab);
//! Event Viewer's constructor
-EventViewerData *gui_events(Tab *tab, LttvTracesetSelector *s, char *key);
+EventViewerData *gui_events(Tab *tab);
//! Event Viewer's destructor
void gui_events_destructor(EventViewerData *event_viewer_data);
void gui_events_free(EventViewerData *event_viewer_data);
static void tree_v_size_request_cb (GtkWidget *widget, GtkRequisition *requisition, gpointer data);
static void tree_v_cursor_changed_cb (GtkWidget *widget, gpointer data);
static void tree_v_move_cursor_cb (GtkWidget *widget, GtkMovementStep arg1, gint arg2, gpointer data);
-static void tree_v_grab_focus(GtkWidget *widget, gpointer data);
static void get_data(double time, guint list_height,
* @return The widget created.
*/
GtkWidget *
-h_gui_events(Tab * tab, LttvTracesetSelector * s, char* key)
+h_gui_events(Tab * tab)
{
- EventViewerData* event_viewer_data = gui_events(tab, s, key) ;
-
+ EventViewerData* event_viewer_data = gui_events(tab) ;
if(event_viewer_data)
return event_viewer_data->hbox_v;
else return NULL;
* @return The Event viewer data created.
*/
EventViewerData *
-gui_events(Tab *tab, LttvTracesetSelector * s,char* key )
+gui_events(Tab *tab)
{
LttTime end;
GtkTreeViewColumn *column;
G_CALLBACK (tree_v_move_cursor_cb),
event_viewer_data);
- g_signal_connect (G_OBJECT (event_viewer_data->tree_v), "grab-focus",
- G_CALLBACK (tree_v_grab_focus),
- event_viewer_data);
-
// Use on each column!
//gtk_tree_view_column_set_sizing(event_viewer_data->tree_v, GTK_TREE_VIEW_COLUMN_FIXED);
/* Set the Selected Event */
// tree_v_set_cursor(event_viewer_data);
- event_viewer_data->current_time_updated = FALSE;
+ // event_viewer_data->current_time_updated = FALSE;
event_viewer_data->size = RESERVE_SMALL_SIZE;
g_object_set_data_full(
if(ltt_time.tv_sec != current_time.tv_sec ||
ltt_time.tv_nsec != current_time.tv_nsec){
- event_viewer_data->current_time_updated = TRUE;
- lttvwindow_report_current_time(tab,<t_time);
+ // event_viewer_data->current_time_updated = TRUE;
+ lttvwindow_report_current_time(tab,ltt_time);
}
}else{
g_warning("Can not get iter\n");
// NULL, FALSE);
gtk_tree_path_free(tree_path);
}
-
-
}
gint get_cell_height(GtkTreeView *TreeView)
switch(direction){
case SCROLL_STEP_UP:
- g_debug("direction STEP_UP");
+ if(direction == SCROLL_STEP_UP) g_debug("direction STEP_UP");
case SCROLL_PAGE_UP:
- g_debug("direction PAGE_UP");
+ if(direction == SCROLL_PAGE_UP) g_debug("direction PAGE_UP");
if(direction == SCROLL_PAGE_UP){
backward = list_height>event_viewer_data->start_event_index ? TRUE : FALSE;
}else{
backward = event_viewer_data->start_event_index == 0 ? TRUE : FALSE;
}
if(backward){
+ first = event_viewer_data->event_fields_queue->head;
+ if(!first)break;
+ event_fields = (EventFields*)first->data;
+ LttTime backward_start = event_fields->time;
+
+ maxNum = RESERVE_SMALL_SIZE_CUBE;
event_viewer_data->append = FALSE;
do{
if(direction == SCROLL_PAGE_UP){
}else{
minNum = 1;
}
-
first = event_viewer_data->event_fields_queue->head;
if(!first)break;
event_fields = (EventFields*)first->data;
end = event_fields->time;
- if(end.tv_nsec != 0)
- end.tv_nsec--;
- else {
- g_assert(end.tv_sec != 0);
- end.tv_sec--;
- end.tv_nsec = NANOSECONDS_PER_SECOND-1;
- }
+
+ backward_start = LTT_TIME_MAX(ltt_time_sub(backward_start,
+ ltt_time_backward),
+ tsc->time_span.start_time);
+
+ /*
ltt_event_position_get(event_fields->ep, &block_num, &event_num, &tf);
if(size !=0){
if(event_num > minNum){
}
maxNum = RESERVE_SMALL_SIZE_CUBE;
}
+ */
event_viewer_data->current_event_index = event_viewer_data->start_event_index;
- get_events(event_viewer_data, start, end, maxNum, &size);
+ get_events(event_viewer_data, backward_start, end, maxNum, &size);
event_viewer_data->start_event_index = event_viewer_data->current_event_index;
- if(size < minNum && (start.tv_sec !=0 || start.tv_nsec !=0))
+ if(size < minNum
+ && (ltt_time_compare(backward_start, tsc->time_span.start_time)>0))
need_backward_again = TRUE;
else need_backward_again = FALSE;
if(size == 0){
/* May already been done by GTK window closing */
if(GTK_IS_WIDGET(event_viewer_data->hbox_v)){
- gui_events_free(event_viewer_data);
gtk_widget_destroy(event_viewer_data->hbox_v);
- event_viewer_data = NULL;
}
/* Destroy the Tree View */
{
EventViewerData *event_viewer_data = (EventViewerData*) hook_data;
const LttTime * current_time = (LttTime*)call_data;
- guint64 nsec = current_time->tv_sec * NANOSECONDS_PER_SECOND
- + current_time->tv_nsec;
+ guint64 nsec = (guint64)current_time->tv_sec * NANOSECONDS_PER_SECOND
+ + (guint64)current_time->tv_nsec;
GtkTreeIter iter;
guint64 time;
- int count = -1;
GtkTreeModel* model = (GtkTreeModel*)event_viewer_data->store_m;
GList * list;
EventFields * data, *data1;
TimeInterval time_span = tsc->time_span;
if(!event_viewer_data->event_fields_queue->head) return FALSE;
-
+#if 0
if(event_viewer_data->current_time_updated ){
event_viewer_data->current_time_updated = FALSE;
return FALSE;
}
-
+#endif //0
//check if the event is shown in the current viewer
+ gint count = 0;
+ gboolean event_shown = FALSE;
if(gtk_tree_model_get_iter_first(model, &iter)){
- while(1){
- gtk_tree_model_get(model, &iter, TIME_COLUMN, &time, -1);
- if(time < nsec){
- if(!gtk_tree_model_iter_next(model, &iter)){
- count = -1;
- break;
- }
- count++;
- }else{
- break;
+ gtk_tree_model_get(model, &iter, TIME_COLUMN, &time, -1);
+ if(time > nsec){
+ /* Event is before the list */
+ } else {
+ /* Event can be in the list */
+ if(time >= nsec){
+ /* found */
+ event_shown = TRUE;
+ } else {
+ while(gtk_tree_model_iter_next(model, &iter)) {
+ gtk_tree_model_get(model, &iter, TIME_COLUMN, &time, -1);
+ count++;
+ if(time >= nsec){
+ /* found */
+ event_shown = TRUE;
+ break;
+ }
+ }
}
}
- // event_selected_hook(event_viewer_data, &count);
}
- //the event is not shown in the current viewer
- if(count == -1){
+ if(!event_shown)
+ {
+ //the event is not shown in the current viewer
count = 0;
//check if the event is in the buffer
list = event_viewer_data->event_fields_queue->head;
sprintf(str_path,"%d\0",count);
path = gtk_tree_path_new_from_string (str_path);
gtk_tree_view_set_cursor(GTK_TREE_VIEW(event_viewer_data->tree_v), path, NULL, FALSE);
- g_signal_stop_emission_by_name(G_OBJECT(event_viewer_data->tree_v), "cursor-changed");
+ //g_signal_stop_emission_by_name(G_OBJECT(event_viewer_data->tree_v), "cursor-changed");
gtk_tree_path_free(path);
return FALSE;
end = ltt_time_sub(time_span.end_time, time_span.start_time);
event_viewer_data->vadjust_c->upper = ltt_time_to_double(end) * NANOSECONDS_PER_SECOND;
+ g_signal_emit_by_name(event_viewer_data->vadjust_c, "value-changed");
// event_viewer_data->vadjust_c->value = 0;
return FALSE;
}
-void tree_v_grab_focus(GtkWidget *widget, gpointer data){
- EventViewerData *event_viewer_data = (EventViewerData *)data;
- Tab * tab = event_viewer_data->tab;
- lttvwindow_report_focus(tab, event_viewer_data->hbox_v);
-}
-
void update_raw_data_array(EventViewerData* event_viewer_data, unsigned size)
{
EventFields * data;
NULL,
event_viewer_data->event_hooks,
NULL);
+ if(event_viewer_data->append == TRUE) {
+ /* append data */
+ lttv_process_traceset_middle(tsc, end, max_num_events, NULL);
+ } else{
+ guint count;
+ LttvTracefileContext *tfc;
+ /* prepend data */
+ do {
+ /* clear the temp list */
+ while(g_queue_pop_head(event_viewer_data->event_fields_queue_tmp));
+ /* read max_num events max */
+ count = lttv_process_traceset_middle(tsc, end, max_num_events, NULL);
+ /* loop if reached the max number of events to read, but not
+ * if end of trace or end time reached.*/
+ tfc = lttv_traceset_context_get_current_tfc(tsc);
+ } while(max_num_events == count
+ && (tfc != NULL && ltt_time_compare(tfc->timestamp, end) < 0));
- lttv_process_traceset_middle(tsc, end, max_num_events, NULL);
-
+ }
+
//remove_context_hooks(event_viewer_data,tsc);
lttv_process_traceset_end(tsc,
NULL,