From bdcf5346a62472cea8e588df239d3c4d6d2d699f Mon Sep 17 00:00:00 2001 From: winckel <winckel@eurecom.fr> Date: Wed, 20 Nov 2013 09:14:24 +0000 Subject: [PATCH] Fixed a bad row (-1) selection issue. git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4450 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- .../utils/itti_analyzer/libui/ui_tree_view.c | 207 +++++++++--------- 1 file changed, 101 insertions(+), 106 deletions(-) diff --git a/common/utils/itti_analyzer/libui/ui_tree_view.c b/common/utils/itti_analyzer/libui/ui_tree_view.c index 7dfbda73e1..6a97a67c79 100644 --- a/common/utils/itti_analyzer/libui/ui_tree_view.c +++ b/common/utils/itti_analyzer/libui/ui_tree_view.c @@ -37,8 +37,8 @@ static gboolean ui_tree_filter_messages(GtkTreeModel *model, GtkTreeIter *iter, gboolean enabled = FALSE; - gtk_tree_model_get (model, iter, COL_MSG_NUM, &msg_number, COL_MESSAGE_ID, &message_id, COL_FROM_TASK_ID, &origin_task_id, - COL_TO_TASK_ID, &destination_task_id, COL_INSTANCE, &instance, -1); + gtk_tree_model_get (model, iter, COL_MSG_NUM, &msg_number, COL_MESSAGE_ID, &message_id, COL_FROM_TASK_ID, + &origin_task_id, COL_TO_TASK_ID, &destination_task_id, COL_INSTANCE, &instance, -1); if (msg_number != 0) { enabled = ui_filters_message_enabled (message_id, origin_task_id, destination_task_id, instance); @@ -63,113 +63,104 @@ static gboolean onButtonPressed(GtkWidget *treeview, GdkEventButton *event, gpoi } /* -static gboolean onButtonRelease(GtkWidget *treeview, GdkEventButton *event, gpointer userdata) -{ - g_debug("onButtonRelease %p %p %p %d %d", treeview, event, userdata, event->type, event->button); - // last_event = event; + static gboolean onButtonRelease(GtkWidget *treeview, GdkEventButton *event, gpointer userdata) + { + g_debug("onButtonRelease %p %p %p %d %d", treeview, event, userdata, event->type, event->button); + // last_event = event; - return FALSE; -} -*/ + return FALSE; + } + */ -static void -ui_tree_view_init_list(GtkWidget *list) +static void ui_tree_view_init_list(GtkWidget *list) { GtkCellRenderer *renderer_left; GtkCellRenderer *renderer_right; GtkTreeViewColumn *column; - renderer_left = gtk_cell_renderer_text_new(); + renderer_left = gtk_cell_renderer_text_new (); gtk_cell_renderer_set_padding (renderer_left, 5, 0); - renderer_right = gtk_cell_renderer_text_new(); + renderer_right = gtk_cell_renderer_text_new (); gtk_cell_renderer_set_alignment (renderer_right, 1, 0.5); gtk_cell_renderer_set_padding (renderer_right, 5, 0); - column = gtk_tree_view_column_new_with_attributes( - "MN", renderer_right, "text", COL_MSG_NUM, NULL); + column = gtk_tree_view_column_new_with_attributes ("MN", renderer_right, "text", COL_MSG_NUM, NULL); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_alignment (column, 0.5); - gtk_tree_view_append_column(GTK_TREE_VIEW(list), column); + gtk_tree_view_append_column (GTK_TREE_VIEW(list), column); - column = gtk_tree_view_column_new_with_attributes( - "LTE Time", renderer_right, "text", COL_LTE_TIME, NULL); + column = gtk_tree_view_column_new_with_attributes ("LTE Time", renderer_right, "text", COL_LTE_TIME, NULL); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_alignment (column, 0.5); - gtk_tree_view_append_column(GTK_TREE_VIEW(list), column); + gtk_tree_view_append_column (GTK_TREE_VIEW(list), column); - column = gtk_tree_view_column_new_with_attributes( - "Signal", renderer_left, "text", COL_MESSAGE, NULL); + column = gtk_tree_view_column_new_with_attributes ("Signal", renderer_left, "text", COL_MESSAGE, NULL); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_alignment (column, 0.5); - gtk_tree_view_append_column(GTK_TREE_VIEW(list), column); - g_signal_connect(G_OBJECT(column), "clicked", - G_CALLBACK(ui_callback_on_tree_column_header_click), (gpointer) COL_MESSAGE); + gtk_tree_view_append_column (GTK_TREE_VIEW(list), column); + g_signal_connect(G_OBJECT(column), "clicked", G_CALLBACK(ui_callback_on_tree_column_header_click), + (gpointer) COL_MESSAGE); - column = gtk_tree_view_column_new_with_attributes( - "From", renderer_left, "text", COL_FROM_TASK, NULL); + column = gtk_tree_view_column_new_with_attributes ("From", renderer_left, "text", COL_FROM_TASK, NULL); gtk_tree_view_column_set_alignment (column, 0.5); gtk_tree_view_column_set_resizable (column, TRUE); - gtk_tree_view_append_column(GTK_TREE_VIEW(list), column); - g_signal_connect(G_OBJECT(column), "clicked", - G_CALLBACK(ui_callback_on_tree_column_header_click), (gpointer) COL_FROM_TASK); + gtk_tree_view_append_column (GTK_TREE_VIEW(list), column); + g_signal_connect(G_OBJECT(column), "clicked", G_CALLBACK(ui_callback_on_tree_column_header_click), + (gpointer) COL_FROM_TASK); - column = gtk_tree_view_column_new_with_attributes( - "To", renderer_left, "text", COL_TO_TASK, NULL); + column = gtk_tree_view_column_new_with_attributes ("To", renderer_left, "text", COL_TO_TASK, NULL); gtk_tree_view_column_set_alignment (column, 0.5); gtk_tree_view_column_set_resizable (column, TRUE); - gtk_tree_view_append_column(GTK_TREE_VIEW(list), column); - g_signal_connect(G_OBJECT(column), "clicked", - G_CALLBACK(ui_callback_on_tree_column_header_click), (gpointer) COL_TO_TASK); + gtk_tree_view_append_column (GTK_TREE_VIEW(list), column); + g_signal_connect(G_OBJECT(column), "clicked", G_CALLBACK(ui_callback_on_tree_column_header_click), + (gpointer) COL_TO_TASK); - column = gtk_tree_view_column_new_with_attributes( - "Ins", renderer_right, "text", COL_INSTANCE, NULL); + column = gtk_tree_view_column_new_with_attributes ("Ins", renderer_right, "text", COL_INSTANCE, NULL); gtk_tree_view_column_set_alignment (column, 0.5); - gtk_tree_view_append_column(GTK_TREE_VIEW(list), column); - g_signal_connect(G_OBJECT(column), "clicked", - G_CALLBACK(ui_callback_on_tree_column_header_click), (gpointer) COL_INSTANCE); - - ui_store.store = gtk_list_store_new(NUM_COLS, - G_TYPE_UINT, // COL_MSG_NUM - G_TYPE_STRING, // COL_LTE_TIME - G_TYPE_STRING, // COL_SIGNAL - G_TYPE_STRING, // COL_FROM_TASK - G_TYPE_STRING, // COL_TO_TASK - G_TYPE_UINT, // COL_INSTANCE - /* HACK: add id of message fields to speed-up filtering - */ - G_TYPE_UINT, // COL_SIGNAL_ID - G_TYPE_UINT, // COL_FROM_TASK_ID - G_TYPE_UINT, // COL_TO_TASK_ID - /* HACK: add a reference to the buffer here - * to avoid maintining multiple lists. - * The reference is not displayed - */ - G_TYPE_POINTER); - - if(ui_store.store == NULL) + gtk_tree_view_append_column (GTK_TREE_VIEW(list), column); + g_signal_connect(G_OBJECT(column), "clicked", G_CALLBACK(ui_callback_on_tree_column_header_click), + (gpointer) COL_INSTANCE); + + ui_store.store = gtk_list_store_new (NUM_COLS, // Number of columns + // Displayed columns + G_TYPE_UINT, // COL_MSG_NUM + G_TYPE_STRING, // COL_LTE_TIME + G_TYPE_STRING, // COL_MESSAGE + G_TYPE_STRING, // COL_FROM_TASK + G_TYPE_STRING, // COL_TO_TASK + G_TYPE_UINT, // COL_INSTANCE + // Not displayed columns + // Id of some message fields to speed-up filtering + G_TYPE_UINT, // COL_MESSAGE_ID + G_TYPE_UINT, // COL_FROM_TASK_ID + G_TYPE_UINT, // COL_TO_TASK_ID + // Reference to the buffer here to avoid maintaining multiple lists. + G_TYPE_POINTER); + + if (ui_store.store == NULL) { g_error("gtk_list_store_new failed"); } ui_store.filtered = GTK_TREE_MODEL_FILTER (gtk_tree_model_filter_new (GTK_TREE_MODEL (ui_store.store), NULL)); - gtk_tree_model_filter_set_visible_func (ui_store.filtered, - (GtkTreeModelFilterVisibleFunc) ui_tree_filter_messages, + gtk_tree_model_filter_set_visible_func (ui_store.filtered, (GtkTreeModelFilterVisibleFunc) ui_tree_filter_messages, &ui_store, NULL); - gtk_tree_view_set_model(GTK_TREE_VIEW(list), GTK_TREE_MODEL(ui_store.filtered)); + gtk_tree_view_set_model (GTK_TREE_VIEW(list), GTK_TREE_MODEL(ui_store.filtered)); - gtk_tree_view_columns_autosize(GTK_TREE_VIEW(list)); + gtk_tree_view_columns_autosize (GTK_TREE_VIEW(list)); } -static void ui_tree_view_add_to_list(GtkWidget *list, const gchar *lte_time, const uint32_t message_number, const uint32_t message_id, const gchar *signal_name, - const uint32_t origin_task_id, const char *origin_task, - const uint32_t destination_task_id, const char *destination_task, uint32_t instance, gpointer buffer) +static void ui_tree_view_add_to_list(GtkWidget *list, const gchar *lte_time, const uint32_t message_number, + const uint32_t message_id, const gchar *signal_name, const uint32_t origin_task_id, + const char *origin_task, const uint32_t destination_task_id, + const char *destination_task, uint32_t instance, gpointer buffer) { GtkTreeIter iter; - gtk_list_store_append(ui_store.store, &iter); - gtk_list_store_set(ui_store.store, &iter, + gtk_list_store_append (ui_store.store, &iter); + gtk_list_store_set (ui_store.store, &iter, /* Columns */ COL_MSG_NUM , message_number, COL_LTE_TIME , lte_time, @@ -189,7 +180,7 @@ void ui_tree_view_destroy_list(GtkWidget *list) { g_assert(list != NULL); - gtk_list_store_clear(ui_store.store); + gtk_list_store_clear (ui_store.store); ui_store.filtered_last_msg = 0; ui_store.filtered_msg_number = 0; ui_store.instance_number = 0; @@ -199,15 +190,15 @@ void ui_tree_view_destroy_list(GtkWidget *list) } /* Search for the message with its message number equal to the given value or the previous one */ -static gboolean ui_tree_view_search (GtkTreeModel *model, gint column, const gchar *key, GtkTreeIter *iter, - gpointer search_data) +static gboolean ui_tree_view_search(GtkTreeModel *model, gint column, const gchar *key, GtkTreeIter *iter, + gpointer search_data) { uint32_t msg_number; - uint32_t key_value = atoi(key); + uint32_t key_value = atoi (key); gtk_tree_model_get (model, iter, column, &msg_number, -1); - g_debug ("ui_tree_view_search %d %d", key_value, msg_number); + g_debug("ui_tree_view_search %d %d", key_value, msg_number); if (key_value == msg_number) { @@ -218,7 +209,7 @@ static gboolean ui_tree_view_search (GtkTreeModel *model, gint column, const gch { GtkTreeIter iter_next = *iter; - if (gtk_tree_model_iter_next(model, &iter_next)) + if (gtk_tree_model_iter_next (model, &iter_next)) { gtk_tree_model_get (model, &iter_next, column, &msg_number, -1); @@ -243,39 +234,38 @@ int ui_tree_view_create(GtkWidget *window, GtkWidget *vbox) GtkTreeSelection *selection; GtkWidget *scrolled_window; - scrolled_window = gtk_scrolled_window_new(NULL, NULL); + scrolled_window = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), - GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); - ui_main_data.messages_list = gtk_tree_view_new(); - gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(ui_main_data.messages_list), TRUE); + ui_main_data.messages_list = gtk_tree_view_new (); + gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(ui_main_data.messages_list), TRUE); gtk_tree_view_set_search_equal_func (GTK_TREE_VIEW(ui_main_data.messages_list), ui_tree_view_search, NULL, NULL); - gtk_tree_view_set_search_entry (GTK_TREE_VIEW(ui_main_data.messages_list), GTK_ENTRY(ui_main_data.signals_go_to_entry)); + gtk_tree_view_set_search_entry (GTK_TREE_VIEW(ui_main_data.messages_list), + GTK_ENTRY(ui_main_data.signals_go_to_entry)); /* Disable multiple selection */ - selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(ui_main_data.messages_list)); - gtk_tree_selection_set_mode(selection, GTK_SELECTION_BROWSE); + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(ui_main_data.messages_list)); + gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE); hbox = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL); - gtk_container_add(GTK_CONTAINER(scrolled_window), ui_main_data.messages_list); + gtk_container_add (GTK_CONTAINER(scrolled_window), ui_main_data.messages_list); - ui_tree_view_init_list(ui_main_data.messages_list); - gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(ui_main_data.messages_list), TRUE); + ui_tree_view_init_list (ui_main_data.messages_list); + gtk_tree_view_set_headers_clickable (GTK_TREE_VIEW(ui_main_data.messages_list), TRUE); - gtk_scrolled_window_set_min_content_width(GTK_SCROLLED_WINDOW(scrolled_window), 620); + gtk_scrolled_window_set_min_content_width (GTK_SCROLLED_WINDOW(scrolled_window), 620); gtk_paned_pack1 (GTK_PANED (hbox), scrolled_window, FALSE, TRUE); - ui_main_data.text_view = ui_signal_dissect_new(hbox); + ui_main_data.text_view = ui_signal_dissect_new (hbox); - gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 5); + gtk_box_pack_start (GTK_BOX(vbox), hbox, TRUE, TRUE, 5); g_signal_connect(G_OBJECT(ui_main_data.messages_list), "button-press-event", G_CALLBACK (onButtonPressed), NULL); // g_signal_connect(G_OBJECT(ui_main_data.signalslist), "button-release-event", G_CALLBACK (onButtonRelease), NULL); /* Connect callback on row selection */ - gtk_tree_selection_set_select_function(selection, ui_callback_on_select_signal, - ui_main_data.text_view, NULL); + gtk_tree_selection_set_select_function (selection, ui_callback_on_select_signal, ui_main_data.text_view, NULL); ui_store.filtered_last_msg = 0; ui_store.filtered_msg_number = 0; @@ -286,13 +276,12 @@ int ui_tree_view_create(GtkWidget *window, GtkWidget *vbox) return 0; } -int ui_tree_view_new_signal_ind(const uint32_t message_number, const gchar *lte_time, - const uint32_t message_id, const char *message_name, - const uint32_t origin_task_id, const char *origin_task, - const uint32_t destination_task_id, const char *destination_task, - uint32_t instance, gpointer buffer) +int ui_tree_view_new_signal_ind(const uint32_t message_number, const gchar *lte_time, const uint32_t message_id, + const char *message_name, const uint32_t origin_task_id, const char *origin_task, + const uint32_t destination_task_id, const char *destination_task, uint32_t instance, + gpointer buffer) { - if(ui_store.instance_number < (instance + 1)) + if (ui_store.instance_number < (instance + 1)) { int i; char name[10]; @@ -303,11 +292,12 @@ int ui_tree_view_new_signal_ind(const uint32_t message_number, const gchar *lte_ ui_filters_add (FILTER_INSTANCES, i, name, ENTRY_ENABLED_TRUE); } ui_store.instance_number = (instance + 1); - ui_destroy_filter_menu(FILTER_INSTANCES); + ui_destroy_filter_menu (FILTER_INSTANCES); } - ui_tree_view_add_to_list(ui_main_data.messages_list, lte_time, message_number, message_id, message_name, - origin_task_id, origin_task, destination_task_id, destination_task, instance, (buffer_t *)buffer); + ui_tree_view_add_to_list (ui_main_data.messages_list, lte_time, message_number, message_id, message_name, + origin_task_id, origin_task, destination_task_id, destination_task, instance, + (buffer_t *) buffer); return RC_OK; } @@ -316,14 +306,19 @@ void ui_tree_view_select_row(gint row) { GtkTreePath *path_row; - path_row = gtk_tree_path_new_from_indices(row, -1); - - if (path_row != NULL) + if (row >= 0) { - /* Select the message in requested row */ - gtk_tree_view_set_cursor(GTK_TREE_VIEW(ui_main_data.messages_list), path_row, NULL, FALSE); - /* Center the message in the middle of the list if possible */ - gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(ui_main_data.messages_list), path_row, NULL, TRUE, 0.5, 0.0); + path_row = gtk_tree_path_new_from_indices (row, -1); + + if ((ui_main_data.messages_list != NULL) && (path_row != NULL)) + { + g_debug("Select row %d", row); + + /* Select the message in requested row */ + gtk_tree_view_set_cursor (GTK_TREE_VIEW(ui_main_data.messages_list), path_row, NULL, FALSE); + /* Center the message in the middle of the list if possible */ + gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW(ui_main_data.messages_list), path_row, NULL, TRUE, 0.5, 0.0); + } } } -- GitLab