add png
[lttv.git] / ltt / branches / poly / lttv / modules / gui / filter / filter.c
index 23ff43d74d55b1cce7eb2833d94c70020cf16aa5..f12646df35e109b5b3e1f3e06158da6956ff5da4 100644 (file)
@@ -24,6 +24,7 @@
 #include <string.h>
 #include <gtk/gtk.h>
 #include <gdk/gdk.h>
+#include <gdk/gdkkeysyms.h>
 
 #include <lttv/lttv.h>
 #include <lttv/module.h>
@@ -72,6 +73,9 @@ void filter_destroy_walk(gpointer data, gpointer user_data);
  * Callback functions
  */
 void callback_process_button(GtkWidget *widget, gpointer data);
+gboolean callback_enter_check(GtkWidget *widget,
+    GdkEventKey *event,
+    gpointer user_data);
 void callback_add_button(GtkWidget *widget, gpointer data);
 void callback_logical_op_box(GtkWidget *widget, gpointer data);
 void callback_expression_field(GtkWidget *widget, gpointer data);
@@ -122,7 +126,6 @@ struct _FilterViewerData {
   
   GtkWidget *f_add_button;              /**< add expression to current expression (GtkButton) */
  
-  gchar *name;                          /**< Name of the window in the main window */
 };
 
 /**
@@ -192,6 +195,7 @@ gui_filter(Tab *tab)
   g_ptr_array_add(fvd->f_field_options,(gpointer) g_string_new("tracefile.name"));
   g_ptr_array_add(fvd->f_field_options,(gpointer) g_string_new("trace.name"));
   g_ptr_array_add(fvd->f_field_options,(gpointer) g_string_new("state.process_name"));
+  g_ptr_array_add(fvd->f_field_options,(gpointer) g_string_new("state.thread_brand"));
   g_ptr_array_add(fvd->f_field_options,(gpointer) g_string_new("state.pid"));
   g_ptr_array_add(fvd->f_field_options,(gpointer) g_string_new("state.ppid"));
   g_ptr_array_add(fvd->f_field_options,(gpointer) g_string_new("state.creation_time"));
@@ -212,6 +216,10 @@ gui_filter(Tab *tab)
   
 
   fvd->f_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title(GTK_WINDOW(fvd->f_window), "LTTV Filter");
+  gtk_window_set_transient_for(GTK_WINDOW(fvd->f_window),
+      GTK_WINDOW(main_window_get_widget(tab)));
+  gtk_window_set_destroy_with_parent(GTK_WINDOW(fvd->f_window), TRUE);
 
   /* 
    * Initiating GtkTable layout 
@@ -230,6 +238,8 @@ gui_filter(Tab *tab)
    *  - processing button
    */
   fvd->f_expression_field = gtk_entry_new(); //gtk_scrolled_window_new (NULL, NULL);
+  g_signal_connect (G_OBJECT(fvd->f_expression_field),
+      "key-press-event", G_CALLBACK (callback_enter_check), (gpointer)fvd);
 //  gtk_entry_set_text(GTK_ENTRY(fvd->f_expression_field),"state.cpu>0");
   gtk_widget_show (fvd->f_expression_field);
 
@@ -428,10 +438,6 @@ gui_filter_destructor(FilterViewerData *fvd)
   
   g_filter_list = g_slist_remove(g_filter_list, fvd);
  
-  main_window_remove_child_window(tab, fvd->name);
-  
-  g_free(fvd->name);
-  
   g_free(fvd);
 }
 
