Applied messages filtering to tree view.
Created a GTK events flush function. git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4327 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
@@ -84,7 +84,7 @@ static int socket_read_itti_message(socket_data_t *socket_data,
|
||||
|
||||
g_assert(message_header != NULL);
|
||||
|
||||
g_debug("Attempting to read signal header from socket");
|
||||
// g_debug("Attempting to read signal header from socket");
|
||||
|
||||
/* Read the sub-header of signal */
|
||||
while (data_read != sizeof(itti_signal_header_t)) {
|
||||
@@ -124,7 +124,7 @@ static int socket_read_itti_message(socket_data_t *socket_data,
|
||||
socket_notify_gui_update(socket_data);
|
||||
}
|
||||
|
||||
g_debug("Successfully read new signal %u from socket", itti_signal_header.message_number);
|
||||
// g_debug("Successfully read new signal %u from socket", itti_signal_header.message_number);
|
||||
|
||||
return total_data_read + sizeof(itti_signal_header);
|
||||
}
|
||||
|
||||
@@ -106,7 +106,7 @@ void ui_signal_add_to_list(gpointer data, gpointer user_data)
|
||||
ui_main_data.nb_message_received++;
|
||||
|
||||
/* Check if no signal was selected in the list or if it was the last signal */
|
||||
if ((ui_main_data.path_last == NULL) || (gtk_tree_path_compare(ui_main_data.path_last, path) == 0))
|
||||
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);
|
||||
@@ -132,6 +132,8 @@ static gboolean ui_handle_update_signal_list(gint fd, void *data, size_t data_le
|
||||
/* Free the message */
|
||||
free (signal_list_message);
|
||||
|
||||
ui_gtk_flush_events();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -313,7 +315,11 @@ gboolean ui_callback_on_menu_item_selected(GtkWidget *widget, gpointer data)
|
||||
gboolean enabled;
|
||||
|
||||
enabled = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM(widget));
|
||||
filter_entry->enabled = enabled;
|
||||
if (filter_entry->enabled != enabled)
|
||||
{
|
||||
filter_entry->enabled = enabled;
|
||||
ui_tree_view_refilter();
|
||||
}
|
||||
// g_debug("ui_callback_on_menu_item_selected occurred %x %x %s %d", (int) widget, (int) data, filter_entry->name, enabled);
|
||||
|
||||
return TRUE;
|
||||
|
||||
@@ -130,19 +130,23 @@ void ui_filters_add(ui_filter_e filter, uint32_t value, char *name)
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean ui_item_enabled(ui_filter_t *filter, uint32_t value)
|
||||
static gboolean ui_item_enabled(ui_filter_t *filter, char *name)
|
||||
{
|
||||
int item = ui_search_id (filter, value);
|
||||
int item;
|
||||
|
||||
if (item < filter->used)
|
||||
if (name != NULL)
|
||||
{
|
||||
return (filter->items[item].enabled ? TRUE : FALSE);
|
||||
}
|
||||
item = ui_search_name (filter, name);
|
||||
|
||||
if (item < filter->used)
|
||||
{
|
||||
return (filter->items[item].enabled ? TRUE : FALSE);
|
||||
}
|
||||
}
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
gboolean ui_filters_message_enabled(uint32_t message, uint32_t origin_task, uint32_t destination_task)
|
||||
gboolean ui_filters_message_enabled(char *message, char *origin_task, char *destination_task)
|
||||
{
|
||||
gboolean result;
|
||||
|
||||
@@ -159,7 +163,7 @@ static void write_filter(FILE *filter_file, ui_filter_t *filter)
|
||||
fprintf (filter_file, " <%s>\n", filter->name);
|
||||
for (item = 0; item < filter->used; item++)
|
||||
{
|
||||
fprintf (filter_file, " %s=\"%d\"\n", filter->items[item].name, filter->items[item].enabled ? 1 : 0);
|
||||
fprintf (filter_file, " <%s enabled=\"%d\"/>\n", filter->items[item].name, filter->items[item].enabled ? 1 : 0);
|
||||
}
|
||||
fprintf (filter_file, " </%s>\n", filter->name);
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ int ui_init_filters(int reset, int clear_ids);
|
||||
|
||||
void ui_filters_add(ui_filter_e filter, uint32_t value, char *name);
|
||||
|
||||
gboolean ui_filters_message_enabled(uint32_t message, uint32_t origin_task, uint32_t destination_task);
|
||||
gboolean ui_filters_message_enabled(char *message, char *origin_task, char *destination_task);
|
||||
|
||||
int ui_write_filters_file(char *file_name);
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ gboolean ui_callback_on_pipe_notification(
|
||||
/* avoid reentrancy problems and stack overflow */
|
||||
g_source_remove(pipe_input->pipe_input_id);
|
||||
|
||||
g_debug("Received new data on pipe %d", pipe_input->pipe_input_id);
|
||||
// g_debug("Received new data on pipe %d", pipe_input->pipe_input_id);
|
||||
|
||||
if (pipe_input->input_cb(pipe_input->source_fd, pipe_input->user_data)) {
|
||||
/* restore pipe handler */
|
||||
|
||||
@@ -134,3 +134,11 @@ int ui_gtk_initialize(int argc, char *argv[])
|
||||
|
||||
return RC_OK;
|
||||
}
|
||||
|
||||
void ui_gtk_flush_events(void)
|
||||
{
|
||||
while (gtk_events_pending ())
|
||||
{
|
||||
gtk_main_iteration();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,4 +49,6 @@ extern ui_main_data_t ui_main_data;
|
||||
|
||||
int ui_gtk_initialize(int argc, char *argv[]);
|
||||
|
||||
void ui_gtk_flush_events(void);
|
||||
|
||||
#endif /* UI_MAIN_SCREEN_H_ */
|
||||
|
||||
@@ -53,12 +53,14 @@ static void ui_change_cursor(gboolean busy)
|
||||
gdk_window_set_cursor (window, cursor);
|
||||
gdk_display_sync(display);
|
||||
gdk_cursor_unref (cursor);
|
||||
gtk_widget_set_sensitive (ui_main_data.window, FALSE);
|
||||
// gtk_widget_set_sensitive (ui_main_data.window, FALSE);
|
||||
ui_gtk_flush_events();
|
||||
}
|
||||
else
|
||||
{
|
||||
gdk_window_set_cursor (window, NULL);
|
||||
gtk_widget_set_sensitive (ui_main_data.window, TRUE);
|
||||
// gtk_widget_set_sensitive (ui_main_data.window, TRUE);
|
||||
ui_gtk_flush_events();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,15 +10,43 @@
|
||||
#include "ui_main_screen.h"
|
||||
#include "ui_tree_view.h"
|
||||
#include "ui_callbacks.h"
|
||||
#include "ui_filters.h"
|
||||
|
||||
#include "ui_signal_dissect_view.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GtkListStore *store;
|
||||
GtkTreeModelFilter *filtered;
|
||||
} ui_store_t;
|
||||
|
||||
static ui_store_t ui_store;
|
||||
|
||||
static gboolean ui_tree_filter_messages(GtkTreeModel *model, GtkTreeIter *iter, ui_store_t *store)
|
||||
{
|
||||
char *message;
|
||||
char *origin_task;
|
||||
char *destination_task;
|
||||
gboolean enabled;
|
||||
|
||||
gtk_tree_model_get (model, iter, COL_SIGNAL, &message, COL_FROM_TASK, &origin_task, COL_TO_TASK, &destination_task,
|
||||
-1);
|
||||
enabled = ui_filters_message_enabled (message, origin_task, destination_task);
|
||||
|
||||
// g_debug("%x %x %s %s %s %d", model, iter, message, origin_task, destination_task, enabled);
|
||||
|
||||
g_free(message);
|
||||
g_free(origin_task);
|
||||
g_free(destination_task);
|
||||
|
||||
return enabled;
|
||||
}
|
||||
|
||||
static void
|
||||
ui_tree_view_init_list(GtkWidget *list)
|
||||
{
|
||||
GtkCellRenderer *renderer;
|
||||
GtkTreeViewColumn *column;
|
||||
GtkListStore *store;
|
||||
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
column = gtk_tree_view_column_new_with_attributes(
|
||||
@@ -43,36 +71,35 @@ ui_tree_view_init_list(GtkWidget *list)
|
||||
g_signal_connect(G_OBJECT(column), "clicked",
|
||||
G_CALLBACK(ui_callback_on_tree_column_header_click), (gpointer) COL_TO_TASK);
|
||||
|
||||
store = gtk_list_store_new(NUM_COLS,
|
||||
G_TYPE_STRING,
|
||||
G_TYPE_STRING,
|
||||
G_TYPE_STRING,
|
||||
G_TYPE_STRING,
|
||||
/* HACK: add a reference to the buffer here
|
||||
* to avoid maintining multiple lists.
|
||||
* The reference is not displayed
|
||||
*/
|
||||
G_TYPE_POINTER);
|
||||
ui_store.store = gtk_list_store_new(NUM_COLS,
|
||||
G_TYPE_STRING,
|
||||
G_TYPE_STRING,
|
||||
G_TYPE_STRING,
|
||||
G_TYPE_STRING,
|
||||
/* HACK: add a reference to the buffer here
|
||||
* to avoid maintining multiple lists.
|
||||
* The reference is not displayed
|
||||
*/
|
||||
G_TYPE_POINTER);
|
||||
|
||||
gtk_tree_view_set_model(GTK_TREE_VIEW(list), GTK_TREE_MODEL(store));
|
||||
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,
|
||||
&ui_store, NULL);
|
||||
|
||||
gtk_tree_view_set_model(GTK_TREE_VIEW(list), GTK_TREE_MODEL(ui_store.filtered));
|
||||
|
||||
gtk_tree_view_columns_autosize(GTK_TREE_VIEW(list));
|
||||
|
||||
g_object_unref(store);
|
||||
}
|
||||
|
||||
static void ui_tree_view_add_to_list(GtkWidget *list, const gchar *message_number,
|
||||
const gchar *signal_name, const char *origin_task,
|
||||
const char *to_task, gpointer buffer)
|
||||
{
|
||||
GtkListStore *store;
|
||||
GtkTreeIter iter;
|
||||
|
||||
store = GTK_LIST_STORE(gtk_tree_view_get_model
|
||||
(GTK_TREE_VIEW(list)));
|
||||
|
||||
gtk_list_store_append(store, &iter);
|
||||
gtk_list_store_set(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_SIGNAL , signal_name,
|
||||
@@ -85,13 +112,9 @@ static void ui_tree_view_add_to_list(GtkWidget *list, const gchar *message_numbe
|
||||
|
||||
void ui_tree_view_destroy_list(GtkWidget *list)
|
||||
{
|
||||
GtkListStore *store;
|
||||
|
||||
g_assert(list != NULL);
|
||||
|
||||
store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(list)));
|
||||
|
||||
gtk_list_store_clear(store);
|
||||
gtk_list_store_clear(ui_store.store);
|
||||
|
||||
/* Reset number of messages */
|
||||
ui_main_data.nb_message_received = 0;
|
||||
@@ -170,3 +193,8 @@ void ui_tree_view_select_row(gint row, GtkTreePath **path)
|
||||
*path = path_row;
|
||||
}
|
||||
}
|
||||
|
||||
void ui_tree_view_refilter(void)
|
||||
{
|
||||
gtk_tree_model_filter_refilter (ui_store.filtered);;
|
||||
}
|
||||
|
||||
@@ -20,4 +20,6 @@ void ui_tree_view_destroy_list(GtkWidget *list);
|
||||
|
||||
void ui_tree_view_select_row(gint row, GtkTreePath **path);
|
||||
|
||||
void ui_tree_view_refilter(void);
|
||||
|
||||
#endif /* UI_TREE_VIEW_H_ */
|
||||
|
||||
Reference in New Issue
Block a user