add filter functionnality to the main window
authorcompudj <compudj@04897980-b3bd-0310-b5e0-8ef037075253>
Wed, 16 Mar 2005 15:14:03 +0000 (15:14 +0000)
committercompudj <compudj@04897980-b3bd-0310-b5e0-8ef037075253>
Wed, 16 Mar 2005 15:14:03 +0000 (15:14 +0000)
git-svn-id: http://ltt.polymtl.ca/svn@892 04897980-b3bd-0310-b5e0-8ef037075253

ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c
ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindow.c
ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/mainwindow-private.h

index 25586e6cd7fa6ee35ab279c81b8dca35ab820bb3..1a5fed3707cbea3fff1b25a7ef65ecdc5f3afb9b 100644 (file)
@@ -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
index 69cb1ddda2e35e1ae27d3c70a08e832a017293d2..510965f75ad57f8ebd14378039e79af1e540d587 100644 (file)
@@ -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 
index 92b7d57ee4eaf8c88b64a87138aa91cd970acdb5..30d6df80f3f09580d1f1af404dbc77d565a28ddc 100644 (file)
@@ -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;
This page took 0.029938 seconds and 4 git commands to generate.