From c90238b7acc890c4e6111b1adf2912d658e6f61c Mon Sep 17 00:00:00 2001 From: winckel <winckel@eurecom.fr> Date: Thu, 14 Nov 2013 20:26:09 +0000 Subject: [PATCH] Added a filters enabled toggle button. git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4408 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- .../utils/itti_analyzer/libui/ui_callbacks.c | 53 ++++++++++++++----- .../utils/itti_analyzer/libui/ui_callbacks.h | 3 ++ common/utils/itti_analyzer/libui/ui_filters.c | 23 +++++++- common/utils/itti_analyzer/libui/ui_filters.h | 3 ++ .../itti_analyzer/libui/ui_main_screen.h | 8 +-- .../utils/itti_analyzer/libui/ui_menu_bar.c | 43 +++++++-------- .../libui/ui_signal_dissect_view.c | 13 +++-- .../utils/itti_analyzer/libui/ui_tree_view.c | 5 +- 8 files changed, 104 insertions(+), 47 deletions(-) diff --git a/common/utils/itti_analyzer/libui/ui_callbacks.c b/common/utils/itti_analyzer/libui/ui_callbacks.c index 953860600f..c54766030d 100644 --- a/common/utils/itti_analyzer/libui/ui_callbacks.c +++ b/common/utils/itti_analyzer/libui/ui_callbacks.c @@ -29,7 +29,7 @@ gboolean ui_callback_on_open_messages(GtkWidget *widget, gpointer data) { gboolean refresh = (data != NULL) ? TRUE : FALSE; - g_debug("Open messages event occurred %d", refresh); + g_message("Open messages event occurred %d", refresh); if (refresh && (ui_main_data.messages_file_name != NULL)) { @@ -45,21 +45,50 @@ gboolean ui_callback_on_open_messages(GtkWidget *widget, gpointer data) gboolean ui_callback_on_save_messages(GtkWidget *widget, gpointer data) { - g_debug("Save messages event occurred"); + g_message("Save messages event occurred"); // CHECK_FCT(ui_file_chooser()); return TRUE; } +gboolean ui_callback_on_filters_enabled(GtkWidget *widget, gpointer data) +{ + gboolean enabled; + gboolean changed; + + enabled = gtk_toggle_tool_button_get_active (GTK_TOGGLE_TOOL_BUTTON(widget)); + + g_message("Filters enabled event occurred %d", enabled); + + changed = ui_filters_enable(enabled); + + if (changed) + { + /* Set the tooltip text */ + if (enabled) + { + gtk_tool_item_set_tooltip_text (GTK_TOOL_ITEM(widget), "Disable messages filtering"); + } + else + { + gtk_tool_item_set_tooltip_text (GTK_TOOL_ITEM(widget), "Enable messages filtering"); + } + ui_tree_view_refilter(); + } + + // CHECK_FCT(ui_filters_open_file_chooser()); + return TRUE; +} + gboolean ui_callback_on_open_filters(GtkWidget *widget, gpointer data) { - g_debug("Open filters event occurred"); + g_message("Open filters event occurred"); CHECK_FCT(ui_filters_open_file_chooser()); return TRUE; } gboolean ui_callback_on_save_filters(GtkWidget *widget, gpointer data) { - g_debug("Save filters event occurred"); + g_message("Save filters event occurred"); CHECK_FCT(ui_filters_save_file_chooser()); return TRUE; } @@ -271,7 +300,7 @@ gboolean ui_callback_on_connect(GtkWidget *widget, gpointer data) uint16_t port; int pipe_fd[2]; - g_debug("Connect event occurred"); + g_message("Connect event occurred"); port = atoi (gtk_entry_get_text (GTK_ENTRY(ui_main_data.port_entry))); ip = gtk_entry_get_text (GTK_ENTRY(ui_main_data.ip_entry)); @@ -306,7 +335,7 @@ gboolean ui_callback_on_disconnect(GtkWidget *widget, gpointer data) { /* We have to retrieve the ip address and port of remote host */ - g_debug("Disconnect event occurred"); + g_message("Disconnect event occurred"); ui_pipe_write_message (ui_main_data.pipe_fd[0], UI_PIPE_DISCONNECT_EVT, NULL, 0); @@ -345,12 +374,10 @@ gboolean ui_callback_signal_clear_list(GtkWidget *widget, gpointer data) /* Clear list of signals */ ui_tree_view_destroy_list (ui_main_data.signalslist); - /* if (ui_main_data.text_view != NULL) { - ui_signal_dissect_clear_view(ui_main_data.text_view); + // ui_signal_dissect_clear_view(ui_main_data.text_view); } - */ return TRUE; } @@ -369,7 +396,7 @@ gboolean ui_callback_on_menu_none(GtkWidget *widget, gpointer data) { GtkWidget *menu = (GtkWidget *) data; - g_debug("ui_callback_on_menu_none occurred %lx %lx)", (long) widget, (long) data); + g_message("ui_callback_on_menu_none occurred %lx %lx)", (long) widget, (long) data); gtk_container_foreach(GTK_CONTAINER(menu), ui_callback_on_menu_items_selected, (gpointer) FALSE); @@ -380,7 +407,7 @@ gboolean ui_callback_on_menu_all(GtkWidget *widget, gpointer data) { GtkWidget *menu = (GtkWidget *) data; - g_debug("ui_callback_on_menu_all occurred %lx %lx)", (long) widget, (long) data); + g_message("ui_callback_on_menu_all occurred %lx %lx)", (long) widget, (long) data); gtk_container_foreach(GTK_CONTAINER(menu), ui_callback_on_menu_items_selected, (gpointer) TRUE); @@ -398,7 +425,7 @@ gboolean ui_callback_on_menu_item_selected(GtkWidget *widget, gpointer data) filter_entry->enabled = enabled; ui_tree_view_refilter (); } - g_debug("ui_callback_on_menu_item_selected occurred %lx %lx %s %d (%d messages to display)", (long) widget, (long) data, filter_entry->name, enabled, ui_tree_view_get_filtered_number()); + g_message("ui_callback_on_menu_item_selected occurred %p %p %s %d (%d messages to display)", widget, data, filter_entry->name, enabled, ui_tree_view_get_filtered_number()); return TRUE; } @@ -407,7 +434,7 @@ gboolean ui_callback_on_tree_column_header_click(GtkWidget *widget, gpointer dat { col_type_e col = (col_type_e) data; - g_debug("ui_callback_on_tree_column_header_click %x", col); + g_message("ui_callback_on_tree_column_header_click %d", col); switch (col) { case COL_MESSAGE: diff --git a/common/utils/itti_analyzer/libui/ui_callbacks.h b/common/utils/itti_analyzer/libui/ui_callbacks.h index ca668b6716..2a087fc213 100644 --- a/common/utils/itti_analyzer/libui/ui_callbacks.h +++ b/common/utils/itti_analyzer/libui/ui_callbacks.h @@ -9,6 +9,9 @@ gboolean ui_callback_on_open_messages(GtkWidget *widget, gboolean ui_callback_on_save_messages(GtkWidget *widget, gpointer data); +gboolean ui_callback_on_filters_enabled(GtkWidget *widget, + gpointer data); + gboolean ui_callback_on_open_filters(GtkWidget *widget, gpointer data); diff --git a/common/utils/itti_analyzer/libui/ui_filters.c b/common/utils/itti_analyzer/libui/ui_filters.c index 28c1233395..077cb63c00 100644 --- a/common/utils/itti_analyzer/libui/ui_filters.c +++ b/common/utils/itti_analyzer/libui/ui_filters.c @@ -61,6 +61,18 @@ int ui_init_filters(int reset, int clear_ids) return (RC_OK); } +gboolean ui_filters_enable(gboolean enabled) +{ + gboolean changed = ui_filters.filters_enabled != enabled; + + if (changed) + { + ui_filters.filters_enabled = enabled; + } + + return changed; +} + static int ui_search_name(ui_filter_t *filter, const char *name) { int item; @@ -192,8 +204,11 @@ gboolean ui_filters_message_enabled(const uint32_t message, const uint32_t origi { gboolean result; - result = ui_item_enabled (&ui_filters.messages, message) && ui_item_enabled (&ui_filters.origin_tasks, origin_task) - && ui_item_enabled (&ui_filters.destination_tasks, destination_task) && ui_item_enabled (&ui_filters.instances, instance); + result = (!ui_filters.filters_enabled) + || (ui_item_enabled(&ui_filters.messages, message) + && ui_item_enabled(&ui_filters.origin_tasks, origin_task) + && ui_item_enabled(&ui_filters.destination_tasks, destination_task) + && ui_item_enabled(&ui_filters.instances, instance)); return result; } @@ -285,8 +300,12 @@ static int xml_parse_filters(xmlDocPtr doc) filter_node = filter_node->next; } } + /* Filters have changed destroy filter menus and update tree view */ ui_destroy_filter_menus (); + + /* Reactivate filtering */ + gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON(ui_main_data.filters_enabled), TRUE); ui_tree_view_refilter (); } } diff --git a/common/utils/itti_analyzer/libui/ui_filters.h b/common/utils/itti_analyzer/libui/ui_filters.h index e4706e138f..a4c5ebcef8 100644 --- a/common/utils/itti_analyzer/libui/ui_filters.h +++ b/common/utils/itti_analyzer/libui/ui_filters.h @@ -32,6 +32,7 @@ typedef struct typedef struct { + gboolean filters_enabled; ui_filter_t messages; ui_filter_t origin_tasks; ui_filter_t destination_tasks; @@ -42,6 +43,8 @@ extern ui_filters_t ui_filters; int ui_init_filters(int reset, int clear_ids); +gboolean ui_filters_enable(gboolean enabled); + void ui_filters_add(ui_filter_e filter, uint32_t value, const char *name, ui_entry_enabled_e entry_enabled); gboolean ui_filters_message_enabled(const uint32_t message, const uint32_t origin_task, const uint32_t destination_task, const uint32_t instance); diff --git a/common/utils/itti_analyzer/libui/ui_main_screen.h b/common/utils/itti_analyzer/libui/ui_main_screen.h index 1f9e165cd1..b044df0790 100644 --- a/common/utils/itti_analyzer/libui/ui_main_screen.h +++ b/common/utils/itti_analyzer/libui/ui_main_screen.h @@ -16,17 +16,19 @@ typedef struct { ui_text_view_t *text_view; /* Buttons */ + GtkToolItem *filters_enabled; + GtkToolItem *open_filters_file; + GtkToolItem *save_filters_file; + GtkToolItem *open_replay_file; GtkToolItem *refresh_replay_file; GtkToolItem *save_replay_file; - GtkToolItem *open_filters_file; - GtkToolItem *save_filters_file; + GtkToolItem *connect; GtkToolItem *disconnect; /* Signal list buttons */ /* Clear signals button */ - GtkToolItem *signals_clear_button; GtkToolItem *signals_go_to_button; GtkToolItem *signals_go_to_last_button; GtkToolItem *signals_go_to_first_button; diff --git a/common/utils/itti_analyzer/libui/ui_menu_bar.c b/common/utils/itti_analyzer/libui/ui_menu_bar.c index 8b7f6006da..3a8867adb7 100644 --- a/common/utils/itti_analyzer/libui/ui_menu_bar.c +++ b/common/utils/itti_analyzer/libui/ui_menu_bar.c @@ -98,7 +98,6 @@ int ui_menu_bar_create(GtkWidget *vbox) int ui_toolbar_create(GtkWidget *vbox) { GtkWidget *hbox; - GtkWidget *filters_label; GtkWidget *messages_label; GtkWidget *ip_label; GtkWidget *port_label; @@ -108,14 +107,21 @@ int ui_toolbar_create(GtkWidget *vbox) hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); - filters_label = gtk_label_new("Filters"); messages_label = gtk_label_new("Messages"); + /* Button to deactivate filtering */ + { + ui_main_data.filters_enabled = gtk_toggle_tool_button_new(); + gtk_tool_button_set_label (GTK_TOOL_BUTTON(ui_main_data.filters_enabled), "Filters"); + g_signal_connect(G_OBJECT(ui_main_data.filters_enabled), "clicked", + G_CALLBACK(ui_callback_on_filters_enabled), NULL); + gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON(ui_main_data.filters_enabled), TRUE); + } + /* Button to open filters file */ { ui_main_data.open_filters_file = gtk_tool_button_new_from_stock(GTK_STOCK_OPEN); - gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.open_filters_file), - "Open filters file"); + gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.open_filters_file), "Open filters file"); g_signal_connect(G_OBJECT(ui_main_data.open_filters_file), "clicked", G_CALLBACK(ui_callback_on_open_filters), NULL); @@ -124,8 +130,7 @@ int ui_toolbar_create(GtkWidget *vbox) /* Button to save filters file */ { ui_main_data.save_filters_file = gtk_tool_button_new_from_stock(GTK_STOCK_SAVE); - gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.save_filters_file), - "Save filters file"); + gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.save_filters_file), "Save filters file"); g_signal_connect(G_OBJECT(ui_main_data.save_filters_file), "clicked", G_CALLBACK(ui_callback_on_save_filters), NULL); @@ -134,8 +139,7 @@ int ui_toolbar_create(GtkWidget *vbox) /* Button to open replay file */ { ui_main_data.open_replay_file = gtk_tool_button_new_from_stock(GTK_STOCK_OPEN); - gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.open_replay_file), - "Open messages file"); + gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.open_replay_file), "Open messages file"); g_signal_connect(G_OBJECT(ui_main_data.open_replay_file), "clicked", G_CALLBACK(ui_callback_on_open_messages), (gpointer) FALSE); @@ -144,8 +148,7 @@ int ui_toolbar_create(GtkWidget *vbox) /* Button to refresh replay file */ { ui_main_data.refresh_replay_file = gtk_tool_button_new_from_stock(GTK_STOCK_REFRESH); - gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.refresh_replay_file), - "Reload messages file"); + gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.refresh_replay_file), "Reload messages file"); g_signal_connect(G_OBJECT(ui_main_data.refresh_replay_file), "clicked", G_CALLBACK(ui_callback_on_open_messages), (gpointer) TRUE); @@ -154,8 +157,7 @@ int ui_toolbar_create(GtkWidget *vbox) /* Button to save replay file */ { ui_main_data.save_replay_file = gtk_tool_button_new_from_stock(GTK_STOCK_SAVE); - gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.save_replay_file), - "Save messages file"); + gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.save_replay_file), "Save messages file"); g_signal_connect(G_OBJECT(ui_main_data.save_replay_file), "clicked", G_CALLBACK(ui_callback_on_save_messages), NULL); @@ -166,8 +168,7 @@ int ui_toolbar_create(GtkWidget *vbox) { ui_main_data.signals_go_to_button = gtk_tool_button_new_from_stock(GTK_STOCK_INDEX); /* Set the tooltip text */ - gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.signals_go_to_button), - "Goto signal"); + gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.signals_go_to_button), "Goto signal"); gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.signals_go_to_button), FALSE); @@ -180,8 +181,7 @@ int ui_toolbar_create(GtkWidget *vbox) { ui_main_data.signals_go_to_first_button = gtk_tool_button_new_from_stock(GTK_STOCK_GOTO_FIRST); /* Set the tooltip text */ - gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.signals_go_to_first_button), - "Goto first signal"); + gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.signals_go_to_first_button), "Goto first signal"); gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.signals_go_to_first_button), FALSE); @@ -193,8 +193,7 @@ int ui_toolbar_create(GtkWidget *vbox) { ui_main_data.signals_go_to_last_button = gtk_tool_button_new_from_stock(GTK_STOCK_GOTO_LAST); /* Set the tooltip text */ - gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.signals_go_to_last_button), - "Goto last signal"); + gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.signals_go_to_last_button), "Goto last signal"); gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.signals_go_to_last_button), FALSE); @@ -206,8 +205,7 @@ int ui_toolbar_create(GtkWidget *vbox) { ui_main_data.connect = gtk_tool_button_new_from_stock(GTK_STOCK_CONNECT); /* Set the tooltip text */ - gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.connect), - "Connect to remote host"); + gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.connect), "Connect to remote host"); g_signal_connect(G_OBJECT(ui_main_data.connect), "clicked", G_CALLBACK(ui_callback_on_connect), NULL); @@ -217,8 +215,7 @@ int ui_toolbar_create(GtkWidget *vbox) { ui_main_data.disconnect = gtk_tool_button_new_from_stock(GTK_STOCK_DISCONNECT); /* Set the tooltip text */ - gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.disconnect), - "Disconnect from remote host"); + gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.disconnect), "Disconnect from remote host"); /* Disabled at startup. Will be activated when a connection is established */ gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.disconnect), FALSE); @@ -240,7 +237,7 @@ int ui_toolbar_create(GtkWidget *vbox) gtk_entry_set_width_chars(GTK_ENTRY(ui_main_data.port_entry), 5); gtk_entry_set_text(GTK_ENTRY(ui_main_data.port_entry), ui_main_data.port_entry_init); - gtk_box_pack_start(GTK_BOX(hbox), filters_label, FALSE, FALSE, LABEL_SPACE); + gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.filters_enabled), FALSE, FALSE, LABEL_SPACE); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.open_filters_file), FALSE, FALSE, BUTTON_SPACE); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.save_filters_file), FALSE, FALSE, BUTTON_SPACE); diff --git a/common/utils/itti_analyzer/libui/ui_signal_dissect_view.c b/common/utils/itti_analyzer/libui/ui_signal_dissect_view.c index 53fe09b48a..112ca206fe 100644 --- a/common/utils/itti_analyzer/libui/ui_signal_dissect_view.c +++ b/common/utils/itti_analyzer/libui/ui_signal_dissect_view.c @@ -49,11 +49,14 @@ int ui_signal_dissect_clear_view(ui_text_view_t *text_view) g_assert(text_view != NULL); - text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view->text_view)); - - /* If a text buffer is present for the textview remove it */ - if (text_buffer != NULL) { - gtk_text_view_set_buffer(GTK_TEXT_VIEW(text_view->text_view), NULL); + if (text_view->text_view != NULL) + { + text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view->text_view)); + + /* If a text buffer is present for the textview remove it */ + if (text_buffer != NULL) { + gtk_text_view_set_buffer(GTK_TEXT_VIEW(text_view->text_view), NULL); + } } return RC_OK; diff --git a/common/utils/itti_analyzer/libui/ui_tree_view.c b/common/utils/itti_analyzer/libui/ui_tree_view.c index 9e6e59dc0c..4031d5cc59 100644 --- a/common/utils/itti_analyzer/libui/ui_tree_view.c +++ b/common/utils/itti_analyzer/libui/ui_tree_view.c @@ -269,7 +269,10 @@ void ui_tree_view_refilter(void) { ui_store.filtered_last_msg = 0; ui_store.filtered_msg_number = 0; - gtk_tree_model_filter_refilter (ui_store.filtered); + if (ui_store.filtered != NULL) + { + gtk_tree_model_filter_refilter (ui_store.filtered); + } } guint ui_tree_view_get_filtered_number(void) -- GitLab