From dc5e526626e33c0cc08b74c6a78dc8192e2bce36 Mon Sep 17 00:00:00 2001 From: compudj Date: Wed, 16 Mar 2005 15:14:03 +0000 Subject: [PATCH] add filter functionnality to the main window git-svn-id: http://ltt.polymtl.ca/svn@892 04897980-b3bd-0310-b5e0-8ef037075253 --- .../gui/lttvwindow/lttvwindow/callbacks.c | 10 ++++- .../gui/lttvwindow/lttvwindow/lttvwindow.c | 39 ++++++++++++++++--- .../lttvwindow/mainwindow-private.h | 3 ++ 3 files changed, 45 insertions(+), 7 deletions(-) diff --git a/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c b/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c index 25586e6c..1a5fed37 100644 --- a/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c +++ b/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c @@ -4500,7 +4500,8 @@ void tab_destructor(Tab * tab) ltt_trace_close(lttv_trace(trace)); } } - } + } + lttv_filter_destroy(tab->filter); lttv_traceset_destroy(tab->traceset_info->traceset); /* Remove the idle events requests processing function of the tab */ g_idle_remove_by_data(tab); @@ -4529,8 +4530,15 @@ Tab* create_tab(MainWindow * mw, Tab *copy_tab, if(copy_tab) { tab->traceset_info->traceset = lttv_traceset_copy(copy_tab->traceset_info->traceset); + + /* 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 */ + tab->filter = lttv_filter_clone(copy_tab->filter); + } else { tab->traceset_info->traceset = lttv_traceset_new(); + tab->filter = NULL; } #ifdef DEBUG diff --git a/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindow.c b/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindow.c index 69cb1ddd..510965f7 100644 --- a/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindow.c +++ b/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindow.c @@ -936,17 +936,44 @@ LttTime lttvwindow_get_current_time(Tab *tab) /** * Function to get the filter of the current tab. - * It will be called by the constructor of the viewer and also be - * called by a hook funtion of the viewer to update its filter. - * @param tab viewer's tab + * @param main_win, the main window the viewer belongs to. * @param filter, a pointer to a filter. */ -const lttv_filter *lttvwindow_get_filter(Tab *tab) + +LttvFilter *lttvwindow_get_filter(Tab *tab) { - //FIXME - g_warning("lttvwindow_get_filter not implemented in viewer.c"); + return tab->filter; } +/** + * Function to set the filter of the current tab. + * It should be called by the filter GUI to tell the + * main window to update the filter tab's lttv_filter. + * + * This function does change the current filter, removing the + * old one when necessary, and call the updatefilter hooks + * of the registered viewers. + * + * @param main_win, the main window the viewer belongs to. + * @param filter, a pointer to a filter. + */ + +void lttvwindow_report_filter(Tab *tab, LttvFilter *filter) +{ + LttvAttributeValue value; + LttvHooks * tmp; + + lttv_filter_destroy(tab->filter); + tab->filter = filter; + + g_assert(lttv_iattribute_find_by_path(tab->attributes, + "hooks/updatefilter", LTTV_POINTER, &value)); + tmp = (LttvHooks*)*(value.v_pointer); + if(tmp == NULL) return; + lttv_hooks_call(tmp, &position); +} + + /** * Function to get the stats of the traceset diff --git a/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/mainwindow-private.h b/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/mainwindow-private.h index 92b7d57e..30d6df80 100644 --- a/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/mainwindow-private.h +++ b/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/mainwindow-private.h @@ -119,6 +119,9 @@ struct _Tab{ /* Traceset related information */ TracesetInfo * traceset_info; + /* Filter to apply to the tab's traceset */ + LttvFilter *filter; + /* A list of time requested for the next process trace */ GSList *events_requests; gboolean events_request_pending; -- 2.34.1