@@ -450,15 +456,8 @@ GtkWidget *
 h_guifilter(Tab *tab)
 {
   FilterViewerData* f = gui_filter(tab) ;
-  f->name = g_new(gchar, 256);
 
-  snprintf(f->name, 256, "guifilter %p", f);
-
-  if(f)
-    main_window_add_child_window(tab, f,
-        f->name, (GDestroyNotify)gui_filter_destructor);
   return NULL;
-  
 }
 
 /**
@@ -523,15 +522,36 @@ callback_process_button(GtkWidget *widget, gpointer data) {
   g_debug("callback_process_button(): Processing expression");
   
   FilterViewerData *fvd = (FilterViewerData*)data;
+  LttvFilter* filter;
 
   if(strlen(gtk_entry_get_text(GTK_ENTRY(fvd->f_expression_field))) !=0) {
-    LttvFilter* filter = lttv_filter_new();
+    filter = lttv_filter_new();
     GString* s = g_string_new(gtk_entry_get_text(GTK_ENTRY(fvd->f_expression_field)));
     lttv_filter_append_expression(filter,s->str);
     g_string_free(s,TRUE);
     //SetFilter(fvd->tab,filter);
-    lttvwindow_report_filter(fvd->tab, filter);
+  } else {
+    filter = NULL;
   }
+  lttvwindow_report_filter(fvd->tab, filter);
+}
+
+gboolean callback_enter_check(GtkWidget *widget,
+    GdkEventKey *event,
+    gpointer user_data)
+{
+ g_debug("typed : %x", event->keyval);
+ switch(event->keyval) {
+   case GDK_Return:
+   case GDK_KP_Enter:
+   case GDK_ISO_Enter:
+   case GDK_3270_Enter:
+     callback_process_button(widget, user_data);
+     break;
+   default:
+     break;
+ }
+ return FALSE;
 }
 
 /**
@@ -578,11 +598,11 @@ callback_add_button(GtkWidget *widget, gpointer data) {
    */
   GString* s;
   s = g_ptr_array_index(fvd->f_logical_op_options,gtk_combo_box_get_active(GTK_COMBO_BOX(fvd->f_logical_op_junction_box)));
-  g_string_append(a_filter_string,s->str);
+  a_filter_string = g_string_append(a_filter_string,s->str);
   gtk_combo_box_set_active(GTK_COMBO_BOX(fvd->f_logical_op_junction_box),0);
 
   /* begin expression */
-  g_string_append_c(a_filter_string,'(');
+  a_filter_string = g_string_append_c(a_filter_string,'(');
 
   /*
    * For each simple expression, add the resulting string 
@@ -595,18 +615,18 @@ callback_add_button(GtkWidget *widget, gpointer data) {
     fvdl = (FilterViewerDataLine*)g_ptr_array_index(fvd->f_lines,i);
  
     s = g_ptr_array_index(fvd->f_not_op_options,gtk_combo_box_get_active(GTK_COMBO_BOX(fvdl->f_not_op_box)));
-    g_string_append(a_filter_string,s->str);
+    a_filter_string = g_string_append(a_filter_string,s->str);
     
     s = g_ptr_array_index(fvd->f_field_options,gtk_combo_box_get_active(GTK_COMBO_BOX(fvdl->f_field_box)));
-    g_string_append(a_filter_string,s->str);
+    a_filter_string = g_string_append(a_filter_string,s->str);
     
     s = g_ptr_array_index(fvd->f_math_op_options,gtk_combo_box_get_active(GTK_COMBO_BOX(fvdl->f_math_op_box)));
-    g_string_append(a_filter_string,s->str);
+    a_filter_string = g_string_append(a_filter_string,s->str);
     
-    g_string_append(a_filter_string,gtk_entry_get_text(GTK_ENTRY(fvdl->f_value_field)));
+    a_filter_string = g_string_append(a_filter_string,gtk_entry_get_text(GTK_ENTRY(fvdl->f_value_field)));
     
     s = g_ptr_array_index(fvd->f_logical_op_options,gtk_combo_box_get_active(GTK_COMBO_BOX(fvdl->f_logical_op_box)));
-    g_string_append(a_filter_string,s->str);
+    a_filter_string = g_string_append(a_filter_string,s->str);
     
     /*
      * resetting simple expression lines
@@ -616,7 +636,7 @@ callback_add_button(GtkWidget *widget, gpointer data) {
   }
 
   /* end expression */
-  g_string_append_c(a_filter_string,')');
+  a_filter_string = g_string_append_c(a_filter_string,')');
 
   g_string_prepend(a_filter_string,gtk_entry_get_text(GTK_ENTRY(fvd->f_expression_field)));
   gtk_entry_set_text(GTK_ENTRY(fvd->f_expression_field),a_filter_string->str);
This page took 0.025529 seconds and 4 git commands to generate.