X-Git-Url: https://git.lttng.org/?p=lttv.git;a=blobdiff_plain;f=lttv%2Fmodules%2Fgui%2Flttvwindow%2Flttvwindow%2Fcallbacks.c;h=7c113118ac79b0bd58d410a0900e5dff97e27b70;hp=d58c3137af64f90a95c9f630df9e8b5612aaf787;hb=1167062fa9bd8dc2a698106b7d58f63ea6c99a8c;hpb=482fe4814d81bd6109f8ddcada7784b288bfabda diff --git a/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c b/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c index d58c3137..7c113118 100644 --- a/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c +++ b/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c @@ -37,17 +37,25 @@ #include #include #include +#include +#ifdef BABEL_CLEANUP #include -#include #include +#endif /* BABEL_CLEANUP */ +#include #include #include #include +#include #include #include #include #include +#include +#include +#include + static LttTime lttvwindow_default_time_width = { 1, 0 }; #define CLIP_BUF 256 // size of clipboard buffer @@ -74,12 +82,21 @@ char * get_selection(MainWindow *mw, void init_tab(Tab *tab, MainWindow * mw, Tab *copy_tab, GtkNotebook * notebook, char * label); +int update_traceset(Tab *tab, LttvTraceset *traceset); + static void insert_viewer(GtkWidget* widget, lttvwindow_viewer_constructor constructor); LttvPluginTab *create_new_tab(GtkWidget* widget, gpointer user_data); static gboolean lttvwindow_process_pending_requests(Tab *tab); +static void on_timebar_starttime_changed(Timebar *timebar, + gpointer user_data); +static void on_timebar_endtime_changed(Timebar *timebar, + gpointer user_data); +static void on_timebar_currenttime_changed(Timebar *timebar, + gpointer user_data); + enum { CHECKBOX_COLUMN, NAME_COLUMN, @@ -92,262 +109,6 @@ enum N_COLUMNS }; -/* Pasting routines */ - -static void MEventBox1a_receive(GtkClipboard *clipboard, - const gchar *text, - gpointer data) -{ - if(text == NULL) return; - Tab *tab = (Tab *)data; - gchar buffer[CLIP_BUF]; - gchar *ptr = buffer, *ptr_ssec, *ptr_snsec, *ptr_esec, *ptr_ensec; - - strncpy(buffer, text, CLIP_BUF); - - /* start */ - while(!isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++; - /* remove leading junk */ - ptr_ssec = ptr; - while(isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++; - /* read all the first number */ - *ptr = '\0'; - ptr++; - - while(!isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++; - /* remove leading junk */ - ptr_snsec = ptr; - while(isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++; - /* read all the first number */ - *ptr = '\0'; - - /* end */ - while(!isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++; - /* remove leading junk */ - ptr_esec = ptr; - while(isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++; - /* read all the first number */ - *ptr = '\0'; - ptr++; - - while(!isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++; - /* remove leading junk */ - ptr_ensec = ptr; - while(isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++; - /* read all the first number */ - *ptr = '\0'; - - gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry1), - (double)strtoul(ptr_ssec, NULL, 10)); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry2), - (double)strtoul(ptr_snsec, NULL, 10)); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry3), - (double)strtoul(ptr_esec, NULL, 10)); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry4), - (double)strtoul(ptr_ensec, NULL, 10)); -} - -static gboolean on_MEventBox1a_paste(GtkWidget *widget, GdkEventButton *event, - gpointer data) -{ - Tab *tab = (Tab*)data; - - GtkClipboard *clip = gtk_clipboard_get_for_display(gdk_display_get_default(), - GDK_SELECTION_PRIMARY); - gtk_clipboard_request_text(clip, - (GtkClipboardTextReceivedFunc)MEventBox1a_receive, - (gpointer)tab); - return 0; -} - - -/* Start */ -static void MEventBox1b_receive(GtkClipboard *clipboard, - const gchar *text, - gpointer data) -{ - if(text == NULL) return; - Tab *tab = (Tab *)data; - gchar buffer[CLIP_BUF]; - gchar *ptr = buffer, *ptr_sec, *ptr_nsec; - - strncpy(buffer, text, CLIP_BUF); - - while(!isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++; - /* remove leading junk */ - ptr_sec = ptr; - while(isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++; - /* read all the first number */ - *ptr = '\0'; - ptr++; - - while(!isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++; - /* remove leading junk */ - ptr_nsec = ptr; - while(isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++; - /* read all the first number */ - *ptr = '\0'; - - gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry1), - (double)strtoul(ptr_sec, NULL, 10)); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry2), - (double)strtoul(ptr_nsec, NULL, 10)); -} - -/* Start */ -static gboolean on_MEventBox1b_paste(GtkWidget *widget, GdkEventButton *event, - gpointer data) -{ - Tab *tab = (Tab*)data; - - GtkClipboard *clip = gtk_clipboard_get_for_display(gdk_display_get_default(), - GDK_SELECTION_PRIMARY); - gtk_clipboard_request_text(clip, - (GtkClipboardTextReceivedFunc)MEventBox1b_receive, - (gpointer)tab); - return 0; -} - -/* End */ -static void MEventBox3b_receive(GtkClipboard *clipboard, - const gchar *text, - gpointer data) -{ - if(text == NULL) return; - Tab *tab = (Tab *)data; - gchar buffer[CLIP_BUF]; - gchar *ptr = buffer, *ptr_sec, *ptr_nsec; - - strncpy(buffer, text, CLIP_BUF); - - while(!isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++; - /* remove leading junk */ - ptr_sec = ptr; - while(isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++; - /* read all the first number */ - *ptr = '\0'; - ptr++; - - while(!isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++; - /* remove leading junk */ - ptr_nsec = ptr; - while(isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++; - /* read all the first number */ - *ptr = '\0'; - - gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry3), - (double)strtoul(ptr_sec, NULL, 10)); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry4), - (double)strtoul(ptr_nsec, NULL, 10)); -} - -/* End */ -static gboolean on_MEventBox3b_paste(GtkWidget *widget, GdkEventButton *event, - gpointer data) -{ - Tab *tab = (Tab*)data; - - GtkClipboard *clip = gtk_clipboard_get_for_display(gdk_display_get_default(), - GDK_SELECTION_PRIMARY); - gtk_clipboard_request_text(clip, - (GtkClipboardTextReceivedFunc)MEventBox3b_receive, - (gpointer)tab); - return 0; -} - -/* Current */ -static void MEventBox5b_receive(GtkClipboard *clipboard, - const gchar *text, - gpointer data) -{ - if(text == NULL) return; - Tab *tab = (Tab *)data; - gchar buffer[CLIP_BUF]; - gchar *ptr = buffer, *ptr_sec, *ptr_nsec; - - strncpy(buffer, text, CLIP_BUF); - - while(!isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++; - /* remove leading junk */ - ptr_sec = ptr; - while(isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++; - /* read all the first number */ - *ptr = '\0'; - ptr++; - - while(!isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++; - /* remove leading junk */ - ptr_nsec = ptr; - while(isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++; - /* read all the first number */ - *ptr = '\0'; - - gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry5), - (double)strtoul(ptr_sec, NULL, 10)); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry6), - (double)strtoul(ptr_nsec, NULL, 10)); -} - -/* Current */ -static gboolean on_MEventBox5b_paste(GtkWidget *widget, GdkEventButton *event, - gpointer data) -{ - Tab *tab = (Tab*)data; - - GtkClipboard *clip = gtk_clipboard_get_for_display(gdk_display_get_default(), - GDK_SELECTION_PRIMARY); - gtk_clipboard_request_text(clip, - (GtkClipboardTextReceivedFunc)MEventBox5b_receive, - (gpointer)tab); - return 0; -} - -/* Interval */ -static void MEventBox8_receive(GtkClipboard *clipboard, - const gchar *text, - gpointer data) -{ - if(text == NULL) return; - Tab *tab = (Tab *)data; - gchar buffer[CLIP_BUF]; - gchar *ptr = buffer, *ptr_sec, *ptr_nsec; - - strncpy(buffer, text, CLIP_BUF); - - while(!isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++; - /* remove leading junk */ - ptr_sec = ptr; - while(isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++; - /* read all the first number */ - *ptr = '\0'; - ptr++; - - while(!isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++; - /* remove leading junk */ - ptr_nsec = ptr; - while(isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++; - /* read all the first number */ - *ptr = '\0'; - - gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry7), - (double)strtoul(ptr_sec, NULL, 10)); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry8), - (double)strtoul(ptr_nsec, NULL, 10)); -} - -/* Interval */ -static gboolean on_MEventBox8_paste(GtkWidget *widget, GdkEventButton *event, - gpointer data) -{ - Tab *tab = (Tab*)data; - - GtkClipboard *clip = gtk_clipboard_get_for_display(gdk_display_get_default(), - GDK_SELECTION_PRIMARY); - gtk_clipboard_request_text(clip, - (GtkClipboardTextReceivedFunc)MEventBox8_receive, - (gpointer)tab); - return 0; -} #if 0 static void on_top_notify(GObject *gobject, @@ -418,10 +179,8 @@ insert_viewer_wrap(GtkWidget *menuitem, gpointer user_data) void insert_viewer(GtkWidget* widget, lttvwindow_viewer_constructor constructor) { GtkWidget * viewer_container; - MainWindow * mw_data = get_window_data_struct(widget); GtkWidget * notebook = lookup_widget(widget, "MNotebook"); GtkWidget * viewer; - TimeInterval * time_interval; GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook))); LttvPluginTab *ptab; @@ -436,7 +195,7 @@ void insert_viewer(GtkWidget* widget, lttvwindow_viewer_constructor constructor) viewer_container = tab->viewer_container; - viewer = (GtkWidget*)constructor(ptab); + viewer = (GtkWidget*)constructor(&ptab->parent); if(viewer) { //gtk_multivpaned_widget_add(GTK_MULTIVPANED(multivpaned), viewer); @@ -466,13 +225,12 @@ void insert_viewer(GtkWidget* widget, lttvwindow_viewer_constructor constructor) int SetTraceset(Tab * tab, LttvTraceset *traceset) { - guint i; + TimeInterval time_span; TimeWindow new_time_window; LttTime new_current_time; - LttvTracesetContext *tsc = - LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); +#ifdef BABEL_CLEANUP // Perform time synchronization on the traces if (syncTraceset(tsc)) { @@ -522,11 +280,15 @@ int SetTraceset(Tab * tab, LttvTraceset *traceset) tsc = LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); } +#endif /*BABEL_CLEANUP*/ - time_span = tsc->time_span; + time_span = lttv_traceset_get_time_span(traceset); + + tab->traceset_info->traceset = traceset; + new_time_window = tab->time_window; - new_current_time = tab->current_time; - + new_current_time = tab->current_time; + /* Set the tab's time window and current time if * out of bounds */ if(ltt_time_compare(tab->time_window.start_time, time_span.start_time) < 0 @@ -552,76 +314,14 @@ int SetTraceset(Tab * tab, LttvTraceset *traceset) new_time_window.time_width) ; } - - -#if 0 - /* Set scrollbar */ - GtkAdjustment *adjustment = gtk_range_get_adjustment(GTK_RANGE(tab->scrollbar)); - LttTime upper = ltt_time_sub(time_span.end_time, time_span.start_time); - - g_object_set(G_OBJECT(adjustment), - "lower", - 0.0, /* lower */ - "upper", - ltt_time_to_double(upper) - * NANOSECONDS_PER_SECOND, /* upper */ - "step_increment", - ltt_time_to_double(tab->time_window.time_width) - / SCROLL_STEP_PER_PAGE - * NANOSECONDS_PER_SECOND, /* step increment */ - "page_increment", - ltt_time_to_double(tab->time_window.time_width) - * NANOSECONDS_PER_SECOND, /* page increment */ - "page_size", - ltt_time_to_double(tab->time_window.time_width) - * NANOSECONDS_PER_SECOND, /* page size */ - NULL); - gtk_adjustment_changed(adjustment); - - g_object_set(G_OBJECT(adjustment), - "value", - ltt_time_to_double( - ltt_time_sub(tab->time_window.start_time, time_span.start_time)) - * NANOSECONDS_PER_SECOND, /* value */ - NULL); - gtk_adjustment_value_changed(adjustment); - - /* set the time bar. The value callbacks will change their nsec themself */ - /* start seconds */ - gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry1), - (double)time_span.start_time.tv_sec, - (double)time_span.end_time.tv_sec); - - /* end seconds */ - gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry3), - (double)time_span.start_time.tv_sec, - (double)time_span.end_time.tv_sec); - - /* current seconds */ - gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry5), - (double)time_span.start_time.tv_sec, - (double)time_span.end_time.tv_sec); -#endif //0 - /* Finally, call the update hooks of the viewers */ - LttvHooks * tmp; - LttvAttributeValue value; - gint retval = 0; - - retval= lttv_iattribute_find_by_path(tab->attributes, - "hooks/updatetraceset", LTTV_POINTER, &value); - g_assert(retval); - - tmp = (LttvHooks*)*(value.v_pointer); - if(tmp == NULL) - retval = 1; - else - lttv_hooks_call(tmp,traceset); + gint retval = update_traceset(tab, traceset); time_change_manager(tab, new_time_window); current_time_change_manager(tab, new_current_time); return retval; + } /** @@ -657,20 +357,48 @@ int SetFilter(Tab * tab, gpointer filter) * @param tab viewer's tab */ -void update_traceset(Tab *tab) +int update_traceset(Tab *tab, LttvTraceset *traceset) { LttvAttributeValue value; LttvHooks * tmp; gboolean retval; retval= lttv_iattribute_find_by_path(tab->attributes, - "hooks/updatetraceset", LTTV_POINTER, &value); + "hooks/updatetraceset", + LTTV_POINTER, + &value); g_assert(retval); tmp = (LttvHooks*)*(value.v_pointer); - if(tmp == NULL) return; - lttv_hooks_call(tmp, NULL); + if(tmp == NULL) { + retval = 1; + } else { + lttv_hooks_call(tmp, traceset); + } + return retval; } +/** + Call hooks register to get update on traceset time span changes +*/ +int notify_time_span_changed(Tab *tab) +{ + LttvAttributeValue value; + LttvHooks * tmp; + gboolean retval; + + retval= lttv_iattribute_find_by_path(tab->attributes, + "hooks/updatetimespan", + LTTV_POINTER, + &value); + g_assert(retval); + tmp = (LttvHooks*)*(value.v_pointer); + if(tmp == NULL) { + retval = 1; + } else { + lttv_hooks_call(tmp, NULL); + } + return retval; +} /* get_label function is used to get user input, it displays an input * box, which allows user to input a string @@ -814,7 +542,6 @@ gint viewer_container_position(GtkWidget *container, GtkWidget *child) void move_down_viewer(GtkWidget * widget, gpointer user_data) { - MainWindow * mw = get_window_data_struct(widget); GtkWidget * notebook = lookup_widget(widget, "MNotebook"); GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), @@ -848,7 +575,6 @@ void move_down_viewer(GtkWidget * widget, gpointer user_data) void move_up_viewer(GtkWidget * widget, gpointer user_data) { - MainWindow * mw = get_window_data_struct(widget); GtkWidget * notebook = lookup_widget(widget, "MNotebook"); GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), @@ -889,7 +615,6 @@ void move_up_viewer(GtkWidget * widget, gpointer user_data) void delete_viewer(GtkWidget * widget, gpointer user_data) { - MainWindow * mw = get_window_data_struct(widget); GtkWidget * notebook = lookup_widget(widget, "MNotebook"); GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), @@ -914,7 +639,8 @@ void delete_viewer(GtkWidget * widget, gpointer user_data) g_object_set_data(G_OBJECT(tab->viewer_container), "focused_viewer", NULL); } - +#if UNFINISHED_FEATURE +/* TODO ybrosseau 2012-03-15: Function is half implemented. Should be removed */ /* open_traceset will open a traceset saved in a file * Right now, it is not finished yet, (not working) * FIXME @@ -951,7 +677,7 @@ void open_traceset(GtkWidget * widget, gpointer user_data) } } - +#endif /* lttvwindow_process_pending_requests * * Process requests for parts of the trace from viewers. @@ -983,7 +709,7 @@ void open_traceset(GtkWidget * widget, gpointer user_data) gboolean lttvwindow_process_pending_requests(Tab *tab) { - GtkWidget* widget; +#ifdef BABEL_CLEANUP LttvTracesetContext *tsc; LttvTracefileContext *tfc; GSList *list_in = NULL; @@ -1195,7 +921,9 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) tfc = lttv_traceset_context_get_current_tfc(tsc); g_assert(g_slist_length(list_in)>0); EventsRequest *events_request = g_slist_nth_data(list_in, 0); +#ifdef DEBUG guint seek_count; +#endif /* 1.2.1 If first request in list_in is a time request */ if(events_request->start_position == NULL) { @@ -1210,7 +938,9 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) events_request->start_time); /* Process the traceset with only state hooks */ +#ifdef DEBUG seek_count = +#endif //DEBUG lttv_process_traceset_middle(tsc, events_request->start_time, G_MAXUINT, NULL); @@ -1254,11 +984,14 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) pos_time); /* Process the traceset with only state hooks */ +#ifdef DEBUG seek_count = + lttv_process_traceset_middle(tsc, ltt_time_infinite, G_MAXUINT, events_request->start_position); +#endif g_assert(lttv_traceset_context_ctx_pos_compare(tsc, events_request->start_position) == 0); @@ -1756,13 +1489,59 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) NULL); return FALSE; */ + + #endif /* BABEL_CLEANUP */ } #undef list_out +/** + Manage the periodic update of a live trace +*/ +static gboolean +live_trace_update_handler(Tab *tab) +{ +#ifdef BABEL_CLEANUP + unsigned int updated_count; + LttvTracesetContext *tsc = LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); + TimeInterval initial_time_span = tsc->time_span; + TimeInterval updated_time_span; + + updated_count = lttv_process_traceset_update(tsc); + + /* TODO ybrosseau 2011-01-12: Add trace resynchronization */ + + /* Get the changed period bounds */ + updated_time_span = tsc->time_span; + if(ltt_time_compare(updated_time_span.start_time, + initial_time_span.start_time) != 0) { + /* The initial time should not change on a live update */ + g_assert(FALSE); + } + + /* Notify viewers (only on updates) */ + if(ltt_time_compare(updated_time_span.end_time, + initial_time_span.end_time) != 0) { + + notify_time_span_changed(tab); + /* TODO ybrosseau 2011-01-12: Change the timebar to register + to the time_span hook */ + timebar_set_minmax_time(TIMEBAR(tab->MTimebar), + &updated_time_span.start_time, + &updated_time_span.end_time ); + + /* To update the min max */ + time_change_manager(tab, tab->time_window); + } + + /* Timer will be recalled as long as there is files to update */ + return (updated_count > 0); +#endif /* BABEL_CLEANUP */ +} static void lttvwindow_add_trace(Tab *tab, LttvTrace *trace_v) { +#ifdef BABEL_CLEANUP LttvTraceset *traceset = tab->traceset_info->traceset; guint i; guint num_traces = lttv_traceset_number(traceset); @@ -1814,6 +1593,16 @@ static void lttvwindow_add_trace(Tab *tab, LttvTrace *trace_v) //FIXME //add_trace_into_traceset_selector(GTK_MULTIVPANED(tab->multivpaned), lttv_trace(trace_v)); + + + if (lttv_trace(trace_v)->is_live) { + /* Add timer for live update */ + /* TODO ybrosseau 2011-01-12: Parametrize the hardcoded 1 seconds */ + g_timeout_add_seconds (1, + (GSourceFunc) live_trace_update_handler, + tab); + } +#endif /* BABEL_CLEANUP */ } /* add_trace adds a trace into the current traceset. It first displays a @@ -1823,10 +1612,9 @@ static void lttvwindow_add_trace(Tab *tab, LttvTrace *trace_v) void add_trace(GtkWidget * widget, gpointer user_data) { - LttTrace *trace; - LttvTrace * trace_v; - LttvTraceset * traceset; - const char * dir; + + LttvTraceset * traceset = NULL; + const char * path; char abs_path[PATH_MAX]; gint id; MainWindow * mw_data = get_window_data_struct(widget); @@ -1844,74 +1632,100 @@ void add_trace(GtkWidget * widget, gpointer user_data) ptab = (LttvPluginTab *)g_object_get_data(G_OBJECT(page), "Tab_Plugin"); tab = ptab->tab; } - - //GtkDirSelection * file_selector = (GtkDirSelection *)gtk_dir_selection_new("Select a trace"); - GtkFileSelection * file_selector = (GtkFileSelection *)gtk_file_selection_new("Select a trace"); - gtk_widget_hide( (file_selector)->file_list->parent) ; - gtk_file_selection_hide_fileop_buttons(file_selector); - gtk_window_set_transient_for(GTK_WINDOW(file_selector), - GTK_WINDOW(mw_data->mwindow)); +//TODO fdeslauriers 2012-07-06: Remove this popup when we support multiple traces + traceset = lttvwindow_get_traceset(tab); + if(traceset != NULL && lttv_traceset_number(traceset) > 0){ + GtkWidget *dialogue = + gtk_message_dialog_new( + GTK_WINDOW(gtk_widget_get_toplevel(widget)), + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_OK, + "Loading multiple traces is not supported at the moment."); + gtk_dialog_run(GTK_DIALOG(dialogue)); + gtk_widget_destroy(dialogue); + return; + } + /* Create a new traceset*/ + traceset = lttv_traceset_new(); + /* File open dialog management */ +#ifdef BABEL_CLEANUP + GtkWidget *extra_live_button; +#endif //babel_cleanup + GtkFileChooser * file_chooser = + GTK_FILE_CHOOSER( + gtk_file_chooser_dialog_new ("Select a trace", + GTK_WINDOW(mw_data->mwindow), + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, + NULL)); +#ifdef BABEL_CLEANUP + /* Button to indicate the opening of a live trace */ + extra_live_button = gtk_check_button_new_with_mnemonic ("Trace is live (currently being writen)"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (extra_live_button), FALSE); + gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (file_chooser), extra_live_button); +#endif //babel_cleanup + gtk_file_chooser_set_show_hidden (file_chooser, TRUE); if(remember_trace_dir[0] != '\0') - gtk_file_selection_set_filename(file_selector, remember_trace_dir); - - id = gtk_dialog_run(GTK_DIALOG(file_selector)); - switch(id){ - case GTK_RESPONSE_ACCEPT: - case GTK_RESPONSE_OK: - dir = gtk_file_selection_get_filename (file_selector); - strncpy(remember_trace_dir, dir, PATH_MAX); - strncat(remember_trace_dir, "/", PATH_MAX); - if(!dir || strlen(dir) == 0){ - gtk_widget_destroy((GtkWidget*)file_selector); - break; - } - get_absolute_pathname(dir, abs_path); - trace_v = lttvwindowtraces_get_trace_by_name(abs_path); - if(trace_v == NULL) { - trace = ltt_trace_open(abs_path); - if(trace == NULL) { - g_warning("cannot open trace %s", abs_path); - - GtkWidget *dialogue = - gtk_message_dialog_new( - GTK_WINDOW(gtk_widget_get_toplevel(widget)), - GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_OK, - "Cannot open trace : maybe you should enter in the trace " - "directory to select it ?"); - gtk_dialog_run(GTK_DIALOG(dialogue)); - gtk_widget_destroy(dialogue); + gtk_file_chooser_set_filename(file_chooser, remember_trace_dir); - } else { - trace_v = lttv_trace_new(trace); - lttvwindowtraces_add_trace(trace_v); - lttvwindow_add_trace(tab, trace_v); - } - } else { - lttvwindow_add_trace(tab, trace_v); - } - - gtk_widget_destroy((GtkWidget*)file_selector); - - //update current tab - //update_traceset(mw_data); + gboolean closeFileChooserDialog = TRUE; - /* Call the updatetraceset hooks */ + do + { + id = gtk_dialog_run(GTK_DIALOG(file_chooser)); + switch(id){ + case GTK_RESPONSE_ACCEPT: + case GTK_RESPONSE_OK: + path = gtk_file_chooser_get_filename (file_chooser); + + strncpy(remember_trace_dir, path, PATH_MAX); + strncat(remember_trace_dir, "/", PATH_MAX); + if(!path || strlen(path) == 0){ + break; + } + get_absolute_pathname(path, abs_path); + + if(lttv_traceset_add_path(traceset,abs_path) != 0 ){ /*failure*/ - traceset = tab->traceset_info->traceset; - SetTraceset(tab, traceset); - // in expose now call_pending_read_hooks(mw_data); + g_warning("cannot open trace %s", abs_path); + strncpy(remember_trace_dir, "\0", PATH_MAX); + GtkWidget *dialogue = + gtk_message_dialog_new( + GTK_WINDOW(gtk_widget_get_toplevel(widget)), + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_OK, + "Cannot open trace : maybe you should enter in the directory " + "to select it ?"); + gtk_dialog_run(GTK_DIALOG(dialogue)); + gtk_widget_destroy(dialogue); + closeFileChooserDialog = FALSE; + } + else{ + closeFileChooserDialog = TRUE; + SetTraceset(tab, traceset); + } + break; + //update current tab + //update_traceset(mw_data); + + // in expose now call_pending_read_hooks(mw_data); + + //lttvwindow_report_current_time(mw_data,&(tab->current_time)); - //lttvwindow_report_current_time(mw_data,&(tab->current_time)); - break; - case GTK_RESPONSE_REJECT: - case GTK_RESPONSE_CANCEL: - default: - gtk_widget_destroy((GtkWidget*)file_selector); - break; - } + case GTK_RESPONSE_REJECT: + case GTK_RESPONSE_CANCEL: + default: + closeFileChooserDialog = TRUE; + break; + } + }while(!closeFileChooserDialog); + + gtk_widget_destroy((GtkWidget*)file_chooser); + } /* remove_trace removes a trace from the current traceset if all viewers in @@ -1928,6 +1742,7 @@ void add_trace(GtkWidget * widget, gpointer user_data) void remove_trace(GtkWidget *widget, gpointer user_data) { +#ifdef BABEL_CLEANUP LttTrace *trace; LttvTrace * trace_v; LttvTraceset * traceset; @@ -1953,7 +1768,7 @@ void remove_trace(GtkWidget *widget, gpointer user_data) for(i = 0; i < nb_trace; i++){ trace_v = lttv_traceset_get(tab->traceset_info->traceset, i); trace = lttv_trace(trace_v); - name[i] = g_quark_to_string(ltt_trace_name(trace)); + name[i] = (char *) g_quark_to_string(ltt_trace_name(trace)); } remove_trace_name = get_remove_trace(mw_data, name, nb_trace); @@ -2016,6 +1831,7 @@ void remove_trace(GtkWidget *widget, gpointer user_data) SetTraceset(tab, (gpointer)traceset); } g_free(name); +#endif /* BABEL_CLEANUP */ } #if 0 @@ -2268,10 +2084,10 @@ void save_as(GtkWidget * widget, gpointer user_data) void zoom(GtkWidget * widget, double size) { +#ifdef BABEL_CLEANUP TimeInterval time_span; TimeWindow new_time_window; LttTime current_time, time_delta; - MainWindow * mw_data = get_window_data_struct(widget); LttvTracesetContext *tsc; GtkWidget * notebook = lookup_widget(widget, "MNotebook"); @@ -2352,6 +2168,8 @@ void zoom(GtkWidget * widget, double size) } else { time_change_manager(tab, new_time_window); } + +#endif /* BABEL_CLEANUP */ } void zoom_in(GtkWidget * widget, gpointer user_data) @@ -2452,7 +2270,9 @@ void on_open_activate (GtkMenuItem *menuitem, gpointer user_data) { +#ifdef UNFINISHED_FEATURE open_traceset((GtkWidget*)menuitem, user_data); +#endif } @@ -2474,8 +2294,6 @@ on_close_tab_activate (GtkWidget *widget, { gint page_num; GtkWidget * notebook; - GtkWidget * page; - MainWindow * mw_data = get_window_data_struct(widget); notebook = lookup_widget(widget, "MNotebook"); if(notebook == NULL){ g_info("Notebook does not exist\n"); @@ -2962,7 +2780,6 @@ void on_unload_module_activate (GtkMenuItem *menuitem, gpointer user_data) { - GError *error = NULL; MainWindow * mw_data = get_window_data_struct((GtkWidget*)menuitem); LttvLibrary *library = NULL; @@ -3092,7 +2909,6 @@ on_remove_library_search_path_activate (GtkMenuItem *menuitem, { GPtrArray *name; guint nb,i; - gchar *lib_name; name = g_ptr_array_new(); nb = lttv_library_path_number(); /* ask for the library name */ @@ -3132,6 +2948,18 @@ void on_content_activate (GtkMenuItem *menuitem, gpointer user_data) { + char* filename = NULL, + *path; + GdkScreen *screen; + const char* relativePath = "doc/user/user_guide/html/index.html"; + filename = g_build_filename (g_get_current_dir(), relativePath, NULL); + path = g_strdup_printf ("ghelp://%s", filename); + + screen = gdk_screen_get_default(); + gtk_show_uri (screen, path, gtk_get_current_event_time(), NULL); + + g_free(filename); + g_free(path); g_info("Content\n"); } @@ -3153,7 +2981,6 @@ on_about_activate (GtkMenuItem *menuitem, GtkWidget *window_widget = main_window->mwindow; GtkWidget *about_widget = gtk_window_new(GTK_WINDOW_TOPLEVEL); GtkWindow *about_window = GTK_WINDOW(about_widget); - gint window_width, window_height; gtk_window_set_title(about_window, "About Linux Trace Toolkit"); @@ -3163,16 +2990,12 @@ on_about_activate (GtkMenuItem *menuitem, gtk_window_set_modal(about_window, FALSE); /* Put the about window at the center of the screen */ - gtk_window_get_size(about_window, &window_width, &window_height); - gtk_window_move (about_window, - (gdk_screen_width() - window_width)/2, - (gdk_screen_height() - window_height)/2); - + gtk_window_set_position(about_window, GTK_WIN_POS_CENTER_ALWAYS); + GtkWidget *vbox = gtk_vbox_new(FALSE, 1); gtk_container_add(GTK_CONTAINER(about_widget), vbox); - /* Text to show */ GtkWidget *label1 = gtk_label_new(""); gtk_misc_set_padding(GTK_MISC(label1), 10, 20); @@ -3246,7 +3069,9 @@ void on_button_open_clicked (GtkButton *button, gpointer user_data) { +#ifdef UNFINISHED_FEATURE open_traceset((GtkWidget*)button, user_data); +#endif } @@ -3403,8 +3228,6 @@ on_MWindow_configure (GtkWidget *widget, GdkEventConfigure *event, gpointer user_data) { - MainWindow * mw_data = get_window_data_struct((GtkWidget*)widget); - // MD : removed time width modification upon resizing of the main window. // The viewers will redraw themselves completely, without time interval // modification. @@ -3442,23 +3265,28 @@ on_MNotebook_switch_page (GtkNotebook *notebook, void time_change_manager (Tab *tab, TimeWindow new_time_window) -{ +{ + /* Only one source of time change */ if(tab->time_manager_lock == TRUE) return; tab->time_manager_lock = TRUE; + TimeInterval time_span; + + LttvTraceset *ts = tab->traceset_info->traceset; + time_span.start_time =ltt_time_from_uint64( lttv_traceset_get_timestamp_begin(ts)); + time_span.end_time = ltt_time_from_uint64(lttv_traceset_get_timestamp_end(ts)); + - LttvTracesetContext *tsc = LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); - TimeInterval time_span = tsc->time_span; LttTime start_time = new_time_window.start_time; LttTime end_time = new_time_window.end_time; - LttTime time_width = new_time_window.time_width; g_assert(ltt_time_compare(start_time, end_time) < 0); /* Set scrollbar */ GtkAdjustment *adjustment = gtk_range_get_adjustment(GTK_RANGE(tab->scrollbar)); - LttTime upper = ltt_time_sub(time_span.end_time, time_span.start_time); + LttTime upper = ltt_time_sub(time_span.end_time, time_span.start_time); + #if 0 gtk_range_set_increments(GTK_RANGE(tab->scrollbar), ltt_time_to_double(new_time_window.time_width) @@ -3499,432 +3327,25 @@ void time_change_manager (Tab *tab, ltt_time_sub(start_time, time_span.start_time)) /* value */); /* set the time bar. */ - /* start seconds */ - gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry1), - (double)time_span.start_time.tv_sec, - (double)time_span.end_time.tv_sec); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry1), - (double)start_time.tv_sec); - - /* start nanoseconds */ - if(start_time.tv_sec == time_span.start_time.tv_sec) { - /* can be both beginning and end at the same time. */ - if(start_time.tv_sec == time_span.end_time.tv_sec) { - /* If we are at the end, max nsec to end.. -1 (not zero length) */ - gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry2), - (double)time_span.start_time.tv_nsec, - (double)time_span.end_time.tv_nsec-1); - } else { - gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry2), - (double)time_span.start_time.tv_nsec, - (double)NANOSECONDS_PER_SECOND-1); - } - } else if(start_time.tv_sec == time_span.end_time.tv_sec) { - /* If we are at the end, max nsec to end.. -1 (not zero length) */ - gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry2), - 0.0, - (double)time_span.end_time.tv_nsec-1); - } else /* anywhere else */ - gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry2), - 0.0, - (double)NANOSECONDS_PER_SECOND-1); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry2), - (double)start_time.tv_nsec); - - /* end seconds */ - gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry3), - (double)time_span.start_time.tv_sec, - (double)time_span.end_time.tv_sec); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry3), - (double)end_time.tv_sec); - - /* end nanoseconds */ - if(end_time.tv_sec == time_span.start_time.tv_sec) { - /* can be both beginning and end at the same time. */ - if(end_time.tv_sec == time_span.end_time.tv_sec) { - /* If we are at the end, max nsec to end.. */ - gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry4), - (double)time_span.start_time.tv_nsec+1, - (double)time_span.end_time.tv_nsec); - } else { - gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry4), - (double)time_span.start_time.tv_nsec+1, - (double)NANOSECONDS_PER_SECOND-1); - } - } - else if(end_time.tv_sec == time_span.end_time.tv_sec) { - /* If we are at the end, max nsec to end.. */ - gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry4), - 0.0, - (double)time_span.end_time.tv_nsec); - } - else /* anywhere else */ - gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry4), - 0.0, - (double)NANOSECONDS_PER_SECOND-1); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry4), - (double)end_time.tv_nsec); - - /* width seconds */ - if(time_width.tv_nsec == 0) { - gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry7), - (double)1, - (double)upper.tv_sec); - } else { - gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry7), - (double)0, - (double)upper.tv_sec); - } - gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry7), - (double)time_width.tv_sec); - - /* width nanoseconds */ - if(time_width.tv_sec == upper.tv_sec) { - if(time_width.tv_sec == 0) { - gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry8), - (double)1, - (double)upper.tv_nsec); - } else { - gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry8), - (double)0, - (double)upper.tv_nsec); - } - } - else if(time_width.tv_sec == 0) { - gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry8), - 1.0, - (double)upper.tv_nsec); - } - else /* anywhere else */ - gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry8), - 0.0, - (double)NANOSECONDS_PER_SECOND-1); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry8), - (double)time_width.tv_nsec); - - /* call viewer hooks for new time window */ - set_time_window(tab, &new_time_window); - - tab->time_manager_lock = FALSE; -} - - -/* value changed for frame start s - * - * Check time span : if ns is out of range, clip it the nearest good value. - */ -void -on_MEntry1_value_changed (GtkSpinButton *spinbutton, - gpointer user_data) -{ - Tab *tab =(Tab *)user_data; - LttvTracesetContext * tsc = - LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); - TimeInterval time_span = tsc->time_span; - gint value = gtk_spin_button_get_value_as_int(spinbutton); - - TimeWindow new_time_window = tab->time_window; - - LttTime end_time = new_time_window.end_time; - - new_time_window.start_time.tv_sec = value; - - /* start nanoseconds */ - if(new_time_window.start_time.tv_sec == time_span.start_time.tv_sec) { - if(new_time_window.start_time.tv_sec == time_span.end_time.tv_sec) { - if(new_time_window.start_time.tv_nsec > time_span.end_time.tv_nsec) - new_time_window.start_time.tv_nsec = time_span.end_time.tv_nsec-1; - if(new_time_window.start_time.tv_nsec < time_span.start_time.tv_nsec) - new_time_window.start_time.tv_nsec = time_span.start_time.tv_nsec; - } else { - if(new_time_window.start_time.tv_nsec < time_span.start_time.tv_nsec) - new_time_window.start_time.tv_nsec = time_span.start_time.tv_nsec; - } - } - else if(new_time_window.start_time.tv_sec == time_span.end_time.tv_sec) { - if(new_time_window.start_time.tv_nsec > time_span.end_time.tv_nsec) - new_time_window.start_time.tv_nsec = time_span.end_time.tv_nsec-1; - } - - if(ltt_time_compare(new_time_window.start_time, end_time) >= 0) { - /* Then, we must push back end time : keep the same time width - * if possible, else end traceset time */ - end_time = LTT_TIME_MIN(ltt_time_add(new_time_window.start_time, - new_time_window.time_width), - time_span.end_time); - } - - /* Fix the time width to fit start time and end time */ - new_time_window.time_width = ltt_time_sub(end_time, - new_time_window.start_time); - new_time_window.time_width_double = - ltt_time_to_double(new_time_window.time_width); - - new_time_window.end_time = end_time; - - time_change_manager(tab, new_time_window); - -} - -void -on_MEntry2_value_changed (GtkSpinButton *spinbutton, - gpointer user_data) -{ - Tab *tab =(Tab *)user_data; - LttvTracesetContext * tsc = - LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); - TimeInterval time_span = tsc->time_span; - gint value = gtk_spin_button_get_value_as_int(spinbutton); - - TimeWindow new_time_window = tab->time_window; - - LttTime end_time = new_time_window.end_time; - - new_time_window.start_time.tv_nsec = value; - - if(ltt_time_compare(new_time_window.start_time, end_time) >= 0) { - /* Then, we must push back end time : keep the same time width - * if possible, else end traceset time */ - end_time = LTT_TIME_MIN(ltt_time_add(new_time_window.start_time, - new_time_window.time_width), - time_span.end_time); - } - - /* Fix the time width to fit start time and end time */ - new_time_window.time_width = ltt_time_sub(end_time, - new_time_window.start_time); - new_time_window.time_width_double = - ltt_time_to_double(new_time_window.time_width); - - new_time_window.end_time = end_time; - - time_change_manager(tab, new_time_window); - -} - -void -on_MEntry3_value_changed (GtkSpinButton *spinbutton, - gpointer user_data) -{ - Tab *tab =(Tab *)user_data; - LttvTracesetContext * tsc = - LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); - TimeInterval time_span = tsc->time_span; - gint value = gtk_spin_button_get_value_as_int(spinbutton); - - TimeWindow new_time_window = tab->time_window; - - LttTime end_time = new_time_window.end_time; - - end_time.tv_sec = value; - - /* end nanoseconds */ - if(end_time.tv_sec == time_span.start_time.tv_sec) { - if(end_time.tv_sec == time_span.end_time.tv_sec) { - if(end_time.tv_nsec > time_span.end_time.tv_nsec) - end_time.tv_nsec = time_span.end_time.tv_nsec; - if(end_time.tv_nsec < time_span.start_time.tv_nsec) - end_time.tv_nsec = time_span.start_time.tv_nsec+1; - } else { - if(end_time.tv_nsec < time_span.start_time.tv_nsec) - end_time.tv_nsec = time_span.start_time.tv_nsec+1; - } - } - else if(end_time.tv_sec == time_span.end_time.tv_sec) { - if(end_time.tv_nsec > time_span.end_time.tv_nsec) - end_time.tv_nsec = time_span.end_time.tv_nsec; - } - - if(ltt_time_compare(new_time_window.start_time, end_time) >= 0) { - /* Then, we must push front start time : keep the same time width - * if possible, else end traceset time */ - new_time_window.start_time = LTT_TIME_MAX( - ltt_time_sub(end_time, - new_time_window.time_width), - time_span.start_time); - } - /* Fix the time width to fit start time and end time */ - new_time_window.time_width = ltt_time_sub(end_time, - new_time_window.start_time); - new_time_window.time_width_double = - ltt_time_to_double(new_time_window.time_width); - new_time_window.end_time = end_time; - - time_change_manager(tab, new_time_window); + timebar_set_minmax_time(TIMEBAR(tab->MTimebar), + &time_span.start_time, + &time_span.end_time ); + timebar_set_start_time(TIMEBAR(tab->MTimebar),&start_time); + timebar_set_end_time(TIMEBAR(tab->MTimebar),&end_time); -} -void -on_MEntry4_value_changed (GtkSpinButton *spinbutton, - gpointer user_data) -{ - Tab *tab =(Tab *)user_data; - LttvTracesetContext * tsc = - LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); - TimeInterval time_span = tsc->time_span; - gint value = gtk_spin_button_get_value_as_int(spinbutton); - TimeWindow new_time_window = tab->time_window; - - LttTime end_time = new_time_window.end_time; - - end_time.tv_nsec = value; - - if(ltt_time_compare(new_time_window.start_time, end_time) >= 0) { - /* Then, we must push front start time : keep the same time width - * if possible, else end traceset time */ - new_time_window.start_time = LTT_TIME_MAX( - ltt_time_sub(end_time, - new_time_window.time_width), - time_span.start_time); - } - - /* Fix the time width to fit start time and end time */ - new_time_window.time_width = ltt_time_sub(end_time, - new_time_window.start_time); - new_time_window.time_width_double = - ltt_time_to_double(new_time_window.time_width); - new_time_window.end_time = end_time; - - time_change_manager(tab, new_time_window); - -} + /* call viewer hooks for new time window */ + set_time_window(tab, &new_time_window); -/* value changed for time frame interval s - * - * Check time span : if ns is out of range, clip it the nearest good value. - */ -void -on_MEntry7_value_changed (GtkSpinButton *spinbutton, - gpointer user_data) -{ - Tab *tab =(Tab *)user_data; - LttvTracesetContext * tsc = - LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); - TimeInterval time_span = tsc->time_span; - gint value = gtk_spin_button_get_value_as_int(spinbutton); - LttTime current_time, time_delta; - TimeWindow new_time_window = tab->time_window; - current_time = tab->current_time; + tab->time_manager_lock = FALSE; - time_delta = ltt_time_sub(time_span.end_time,time_span.start_time); - new_time_window.time_width.tv_sec = value; - new_time_window.time_width_double = - ltt_time_to_double(new_time_window.time_width); - if(ltt_time_compare(new_time_window.time_width,time_delta) > 0) - { /* Case where zoom out is bigger than trace length */ - new_time_window.start_time = time_span.start_time; - new_time_window.time_width = time_delta; - new_time_window.time_width_double = ltt_time_to_double(time_delta); - new_time_window.end_time = ltt_time_add(new_time_window.start_time, - new_time_window.time_width) ; - } - else - { - /* Center the image on the current time */ - new_time_window.start_time = - ltt_time_sub(current_time, - ltt_time_from_double(new_time_window.time_width_double/2.0)); - new_time_window.end_time = ltt_time_add(new_time_window.start_time, - new_time_window.time_width) ; - /* If on borders, don't fall off */ - if(ltt_time_compare(new_time_window.start_time, time_span.start_time) <0 - || ltt_time_compare(new_time_window.start_time, time_span.end_time) >0) - { - new_time_window.start_time = time_span.start_time; - new_time_window.end_time = ltt_time_add(new_time_window.start_time, - new_time_window.time_width) ; - } - else - { - if(ltt_time_compare(new_time_window.end_time, - time_span.end_time) > 0 - || ltt_time_compare(new_time_window.end_time, - time_span.start_time) < 0) - { - new_time_window.start_time = - ltt_time_sub(time_span.end_time, new_time_window.time_width); - new_time_window.end_time = ltt_time_add(new_time_window.start_time, - new_time_window.time_width) ; - } - } - - } - - if(ltt_time_compare(new_time_window.time_width, ltt_time_zero) == 0) { - g_warning("Zoom more than 1 ns impossible"); - } else { - time_change_manager(tab, new_time_window); - } } -void -on_MEntry8_value_changed (GtkSpinButton *spinbutton, - gpointer user_data) -{ - Tab *tab =(Tab *)user_data; - LttvTracesetContext * tsc = - LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); - TimeInterval time_span = tsc->time_span; - gint value = gtk_spin_button_get_value_as_int(spinbutton); - LttTime current_time, time_delta; - TimeWindow new_time_window = tab->time_window; - current_time = tab->current_time; - - time_delta = ltt_time_sub(time_span.end_time,time_span.start_time); - new_time_window.time_width.tv_nsec = value; - new_time_window.time_width_double = - ltt_time_to_double(new_time_window.time_width); - if(ltt_time_compare(new_time_window.time_width,time_delta) > 0) - { /* Case where zoom out is bigger than trace length */ - new_time_window.start_time = time_span.start_time; - new_time_window.time_width = time_delta; - new_time_window.time_width_double = ltt_time_to_double(time_delta); - new_time_window.end_time = ltt_time_add(new_time_window.start_time, - new_time_window.time_width) ; - } - else - { - /* Center the image on the current time */ - new_time_window.start_time = - ltt_time_sub(current_time, - ltt_time_from_double(new_time_window.time_width_double/2.0)); - new_time_window.end_time = ltt_time_add(new_time_window.start_time, - new_time_window.time_width) ; - /* If on borders, don't fall off */ - if(ltt_time_compare(new_time_window.start_time, time_span.start_time) <0 - || ltt_time_compare(new_time_window.start_time, time_span.end_time) >0) - { - new_time_window.start_time = time_span.start_time; - new_time_window.end_time = ltt_time_add(new_time_window.start_time, - new_time_window.time_width) ; - } - else - { - if(ltt_time_compare(new_time_window.end_time, - time_span.end_time) > 0 - || ltt_time_compare(new_time_window.end_time, - time_span.start_time) < 0) - { - new_time_window.start_time = - ltt_time_sub(time_span.end_time, new_time_window.time_width); - new_time_window.end_time = ltt_time_add(new_time_window.start_time, - new_time_window.time_width) ; - } - } - - } - - if(ltt_time_compare(new_time_window.time_width, ltt_time_zero) == 0) { - g_warning("Zoom more than 1 ns impossible"); - } else { - time_change_manager(tab, new_time_window); - } -} @@ -3936,112 +3357,106 @@ void current_time_change_manager (Tab *tab, tab->current_time_manager_lock = TRUE; - LttvTracesetContext *tsc = LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); - TimeInterval time_span = tsc->time_span; - - /* current seconds */ - gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry5), - (double)time_span.start_time.tv_sec, - (double)time_span.end_time.tv_sec); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry5), - (double)new_current_time.tv_sec); - - - /* start nanoseconds */ - if(new_current_time.tv_sec == time_span.start_time.tv_sec) { - /* can be both beginning and end at the same time. */ - if(new_current_time.tv_sec == time_span.end_time.tv_sec) { - /* If we are at the end, max nsec to end.. */ - gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry6), - (double)time_span.start_time.tv_nsec, - (double)time_span.end_time.tv_nsec); - } else { - gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry6), - (double)time_span.start_time.tv_nsec, - (double)NANOSECONDS_PER_SECOND-1); - } - } else if(new_current_time.tv_sec == time_span.end_time.tv_sec) { - /* If we are at the end, max nsec to end.. */ - gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry6), - 0.0, - (double)time_span.end_time.tv_nsec); - } else /* anywhere else */ - gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry6), - 0.0, - (double)NANOSECONDS_PER_SECOND-1); - - gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry6), - (double)new_current_time.tv_nsec); + timebar_set_current_time(TIMEBAR(tab->MTimebar), &new_current_time); set_current_time(tab, &new_current_time); tab->current_time_manager_lock = FALSE; } -void current_position_change_manager(Tab *tab, - LttvTracesetContextPosition *pos) +void current_position_change_manager(Tab *tab, LttvTracesetPosition *pos) { - LttvTracesetContext *tsc = - LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); - TimeInterval time_span = tsc->time_span; - int retval; - - retval= lttv_process_traceset_seek_position(tsc, pos); - g_assert_cmpint(retval, ==, 0); - LttTime new_time = lttv_traceset_context_position_get_time(pos); + lttv_traceset_seek_to_position( pos); + + LttTime new_time = lttv_traceset_position_get_time(pos); /* Put the context in a state coherent position */ - lttv_state_traceset_seek_time_closest((LttvTracesetState*)tsc, ltt_time_zero); - +#ifdef BABEL_CLEANUP + lttv_state_traceset_seek_time_closest((LttvTracesetState*)tsc, ltt_time_zero); +#endif /* BABEL_CLEANUP */ current_time_change_manager(tab, new_time); set_current_position(tab, pos); } - -void -on_MEntry5_value_changed (GtkSpinButton *spinbutton, - gpointer user_data) +static void on_timebar_starttime_changed(Timebar *timebar, + gpointer user_data) { - Tab *tab = (Tab*)user_data; - LttvTracesetContext * tsc = - LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); - TimeInterval time_span = tsc->time_span; - gint value = gtk_spin_button_get_value_as_int(spinbutton); - LttTime new_current_time = tab->current_time; - new_current_time.tv_sec = value; - - /* current nanoseconds */ - if(new_current_time.tv_sec == time_span.start_time.tv_sec) { - if(new_current_time.tv_sec == time_span.end_time.tv_sec) { - if(new_current_time.tv_nsec > time_span.end_time.tv_nsec) - new_current_time.tv_nsec = time_span.end_time.tv_nsec; - if(new_current_time.tv_nsec < time_span.start_time.tv_nsec) - new_current_time.tv_nsec = time_span.start_time.tv_nsec; - } else { - if(new_current_time.tv_nsec < time_span.start_time.tv_nsec) - new_current_time.tv_nsec = time_span.start_time.tv_nsec; - } - } - else if(new_current_time.tv_sec == time_span.end_time.tv_sec) { - if(new_current_time.tv_nsec > time_span.end_time.tv_nsec) - new_current_time.tv_nsec = time_span.end_time.tv_nsec; - } + Tab *tab = (Tab *)user_data; + LttvTraceset * ts =tab->traceset_info->traceset; + TimeInterval time_span = lttv_traceset_get_time_span(ts); + + TimeWindow new_time_window = tab->time_window; + new_time_window.start_time = timebar_get_start_time(timebar); + + LttTime end_time = new_time_window.end_time; + + /* TODO ybrosseau 2010-12-02: This if should have been checked + by the timebar already */ + if(ltt_time_compare(new_time_window.start_time, end_time) >= 0) { + /* Then, we must push back end time : keep the same time width + * if possible, else end traceset time */ + end_time = LTT_TIME_MIN(ltt_time_add(new_time_window.start_time, + new_time_window.time_width), + time_span.end_time); + } + + /* Fix the time width to fit start time and end time */ + new_time_window.time_width = ltt_time_sub(end_time, + new_time_window.start_time); + + new_time_window.time_width_double = + ltt_time_to_double(new_time_window.time_width); + + new_time_window.end_time = end_time; + + /* Notify the time_manager */ + time_change_manager(tab, new_time_window); - current_time_change_manager(tab, new_current_time); } -void -on_MEntry6_value_changed (GtkSpinButton *spinbutton, - gpointer user_data) +static void on_timebar_endtime_changed(Timebar *timebar, + gpointer user_data) { - Tab *tab = (Tab*)user_data; - gint value = gtk_spin_button_get_value_as_int(spinbutton); - LttTime new_current_time = tab->current_time; - new_current_time.tv_nsec = value; + Tab *tab = (Tab *)user_data; + LttvTraceset * ts =tab->traceset_info->traceset; + TimeInterval time_span = lttv_traceset_get_time_span(ts); + + TimeWindow new_time_window = tab->time_window; + + LttTime end_time = timebar_get_end_time(timebar); + + /* TODO ybrosseau 2010-12-02: This if should have been + checked by the timebar already */ + if(ltt_time_compare(new_time_window.start_time, end_time) >= 0) { + /* Then, we must push front start time : keep the same time + width if possible, else end traceset time */ + new_time_window.start_time = LTT_TIME_MAX( + ltt_time_sub(end_time, + new_time_window.time_width), + time_span.start_time); + } + + /* Fix the time width to fit start time and end time */ + new_time_window.time_width = ltt_time_sub(end_time, + new_time_window.start_time); + + new_time_window.time_width_double = + ltt_time_to_double(new_time_window.time_width); + + new_time_window.end_time = end_time; - current_time_change_manager(tab, new_current_time); + /* Notify the time_manager */ + time_change_manager(tab, new_time_window); +} +static void on_timebar_currenttime_changed(Timebar *timebar, + gpointer user_data) +{ + Tab *tab = (Tab *)user_data; + + LttTime new_current_time = timebar_get_current_time(timebar); + + current_time_change_manager(tab, new_current_time); } - void scroll_value_changed_cb(GtkWidget *scrollbar, gpointer user_data) @@ -4053,9 +3468,9 @@ void scroll_value_changed_cb(GtkWidget *scrollbar, gdouble value = gtk_adjustment_get_value(adjust); // gdouble upper, lower, ratio, page_size; gdouble page_size; - LttvTracesetContext * tsc = - LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); - TimeInterval time_span = tsc->time_span; + + LttvTraceset * ts = tab->traceset_info->traceset; + TimeInterval time_span = lttv_traceset_get_time_span(ts); time = ltt_time_add(ltt_time_from_double(value), time_span.start_time); @@ -4075,6 +3490,7 @@ void scroll_value_changed_cb(GtkWidget *scrollbar, time_change_manager(tab, new_time_window); + #if 0 //time_window = tab->time_window; @@ -4103,6 +3519,7 @@ void scroll_value_changed_cb(GtkWidget *scrollbar, /* call viewer hooks for new time window */ set_time_window(tab, &time_window); #endif //0 + } @@ -4346,8 +3763,7 @@ MainWindow *construct_main_window(MainWindow * parent) LttvIAttribute *attributes = LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE, NULL)); LttvAttributeValue value; - Tab *new_tab; - + new_m_window = g_new(MainWindow, 1); // Add the object's information to the module's array @@ -4408,7 +3824,6 @@ MainWindow *construct_main_window(MainWindow * parent) "Tab_Plugin", ptab, (GDestroyNotify)tab_destructor); - new_tab = ptab->tab; } else { LttvPluginTab *ptab = g_object_new(LTTV_TYPE_PLUGIN_TAB, NULL); init_tab(ptab->tab, new_m_window, NULL, notebook, "Traceset"); @@ -4418,7 +3833,6 @@ MainWindow *construct_main_window(MainWindow * parent) "Tab_Plugin", ptab, (GDestroyNotify)tab_destructor); - new_tab = ptab->tab; } /* Insert default viewers */ @@ -4476,12 +3890,11 @@ MainWindow *construct_main_window(MainWindow * parent) void tab_destructor(LttvPluginTab * ptab) { +#ifdef BABEL_CLEANUP int i, nb, ref_count; LttvTrace * trace; Tab *tab = ptab->tab; - gtk_object_destroy(GTK_OBJECT(tab->tooltips)); - if(tab->attributes) g_object_unref(tab->attributes); @@ -4516,6 +3929,7 @@ void tab_destructor(LttvPluginTab * ptab) g_free(tab->traceset_info); //g_free(tab); g_object_unref(ptab); +#endif /* BABEL_CLEANUP */ } @@ -4525,6 +3939,7 @@ void tab_destructor(LttvPluginTab * ptab) void init_tab(Tab *tab, MainWindow * mw, Tab *copy_tab, GtkNotebook * notebook, char * label) { + GList * list; //Tab * tab; //LttvFilter *filter = NULL; @@ -4542,9 +3957,13 @@ void init_tab(Tab *tab, MainWindow * mw, Tab *copy_tab, /* Copy the previous tab's filter */ /* We can clone the filter, as we copy the trace set also */ /* The filter must always be in sync with the trace set */ + +#ifdef BABEL_CLEANUP tab->filter = lttv_filter_clone(copy_tab->filter); +#endif /* BABEL_CLEANUP */ } else { tab->traceset_info->traceset = lttv_traceset_new(); + tab->filter = NULL; } #ifdef DEBUG @@ -4554,21 +3973,17 @@ void init_tab(Tab *tab, MainWindow * mw, Tab *copy_tab, 0, 4); fflush(stdout); #endif //DEBUG - +// tab->time_manager_lock = FALSE; tab->current_time_manager_lock = FALSE; - +#ifdef BABEL_CLEANUP //FIXME copy not implemented in lower level tab->traceset_info->traceset_context = g_object_new(LTTV_TRACESET_STATS_TYPE, NULL); - g_assert(tab->traceset_info->traceset_context != NULL); - lttv_context_init( - LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context), - tab->traceset_info->traceset); //add state update hooks lttv_state_add_event_hooks( (LttvTracesetState*)tab->traceset_info->traceset_context); - +#endif //BABEL_CLEANUP //determine the current_time and time_window of the tab #if 0 if(copy_tab != NULL){ @@ -4625,180 +4040,8 @@ void init_tab(Tab *tab, MainWindow * mw, Tab *copy_tab, // } /* Create the timebar */ - { - tab->MTimebar = gtk_hbox_new(FALSE, 2); - gtk_widget_show(tab->MTimebar); - tab->tooltips = gtk_tooltips_new(); - - tab->MEventBox1a = gtk_event_box_new(); - gtk_widget_show(tab->MEventBox1a); - gtk_tooltips_set_tip(tab->tooltips, tab->MEventBox1a, - "Paste Start and End Times Here", ""); - tab->MText1a = gtk_label_new("Time Frame "); - gtk_widget_show(tab->MText1a); - gtk_container_add(GTK_CONTAINER(tab->MEventBox1a), tab->MText1a); - tab->MEventBox1b = gtk_event_box_new(); - gtk_widget_show(tab->MEventBox1b); - gtk_tooltips_set_tip(tab->tooltips, tab->MEventBox1b, - "Paste Start Time Here", ""); - tab->MText1b = gtk_label_new("start: "); - gtk_widget_show(tab->MText1b); - gtk_container_add(GTK_CONTAINER(tab->MEventBox1b), tab->MText1b); - tab->MText2 = gtk_label_new("s"); - gtk_widget_show(tab->MText2); - tab->MText3a = gtk_label_new("ns"); - gtk_widget_show(tab->MText3a); - - tab->MEventBox3b = gtk_event_box_new(); - gtk_widget_show(tab->MEventBox3b); - gtk_tooltips_set_tip(tab->tooltips, tab->MEventBox3b, - "Paste End Time Here", ""); - tab->MText3b = gtk_label_new("end:"); - gtk_widget_show(tab->MText3b); - gtk_container_add(GTK_CONTAINER(tab->MEventBox3b), tab->MText3b); - tab->MText4 = gtk_label_new("s"); - gtk_widget_show(tab->MText4); - tab->MText5a = gtk_label_new("ns"); - gtk_widget_show(tab->MText5a); - - tab->MEventBox8 = gtk_event_box_new(); - gtk_widget_show(tab->MEventBox8); - gtk_tooltips_set_tip(tab->tooltips, tab->MEventBox8, - "Paste Time Interval here", ""); - tab->MText8 = gtk_label_new("Time Interval:"); - gtk_widget_show(tab->MText8); - gtk_container_add(GTK_CONTAINER(tab->MEventBox8), tab->MText8); - tab->MText9 = gtk_label_new("s"); - gtk_widget_show(tab->MText9); - tab->MText10 = gtk_label_new("ns"); - gtk_widget_show(tab->MText10); - - tab->MEventBox5b = gtk_event_box_new(); - gtk_widget_show(tab->MEventBox5b); - gtk_tooltips_set_tip(tab->tooltips, tab->MEventBox5b, - "Paste Current Time Here", ""); - tab->MText5b = gtk_label_new("Current Time:"); - gtk_widget_show(tab->MText5b); - gtk_container_add(GTK_CONTAINER(tab->MEventBox5b), tab->MText5b); - tab->MText6 = gtk_label_new("s"); - gtk_widget_show(tab->MText6); - tab->MText7 = gtk_label_new("ns"); - gtk_widget_show(tab->MText7); - - tab->MEntry1 = gtk_spin_button_new_with_range(0.0, 1.0, 1.0); - gtk_spin_button_set_digits(GTK_SPIN_BUTTON(tab->MEntry1),0); - gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(tab->MEntry1),TRUE); - gtk_widget_show(tab->MEntry1); - tab->MEntry2 = gtk_spin_button_new_with_range(0.0, 1.0, 1.0); - gtk_spin_button_set_digits(GTK_SPIN_BUTTON(tab->MEntry2),0); - gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(tab->MEntry2),TRUE); - gtk_widget_show(tab->MEntry2); - tab->MEntry3 = gtk_spin_button_new_with_range(0.0, 1.0, 1.0); - gtk_spin_button_set_digits(GTK_SPIN_BUTTON(tab->MEntry3),0); - gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(tab->MEntry3),TRUE); - gtk_widget_show(tab->MEntry3); - tab->MEntry4 = gtk_spin_button_new_with_range(0.0, 1.0, 1.0); - gtk_spin_button_set_digits(GTK_SPIN_BUTTON(tab->MEntry4),0); - gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(tab->MEntry4),TRUE); - gtk_widget_show(tab->MEntry4); - tab->MEntry5 = gtk_spin_button_new_with_range(0.0, 1.0, 1.0); - gtk_spin_button_set_digits(GTK_SPIN_BUTTON(tab->MEntry5),0); - gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(tab->MEntry5),TRUE); - gtk_widget_show(tab->MEntry5); - tab->MEntry6 = gtk_spin_button_new_with_range(0.0, 1.0, 1.0); - gtk_spin_button_set_digits(GTK_SPIN_BUTTON(tab->MEntry6),0); - gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(tab->MEntry6),TRUE); - gtk_widget_show(tab->MEntry6); - tab->MEntry7 = gtk_spin_button_new_with_range(0.0, 1.0, 1.0); - gtk_spin_button_set_digits(GTK_SPIN_BUTTON(tab->MEntry7),0); - gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(tab->MEntry7),TRUE); - gtk_widget_show(tab->MEntry7); - tab->MEntry8 = gtk_spin_button_new_with_range(0.0, 1.0, 1.0); - gtk_spin_button_set_digits(GTK_SPIN_BUTTON(tab->MEntry8),0); - gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(tab->MEntry8),TRUE); - gtk_widget_show(tab->MEntry8); - - GtkWidget *temp_widget; - - gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MEventBox1a, FALSE, - FALSE, 0); - gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MEventBox1b, FALSE, - FALSE, 0); - gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MEntry1, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MText2, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MEntry2, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MText3a, FALSE, FALSE, 0); - temp_widget = gtk_vseparator_new(); - gtk_widget_show(temp_widget); - gtk_box_pack_start (GTK_BOX (tab->MTimebar), temp_widget, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MEventBox3b, FALSE, - FALSE, 0); - gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MEntry3, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MText4, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MEntry4, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MText5a, FALSE, FALSE, 0); - temp_widget = gtk_vseparator_new(); - gtk_widget_show(temp_widget); - gtk_box_pack_start (GTK_BOX (tab->MTimebar), temp_widget, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MEventBox8, FALSE, - FALSE, 0); - gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MEntry7, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MText9, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MEntry8, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MText10, FALSE, FALSE, 0); - - temp_widget = gtk_vseparator_new(); - gtk_widget_show(temp_widget); - gtk_box_pack_end (GTK_BOX (tab->MTimebar), tab->MText7, FALSE, FALSE, 0); - gtk_box_pack_end (GTK_BOX (tab->MTimebar), tab->MEntry6, FALSE, FALSE, 0); - gtk_box_pack_end (GTK_BOX (tab->MTimebar), tab->MText6, FALSE, FALSE, 0); - gtk_box_pack_end (GTK_BOX (tab->MTimebar), tab->MEntry5, FALSE, FALSE, 0); - gtk_box_pack_end (GTK_BOX (tab->MTimebar), tab->MEventBox5b, FALSE, - FALSE, 0); - gtk_box_pack_end (GTK_BOX (tab->MTimebar), temp_widget, FALSE, FALSE, 0); - - - //GtkWidget *test = gtk_button_new_with_label("drop"); - //gtk_button_set_relief(GTK_BUTTON(test), GTK_RELIEF_NONE); - //gtk_widget_show(test); - //gtk_box_pack_end(GTK_BOX (tab->MTimebar), test, FALSE, FALSE, 0); - //gtk_widget_add_events(tab->MText1, GDK_ALL_EVENTS_MASK);//GDK_BUTTON_PRESS_MASK); - /*GtkWidget *event_box = gtk_event_box_new(); - gtk_widget_show(event_box); - gtk_tooltips_set_tip(tooltips, event_box, - "Paste Current Time Here", ""); - gtk_box_pack_end(GTK_BOX (tab->MTimebar), event_box, FALSE, FALSE, 0); - GtkWidget *test = gtk_label_new("drop"); - gtk_container_add(GTK_CONTAINER(event_box), test); - gtk_widget_show(test); - g_signal_connect (G_OBJECT(event_box), - "button-press-event", - G_CALLBACK (on_MText1_paste), - (gpointer)tab); -*/ - - g_signal_connect (G_OBJECT(tab->MEventBox1a), - "button-press-event", - G_CALLBACK (on_MEventBox1a_paste), - (gpointer)tab); - - g_signal_connect (G_OBJECT(tab->MEventBox1b), - "button-press-event", - G_CALLBACK (on_MEventBox1b_paste), - (gpointer)tab); - g_signal_connect (G_OBJECT(tab->MEventBox3b), - "button-press-event", - G_CALLBACK (on_MEventBox3b_paste), - (gpointer)tab); - g_signal_connect (G_OBJECT(tab->MEventBox5b), - "button-press-event", - G_CALLBACK (on_MEventBox5b_paste), - (gpointer)tab); - g_signal_connect (G_OBJECT(tab->MEventBox8), - "button-press-event", - G_CALLBACK (on_MEventBox8_paste), - (gpointer)tab); - } + + tab->MTimebar = timebar_new(); gtk_box_pack_end(GTK_BOX(tab->vbox), tab->scrollbar, @@ -4851,8 +4094,10 @@ void init_tab(Tab *tab, MainWindow * mw, Tab *copy_tab, gtk_widget_show(tab->label); gtk_widget_show(tab->scrollbar); + gtk_widget_show(tab->MTimebar); gtk_widget_show(tab->viewer_container); gtk_widget_show(tab->vbox); + //gtk_widget_show(tab->multivpaned); @@ -4866,30 +4111,14 @@ void init_tab(Tab *tab, MainWindow * mw, Tab *copy_tab, g_signal_connect(G_OBJECT(tab->scrollbar), "value-changed", G_CALLBACK(scroll_value_changed_cb), tab); - g_signal_connect ((gpointer) tab->MEntry1, "value-changed", - G_CALLBACK (on_MEntry1_value_changed), - tab); - g_signal_connect ((gpointer) tab->MEntry2, "value-changed", - G_CALLBACK (on_MEntry2_value_changed), - tab); - g_signal_connect ((gpointer) tab->MEntry3, "value-changed", - G_CALLBACK (on_MEntry3_value_changed), - tab); - g_signal_connect ((gpointer) tab->MEntry4, "value-changed", - G_CALLBACK (on_MEntry4_value_changed), - tab); - g_signal_connect ((gpointer) tab->MEntry5, "value-changed", - G_CALLBACK (on_MEntry5_value_changed), - tab); - g_signal_connect ((gpointer) tab->MEntry6, "value-changed", - G_CALLBACK (on_MEntry6_value_changed), - tab); - g_signal_connect ((gpointer) tab->MEntry7, "value-changed", - G_CALLBACK (on_MEntry7_value_changed), - tab); - g_signal_connect ((gpointer) tab->MEntry8, "value-changed", - G_CALLBACK (on_MEntry8_value_changed), - tab); + + /* Timebar signal handler */ + g_signal_connect(G_OBJECT(tab->MTimebar), "start-time-changed", + G_CALLBACK(on_timebar_starttime_changed), tab); + g_signal_connect(G_OBJECT(tab->MTimebar), "end-time-changed", + G_CALLBACK(on_timebar_endtime_changed), tab); + g_signal_connect(G_OBJECT(tab->MTimebar), "current-time-changed", + G_CALLBACK(on_timebar_currenttime_changed), tab); //g_signal_connect(G_OBJECT(tab->scrollbar), "changed", // G_CALLBACK(scroll_value_changed_cb), tab); @@ -4919,7 +4148,7 @@ void init_tab(Tab *tab, MainWindow * mw, Tab *copy_tab, lttvwindow_report_time_window(tab, time_window); lttvwindow_report_current_time(tab, ltt_time_zero); } - + LttvTraceset *traceset = tab->traceset_info->traceset; SetTraceset(tab, traceset); } @@ -4939,6 +4168,7 @@ gboolean execute_events_requests(Tab *tab) __EXPORT void create_main_window_with_trace_list(GSList *traces) { + GSList *iter = NULL; /* Create window */ @@ -4958,20 +4188,19 @@ __EXPORT void create_main_window_with_trace_list(GSList *traces) ptab = (LttvPluginTab *)g_object_get_data(G_OBJECT(page), "Tab_Plugin"); tab = ptab->tab; } - + + LttvTraceset * traceset = lttv_traceset_new(); for(iter=traces; iter!=NULL; iter=g_slist_next(iter)) { gchar *path = (gchar*)iter->data; /* Add trace */ gchar abs_path[PATH_MAX]; - LttvTrace *trace_v; - LttTrace *trace; + get_absolute_pathname(path, abs_path); - trace_v = lttvwindowtraces_get_trace_by_name(abs_path); - if(trace_v == NULL) { - trace = ltt_trace_open(abs_path); - if(trace == NULL) { - g_warning("cannot open trace %s", abs_path); + + if(lttv_traceset_add_path(traceset,abs_path) != 0 ){ /*failure*/ + + g_warning("cannot open trace %s", abs_path); GtkWidget *dialogue = gtk_message_dialog_new( @@ -4983,19 +4212,10 @@ __EXPORT void create_main_window_with_trace_list(GSList *traces) "to select it ?"); gtk_dialog_run(GTK_DIALOG(dialogue)); gtk_widget_destroy(dialogue); - } else { - trace_v = lttv_trace_new(trace); - lttvwindowtraces_add_trace(trace_v); - lttvwindow_add_trace(tab, trace_v); - } - } else { - lttvwindow_add_trace(tab, trace_v); } - } - - LttvTraceset *traceset; - - traceset = tab->traceset_info->traceset; - SetTraceset(tab, traceset); + else{ + SetTraceset(tab, traceset); + } + } }