diff --git a/common/utils/itti_analyzer/libui/ui_callbacks.c b/common/utils/itti_analyzer/libui/ui_callbacks.c index abba94f5e1ab3ff2b3fcff6c9782df67d1eef829..fd95c54e260e34378e732478edbc39afbbca0fcf 100644 --- a/common/utils/itti_analyzer/libui/ui_callbacks.c +++ b/common/utils/itti_analyzer/libui/ui_callbacks.c @@ -25,36 +25,46 @@ #include "locate_root.h" #include "xml_parse.h" -gboolean ui_callback_on_open_messages(GtkWidget *widget, GdkEvent *event, gpointer data) +gboolean ui_callback_on_open_messages(GtkWidget *widget, gpointer data) { - g_debug("Open messages event occurred"); - CHECK_FCT(ui_messages_open_file_chooser()); + gboolean refresh = (data != NULL) ? TRUE : FALSE; + + g_debug("Open messages event occurred %d", refresh); + + if (refresh && (ui_main_data.messages_file_name != NULL)) + { + CHECK_FCT(ui_messages_read (ui_main_data.messages_file_name)); + } + else + { + CHECK_FCT(ui_messages_open_file_chooser()); + } return TRUE; } -gboolean ui_callback_on_save_messages(GtkWidget *widget, GdkEvent *event, gpointer data) +gboolean ui_callback_on_save_messages(GtkWidget *widget, gpointer data) { g_debug("Save messages event occurred"); // CHECK_FCT(ui_file_chooser()); return TRUE; } -gboolean ui_callback_on_open_filters(GtkWidget *widget, GdkEvent *event, gpointer data) +gboolean ui_callback_on_open_filters(GtkWidget *widget, gpointer data) { g_debug("Open filters event occurred"); CHECK_FCT(ui_filters_open_file_chooser()); return TRUE; } -gboolean ui_callback_on_save_filters(GtkWidget *widget, GdkEvent *event, gpointer data) +gboolean ui_callback_on_save_filters(GtkWidget *widget, gpointer data) { g_debug("Save filters event occurred"); CHECK_FCT(ui_filters_save_file_chooser()); return TRUE; } -gboolean ui_callback_on_about(GtkWidget *widget, GdkEvent *event, gpointer data) +gboolean ui_callback_on_about(GtkWidget *widget, gpointer data) { #if defined(PACKAGE_STRING) ui_notification_dialog (GTK_MESSAGE_INFO, "about", "%s", PACKAGE_STRING); @@ -118,7 +128,7 @@ void ui_signal_add_to_list(gpointer data, gpointer user_data) if ((ui_main_data.path_last == NULL) || (path == NULL) || (gtk_tree_path_compare(ui_main_data.path_last, path) == 0)) { /* Advance to the new last signal */ - ui_callback_signal_go_to_last (NULL, NULL, NULL); + ui_callback_signal_go_to_last (NULL, NULL); } } @@ -237,7 +247,7 @@ gboolean ui_pipe_callback(gint source, gpointer user_data) return FALSE; } -gboolean ui_callback_on_connect(GtkWidget *widget, GdkEvent *event, gpointer data) +gboolean ui_callback_on_connect(GtkWidget *widget, gpointer data) { /* We have to retrieve the ip address and port of remote host */ const char *ip; @@ -263,7 +273,7 @@ gboolean ui_callback_on_connect(GtkWidget *widget, GdkEvent *event, gpointer dat /* Disable the connect button */ ui_disable_connect_button (); - ui_callback_signal_clear_list (widget, event, data); + ui_callback_signal_clear_list (widget, data); if (socket_connect_to_remote_host (ip, port, pipe_fd[1]) != 0) { @@ -275,7 +285,7 @@ gboolean ui_callback_on_connect(GtkWidget *widget, GdkEvent *event, gpointer dat return TRUE; } -gboolean ui_callback_on_disconnect(GtkWidget *widget, GdkEvent *event, gpointer data) +gboolean ui_callback_on_disconnect(GtkWidget *widget, gpointer data) { /* We have to retrieve the ip address and port of remote host */ @@ -287,19 +297,19 @@ gboolean ui_callback_on_disconnect(GtkWidget *widget, GdkEvent *event, gpointer return TRUE; } -gboolean ui_callback_signal_go_to(GtkWidget *widget, GdkEvent *event, gpointer data) +gboolean ui_callback_signal_go_to(GtkWidget *widget, gpointer data) { ui_tree_view_select_row (ui_main_data.nb_message_received / 2, NULL); return TRUE; } -gboolean ui_callback_signal_go_to_first(GtkWidget *widget, GdkEvent *event, gpointer data) +gboolean ui_callback_signal_go_to_first(GtkWidget *widget, gpointer data) { ui_tree_view_select_row (0, NULL); return TRUE; } -gboolean ui_callback_signal_go_to_last(GtkWidget *widget, GdkEvent *event, gpointer data) +gboolean ui_callback_signal_go_to_last(GtkWidget *widget, gpointer data) { GtkTreePath *path; @@ -309,7 +319,7 @@ gboolean ui_callback_signal_go_to_last(GtkWidget *widget, GdkEvent *event, gpoin return TRUE; } -gboolean ui_callback_signal_clear_list(GtkWidget *widget, GdkEvent *event, gpointer data) +gboolean ui_callback_signal_clear_list(GtkWidget *widget, gpointer data) { /* Disable buttons to move in the list of signals */ ui_set_sensitive_move_buttons (FALSE); @@ -317,6 +327,46 @@ gboolean ui_callback_signal_clear_list(GtkWidget *widget, GdkEvent *event, gpoin /* 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); + } + */ + + return TRUE; +} + +static void ui_callback_on_menu_items_selected(GtkWidget *widget, gpointer data) +{ + gboolean active = data != NULL; + + if (GTK_IS_CHECK_MENU_ITEM(widget)) + { + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(widget), active); + } +} + +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); + + gtk_container_foreach(GTK_CONTAINER(menu), ui_callback_on_menu_items_selected, (gpointer) FALSE); + + return TRUE; +} + +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); + + gtk_container_foreach(GTK_CONTAINER(menu), ui_callback_on_menu_items_selected, (gpointer) TRUE); + return TRUE; } @@ -331,7 +381,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 %x %x %s %d (%d messages to display)", (int) widget, (int) data, filter_entry->name, enabled, ui_tree_view_get_filtered_number()); + 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()); return TRUE; } @@ -340,7 +390,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_debug("ui_callback_on_tree_column_header_click %x", col); switch (col) { case COL_SIGNAL: diff --git a/common/utils/itti_analyzer/libui/ui_callbacks.h b/common/utils/itti_analyzer/libui/ui_callbacks.h index 5407fb52c65d281682d988d836315589ab5e4a4d..ca668b6716483888a261846f4cce000f41cb9fdd 100644 --- a/common/utils/itti_analyzer/libui/ui_callbacks.h +++ b/common/utils/itti_analyzer/libui/ui_callbacks.h @@ -4,34 +4,27 @@ #include <gtk/gtk.h> gboolean ui_callback_on_open_messages(GtkWidget *widget, - GdkEvent *event, gpointer data); gboolean ui_callback_on_save_messages(GtkWidget *widget, - GdkEvent *event, gpointer data); gboolean ui_callback_on_open_filters(GtkWidget *widget, - GdkEvent *event, gpointer data); gboolean ui_callback_on_save_filters(GtkWidget *widget, - GdkEvent *event, gpointer data); gboolean ui_callback_on_about(GtkWidget *widget, - GdkEvent *event, gpointer data); void ui_signal_add_to_list(gpointer data, gpointer user_data); gboolean ui_callback_on_connect(GtkWidget *widget, - GdkEvent *event, gpointer data); gboolean ui_callback_on_disconnect(GtkWidget *widget, - GdkEvent *event, gpointer data); gboolean ui_callback_on_tree_view_select(GtkWidget *widget, @@ -46,23 +39,25 @@ ui_callback_on_select_signal(GtkTreeSelection *selection, gpointer userdata); gboolean ui_callback_signal_go_to(GtkWidget *widget, - GdkEvent *event, gpointer data); gboolean ui_callback_signal_go_to_first(GtkWidget *widget, - GdkEvent *event, gpointer data); gboolean ui_callback_signal_go_to_last(GtkWidget *widget, - GdkEvent *event, gpointer data); gboolean ui_callback_signal_clear_list(GtkWidget *widget, - GdkEvent *event, gpointer data); gboolean ui_pipe_callback(gint source, gpointer user_data); +gboolean ui_callback_on_menu_none(GtkWidget *widget, + gpointer data); + +gboolean ui_callback_on_menu_all(GtkWidget *widget, + gpointer data); + gboolean ui_callback_on_menu_item_selected(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 cda77d38c535cf08193cfb61748c222c8240191a..938f1de7be6cac130f8a2032fa299915ea1aff4a 100644 --- a/common/utils/itti_analyzer/libui/ui_filters.c +++ b/common/utils/itti_analyzer/libui/ui_filters.c @@ -75,6 +75,7 @@ static int ui_search_name(ui_filter_t *filter, const char *name) return (item); } +/* static int ui_search_id(ui_filter_t *filter, uint32_t value) { int item; @@ -89,6 +90,7 @@ static int ui_search_id(ui_filter_t *filter, uint32_t value) return (item); } +*/ static void ui_filter_set_enabled(uint8_t *enabled, ui_entry_enabled_e entry_enabled, gboolean new) { @@ -240,7 +242,7 @@ static int xml_parse_filters(xmlDocPtr doc) if (filter_node != NULL) { filter = ui_filter_from_name ((const char*) filter_node->name); - // g_debug ("Found filter %s %d", filter_node->name, filter); + g_debug ("Found filter %s %d", filter_node->name, filter); if (filter == FILTER_UNKNOWN) { @@ -258,7 +260,7 @@ static int xml_parse_filters(xmlDocPtr doc) if (cur_node != NULL) { - // g_debug(" Found entry %s %s", cur_node->name, cur_node->properties->children->content); + g_debug(" Found entry %s %s", cur_node->name, cur_node->properties->children->content); ui_filters_add ( filter, FILTER_ID_UNDEFINED, @@ -370,35 +372,90 @@ static void ui_create_filter_menu(GtkWidget **menu, ui_filter_t *filter) int item; gpointer data; - *menu = gtk_menu_new (); + *menu = gtk_menu_new(); + /* Create the "NONE" menu-item */ + { + /* Create a new menu-item with a name */ + menu_items = gtk_menu_item_new_with_label("NONE"); + + /* Add it to the menu. */ + gtk_menu_shell_append(GTK_MENU_SHELL(*menu), menu_items); + + g_debug("ui_create_filter_menu %lx", (long) menu_items); + g_signal_connect(G_OBJECT(menu_items), "activate", + G_CALLBACK(ui_callback_on_menu_none), *menu); + + /* Show the widget */ + gtk_widget_show(menu_items); + } + + /* Create the "ALL" menu-item */ + { + /* Create a new menu-item with a name */ + menu_items = gtk_menu_item_new_with_label("ALL"); + + /* Add it to the menu. */ + gtk_menu_shell_append(GTK_MENU_SHELL(*menu), menu_items); + + g_debug("ui_create_filter_menu %lx", (long) menu_items); + g_signal_connect(G_OBJECT(menu_items), "activate", + G_CALLBACK(ui_callback_on_menu_all), *menu); + + /* Show the widget */ + gtk_widget_show(menu_items); + } + + /* Create separator */ + { + menu_items = gtk_menu_item_new(); + + /* Add it to the menu. */ + gtk_menu_shell_append(GTK_MENU_SHELL(*menu), menu_items); + + /* Show the widget */ + gtk_widget_show(menu_items); + } + + /* Creates menu-items */ for (item = 0; item < filter->used; item++) { /* Create a new menu-item with a name */ - menu_items = gtk_check_menu_item_new_with_label (filter->items[item].name); + menu_items = gtk_check_menu_item_new_with_label( + filter->items[item].name); /* Add it to the menu. */ - gtk_menu_shell_append (GTK_MENU_SHELL (*menu), menu_items); + gtk_menu_shell_append(GTK_MENU_SHELL(*menu), menu_items); - gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(menu_items), filter->items[item].enabled); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_items), + filter->items[item].enabled); /* Connect function to be called when the menu item is selected */ data = &filter->items[item]; - // g_debug("ui_create_filter_menu %x %x", (int) menu_items, (int) data); - g_signal_connect(G_OBJECT (menu_items), "activate", G_CALLBACK(ui_callback_on_menu_item_selected), data); + g_debug("ui_create_filter_menu %lx %lx", (long) menu_items, (long) data); + g_signal_connect(G_OBJECT(menu_items), "activate", + G_CALLBACK(ui_callback_on_menu_item_selected), data); /* Show the widget */ - gtk_widget_show (menu_items); + gtk_widget_show(menu_items); } } -static void ui_destroy_filter_menu(GtkWidget **menu, ui_filter_t *filter) +static void ui_destroy_filter_menu_item(GtkWidget *widget, gpointer data) { - /* TODO destroy menu items ? */ + if (GTK_IS_MENU_ITEM(widget)) + { + gtk_widget_destroy(widget); + } +} +static void ui_destroy_filter_menu(GtkWidget **menu, ui_filter_t *filter) +{ if (*menu != NULL) { - gtk_widget_destroy (*menu); + gtk_container_foreach(GTK_CONTAINER(*menu), ui_destroy_filter_menu_item, NULL); + + gtk_widget_destroy(*menu); *menu = NULL; } } diff --git a/common/utils/itti_analyzer/libui/ui_menu_bar.c b/common/utils/itti_analyzer/libui/ui_menu_bar.c index 50a53c26a696c38e4bfda1514617ebaddbee8416..8b7f6006da5f5ce179878372a0df9eecff91d8a1 100644 --- a/common/utils/itti_analyzer/libui/ui_menu_bar.c +++ b/common/utils/itti_analyzer/libui/ui_menu_bar.c @@ -138,7 +138,17 @@ int ui_toolbar_create(GtkWidget *vbox) "Open messages file"); g_signal_connect(G_OBJECT(ui_main_data.open_replay_file), "clicked", - G_CALLBACK(ui_callback_on_open_messages), NULL); + G_CALLBACK(ui_callback_on_open_messages), (gpointer) FALSE); + } + + /* 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"); + + g_signal_connect(G_OBJECT(ui_main_data.refresh_replay_file), "clicked", + G_CALLBACK(ui_callback_on_open_messages), (gpointer) TRUE); } /* Button to save replay file */ @@ -238,6 +248,7 @@ int ui_toolbar_create(GtkWidget *vbox) gtk_box_pack_start(GTK_BOX(hbox), messages_label, FALSE, FALSE, LABEL_SPACE); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.open_replay_file), FALSE, FALSE, BUTTON_SPACE); + gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.refresh_replay_file), FALSE, FALSE, BUTTON_SPACE); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.save_replay_file), FALSE, FALSE, BUTTON_SPACE); gtk_box_pack_start(GTK_BOX(hbox), gtk_separator_new(GTK_ORIENTATION_VERTICAL), FALSE, FALSE, SEPARATOR_SPACE); diff --git a/common/utils/itti_analyzer/libui/ui_notifications.c b/common/utils/itti_analyzer/libui/ui_notifications.c index d8f024bc78aa93bbdb18a3ec81dd070bf57a19c6..7b1bbe86000d29bcb57e3ad3114df02f6ef5d9be 100644 --- a/common/utils/itti_analyzer/libui/ui_notifications.c +++ b/common/utils/itti_analyzer/libui/ui_notifications.c @@ -89,7 +89,7 @@ int ui_messages_read(char *filename) { itti_socket_header_t message_header; - ui_callback_signal_clear_list (NULL, NULL, NULL); + ui_callback_signal_clear_list (NULL, NULL); do { @@ -107,7 +107,7 @@ int ui_messages_read(char *filename) { input_data_length = message_header.message_size - sizeof(itti_socket_header_t); - // g_debug ("%x, %x ,%x", message_header.message_type, message_header.message_size, input_data_length); + g_debug ("%x, %x ,%x", message_header.message_type, message_header.message_size, input_data_length); /* Checking for non-header part */ if (input_data_length > 0)