#include <string.h>
#include <gtk/gtk.h>
#include <gdk/gdk.h>
+#include <gdk/gdkkeysyms.h>
#include <lttv/lttv.h>
#include <lttv/module.h>
* Prototypes
*/
GtkWidget *guifilter_get_widget(FilterViewerData *fvd);
-FilterViewerData *gui_filter(Tab *tab);
+FilterViewerData *gui_filter(LttvPlugin *plugin);
void gui_filter_destructor(FilterViewerData *fvd);
FilterViewerDataLine* gui_filter_add_line(FilterViewerData *fvd);
void gui_filter_line_set_visible(FilterViewerDataLine *fvdl, gboolean v);
void gui_filter_line_reset(FilterViewerDataLine *fvdl);
-GtkWidget* h_guifilter(Tab *tab);
+GtkWidget* h_guifilter(LttvPlugin *plugin);
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);
* Main struct for the filter gui module
*/
struct _FilterViewerData {
- Tab *tab; /**< current tab of module */
+ LttvPlugin *plugin; /**< Plugin on which we interact. */
GtkWidget *f_window; /**< filter window */
GtkWidget *f_add_button; /**< add expression to current expression (GtkButton) */
- gchar *name; /**< Name of the window in the main window */
};
/**
* @return The Filter viewer data created.
*/
FilterViewerData*
-gui_filter(Tab *tab)
+gui_filter(LttvPlugin *plugin)
{
g_debug("filter::gui_filter()");
FilterViewerData* fvd = g_new(FilterViewerData,1);
- fvd->tab = tab;
+ fvd->plugin = plugin;
// lttvwindow_register_traceset_notify(fvd->tab,
// filter_traceset_changed,
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"));
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(gtk_widget_get_toplevel(GTK_WIDGET(fvd->plugin->top_widget))));
+ gtk_window_set_destroy_with_parent(GTK_WINDOW(fvd->f_window), TRUE);
/*
* Initiating GtkTable layout
* - 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);
void
gui_filter_destructor(FilterViewerData *fvd)
{
- Tab *tab = fvd->tab;
-
/* May already been done by GTK window closing */
if(GTK_IS_WIDGET(guifilter_get_widget(fvd))){
g_info("widget still exists");
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);
}
*
* This constructor is given as a parameter to the menuitem and toolbar button
* registration. It creates the list.
- * @param tab A pointer to the parent window.
+ * @param obj Object to interact with.
* @return The widget created.
*/
GtkWidget *
-h_guifilter(Tab *tab)
+h_guifilter(LttvPlugin *plugin)
{
- FilterViewerData* f = gui_filter(tab) ;
- f->name = g_new(gchar, 256);
-
- snprintf(f->name, 256, "guifilter %p", f);
+ FilterViewerData* f = gui_filter(plugin) ;
- if(f)
- main_window_add_child_window(tab, f,
- f->name, (GDestroyNotify)gui_filter_destructor);
return NULL;
-
}
/**
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);
} else {
filter = NULL;
}
- lttvwindow_report_filter(fvd->tab, filter);
+ /* Remove the old filter if present */
+ //g_object_set_data_full(fvd->obj, "filter", filter,
+ // (GDestroyNotify)lttv_filter_destroy);
+ //g_object_notify(fvd->obj, "filter");
+ lttv_plugin_update_filter(fvd->plugin, 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;
}
/**
*/
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
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
}
/* 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);