diff options
author | Michael Tüxen <tuexen@fh-muenster.de> | 2009-09-01 10:12:27 +0000 |
---|---|---|
committer | Michael Tüxen <tuexen@fh-muenster.de> | 2009-09-01 10:12:27 +0000 |
commit | 66e738ede627349451d19f90cb705b2da46b7e22 (patch) | |
tree | cc9509c8c74c90a5b705d31b7a9c706a19d1f23a | |
parent | 2d001ec762c88b5356d6332d37c02f09d109884e (diff) |
From Irene Ruengeler: Get rid of legacy gtk code...
svn path=/trunk/; revision=29649
-rw-r--r-- | gtk/sctp_assoc_analyse.c | 91 | ||||
-rw-r--r-- | gtk/sctp_error_dlg.c | 186 | ||||
-rw-r--r-- | gtk/sctp_stat_dlg.c | 462 |
3 files changed, 436 insertions, 303 deletions
diff --git a/gtk/sctp_assoc_analyse.c b/gtk/sctp_assoc_analyse.c index 4d7fe853d0..e956479283 100644 --- a/gtk/sctp_assoc_analyse.c +++ b/gtk/sctp_assoc_analyse.c @@ -194,17 +194,20 @@ update_analyse_dlg(struct sctp_analyse* u_data) gchar label_txt[50]; gchar *data[1]; gchar field[1][MAX_ADDRESS_LEN]; - gint added_row; GList *list; address *store = NULL; - + GtkListStore *list_store = NULL; + GtkTreeIter iter; + if (u_data->assoc == NULL) return; if (u_data->window != NULL) { - gtk_clist_clear(GTK_CLIST(u_data->analyse_nb->page2->clist)); - gtk_clist_clear(GTK_CLIST(u_data->analyse_nb->page3->clist)); + gtk_list_store_clear(GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW + (u_data->analyse_nb->page2->clist)))); + gtk_list_store_clear(GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW + (u_data->analyse_nb->page3->clist)))); } @@ -253,8 +256,15 @@ update_analyse_dlg(struct sctp_analyse* u_data) { g_snprintf(field[0], 40, "%s", ip6_to_str((const struct e_in6_addr *)(store->data))); } - added_row = gtk_clist_append(GTK_CLIST(u_data->analyse_nb->page2->clist), data); - gtk_clist_set_row_data(GTK_CLIST(u_data->analyse_nb->page2->clist), added_row, u_data->assoc); + list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW (u_data->analyse_nb->page2->clist))); /* Get store */ + +#if GTK_CHECK_VERSION(2,6,0) + gtk_list_store_insert_with_values( list_store , &iter, G_MAXINT, +#else + gtk_list_store_append (list_store, &iter); + gtk_list_store_set (list_store, &iter, +#endif + 0, field[0], -1); list = g_list_next(list); } } @@ -310,8 +320,15 @@ update_analyse_dlg(struct sctp_analyse* u_data) { g_snprintf(field[0], 40, "%s", ip6_to_str((const struct e_in6_addr *)(store->data))); } - added_row = gtk_clist_append(GTK_CLIST(u_data->analyse_nb->page3->clist), data); - gtk_clist_set_row_data(GTK_CLIST(u_data->analyse_nb->page3->clist), added_row, u_data->assoc); + list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW (u_data->analyse_nb->page3->clist))); /* Get store */ + +#if GTK_CHECK_VERSION(2,6,0) + gtk_list_store_insert_with_values( list_store , &iter, G_MAXINT, +#else + gtk_list_store_append (list_store, &iter); + gtk_list_store_set (list_store, &iter, +#endif + 0, field[0], -1); list = g_list_next(list); } } @@ -371,13 +388,11 @@ sctp_set_filter (GtkButton *button _U_, struct sctp_analyse* u_data) selected_stream->port1, selected_stream->port2, selected_stream->verification_tag1, - /*selected_stream->verification_tag2,*/ selected_stream->initiate_tag, selected_stream->verification_tag2, selected_stream->port2, selected_stream->port1, selected_stream->verification_tag2, - /*selected_stream->verification_tag1,*/ selected_stream->initiate_tag, selected_stream->verification_tag1); filter_string = f_string; @@ -463,6 +478,51 @@ static void analyse_window_set_title(struct sctp_analyse *u_data) g_free(title); } +static +GtkWidget *create_list() +{ + GtkListStore *list_store; + GtkWidget * list; + GtkTreeViewColumn *column; + GtkCellRenderer *renderer; + GtkTreeView *list_view; + list_store = gtk_list_store_new(1, + G_TYPE_STRING /* IP address */ + ); + + /* Create a view */ + list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store)); + + list_view = GTK_TREE_VIEW(list); + +#if GTK_CHECK_VERSION(2,6,0) + /* Speed up the list display */ + gtk_tree_view_set_fixed_height_mode(list_view, TRUE); +#endif + + /* The view now holds a reference. We can get rid of our own reference */ + g_object_unref (G_OBJECT (list_store)); + + /* + * Create the first column packet, associating the "text" attribute of the + * cell_renderer to the first column of the model + */ + renderer = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes ("Address", renderer, + "text", 0, + NULL); + + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 300); + + /* Add the column to the view. */ + gtk_tree_view_append_column (list_view, column); + + gtk_tree_view_set_headers_visible(list_view, FALSE); + return list; +} + static void create_analyse_window(struct sctp_analyse* u_data) { GtkWidget *window = NULL; @@ -573,12 +633,10 @@ static void create_analyse_window(struct sctp_analyse* u_data) u_data->analyse_nb->page2->scrolled_window = scrolled_window_new(NULL, NULL); gtk_widget_set_size_request(u_data->analyse_nb->page2->scrolled_window, 560, 100); - u_data->analyse_nb->page2->clist = gtk_clist_new(1); + u_data->analyse_nb->page2->clist = create_list(); + printf("u_data->analyse_nb->page2->clist returned\n"); gtk_widget_show(u_data->analyse_nb->page2->clist); - gtk_clist_set_column_width(GTK_CLIST(u_data->analyse_nb->page2->clist), 0, 200); - gtk_clist_set_column_justification(GTK_CLIST(u_data->analyse_nb->page2->clist), 0, GTK_JUSTIFY_LEFT); - gtk_container_add(GTK_CONTAINER(u_data->analyse_nb->page2->scrolled_window), u_data->analyse_nb->page2->clist); gtk_box_pack_start(GTK_BOX(addr_hb), u_data->analyse_nb->page2->scrolled_window, TRUE, TRUE, 0); @@ -683,12 +741,9 @@ static void create_analyse_window(struct sctp_analyse* u_data) u_data->analyse_nb->page3->scrolled_window = scrolled_window_new(NULL, NULL); gtk_widget_set_size_request(u_data->analyse_nb->page3->scrolled_window, 560, 100); - u_data->analyse_nb->page3->clist = gtk_clist_new(1); + u_data->analyse_nb->page3->clist = create_list(); gtk_widget_show(u_data->analyse_nb->page3->clist); - gtk_clist_set_column_width(GTK_CLIST(u_data->analyse_nb->page3->clist), 0, 200); - gtk_clist_set_column_justification(GTK_CLIST(u_data->analyse_nb->page3->clist), 0, GTK_JUSTIFY_LEFT); - gtk_container_add(GTK_CONTAINER(u_data->analyse_nb->page3->scrolled_window), u_data->analyse_nb->page3->clist); diff --git a/gtk/sctp_error_dlg.c b/gtk/sctp_error_dlg.c index 9e63b9fd51..479fe46d05 100644 --- a/gtk/sctp_error_dlg.c +++ b/gtk/sctp_error_dlg.c @@ -37,22 +37,20 @@ #include "gtk/gui_utils.h" #include "gtk/main.h" #include "gtk/sctp_stat.h" -/*#include "gtk/sctp_assoc_analyse.h"*/ static GtkWidget *sctp_error_dlg=NULL; static GtkWidget *clist = NULL; static GList *last_list = NULL; static sctp_error_info_t* selected_packet = NULL;/* current selection */ -/*static sctp_assoc_info_t* selected_assoc = NULL; */ -#define NUM_COLS 3 - -typedef struct column_arrows { - GtkWidget *table; - GtkWidget *ascend_pm; - GtkWidget *descend_pm; -} column_arrows; +enum +{ + FRAME_COLUMN, + INFO_COLUMN, + TEXT_COLUMN, + N_COLUMN +}; static void @@ -61,31 +59,128 @@ dlg_destroy(void) sctp_error_dlg=NULL; } -static void add_to_clist(sctp_error_info_t* errinfo) +static void +sctp_error_on_select_row(GtkTreeSelection *sel, gpointer user_data _U_) { - gint added_row, i; - gchar *data[NUM_COLS]; - gchar field[NUM_COLS][30]; + GtkTreeModel *model; + GtkTreeIter iter; + if (gtk_tree_selection_get_selected (sel, &model, &iter)) { + gtk_tree_model_get(model, &iter, + FRAME_COLUMN, &(selected_packet->frame_number), + TEXT_COLUMN, &(selected_packet->chunk_info), + INFO_COLUMN, &(selected_packet->info_text), + -1); + } +} - for (i=0; i<NUM_COLS; i++) - data[i]=&field[i][0]; +static +GtkWidget *create_list() +{ + GtkListStore *list_store; + GtkWidget * list; + GtkTreeViewColumn *column; + GtkCellRenderer *renderer; + GtkTreeSortable *sortable; + GtkTreeView *list_view; + GtkTreeSelection *selection; + + list_store = gtk_list_store_new(N_COLUMN, + G_TYPE_UINT, /* Frame number*/ + G_TYPE_STRING, /* Chunk type*/ + G_TYPE_STRING );/* Info */ + + /* Create a view */ + list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store)); + + list_view = GTK_TREE_VIEW(list); + sortable = GTK_TREE_SORTABLE(list_store); + +#if GTK_CHECK_VERSION(2,6,0) + /* Speed up the list display */ + gtk_tree_view_set_fixed_height_mode(list_view, TRUE); +#endif + + gtk_tree_view_set_headers_clickable(list_view, TRUE); + + /* The view now holds a reference. We can get rid of our own reference */ + g_object_unref (G_OBJECT (list_store)); + + /* + * Create the first column packet, associating the "text" attribute of the + * cell_renderer to the first column of the model + */ + /* 1:st column */ + renderer = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes ("Framenumber", renderer, + "text", FRAME_COLUMN, + NULL); + + gtk_tree_view_column_set_sort_column_id(column, FRAME_COLUMN); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 80); + + /* Add the column to the view. */ + gtk_tree_view_append_column (list_view, column); + + /* 2:nd column... */ + renderer = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes ("Chunk Types", renderer, + "text", TEXT_COLUMN, + NULL); + gtk_tree_view_column_set_sort_column_id(column, INFO_COLUMN); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 200); + gtk_tree_view_append_column (list_view, column); + + /* 3:d column... */ + renderer = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes ("Info", renderer, + "text", INFO_COLUMN, + NULL); + gtk_tree_view_column_set_sort_column_id(column, TEXT_COLUMN); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 200); + gtk_tree_view_append_column (list_view, column); + + + /* Now enable the sorting of each column */ + gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(list_view), TRUE); + gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(list_view), TRUE); + + /* Setup the selection handler */ + selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list)); + gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE); + g_signal_connect(selection, "changed", G_CALLBACK(sctp_error_on_select_row), NULL); + return list; +} - /*printf("errinfo=%s\n",errinfo->chunk_info);*/ - g_snprintf(field[0], 20, "%u", errinfo->frame_number); - g_snprintf(field[1], 20, "%s", errinfo->chunk_info); - g_snprintf(field[2], 20, "%s", errinfo->info_text); +static void add_to_clist(sctp_error_info_t* errinfo) +{ + GtkListStore *list_store = NULL; + GtkTreeIter iter; - added_row = gtk_clist_append(GTK_CLIST(clist), data); + list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW (clist))); /* Get store */ - /* set data pointer of last row to point to user data for that row */ - gtk_clist_set_row_data(GTK_CLIST(clist), added_row, errinfo); +#if GTK_CHECK_VERSION(2,6,0) + gtk_list_store_insert_with_values( list_store , &iter, G_MAXINT, +#else + gtk_list_store_append (list_store, &iter); + gtk_list_store_set (list_store, &iter, +#endif + FRAME_COLUMN, errinfo->frame_number, + TEXT_COLUMN, errinfo->chunk_info, + INFO_COLUMN, errinfo->info_text, + -1); } static void sctp_error_on_unselect(GtkButton *button _U_, gpointer user_data _U_) { - gtk_clist_unselect_all(GTK_CLIST(clist)); + gtk_tree_selection_unselect_all(gtk_tree_view_get_selection(GTK_TREE_VIEW(clist))); } static void sctp_error_dlg_update(GList *list) @@ -94,7 +189,7 @@ static void sctp_error_dlg_update(GList *list) if (sctp_error_dlg != NULL) { - gtk_clist_clear(GTK_CLIST(clist)); + gtk_list_store_clear(GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(clist)))); ilist=list; while (ilist) @@ -108,12 +203,6 @@ static void sctp_error_dlg_update(GList *list) last_list = ilist; } -static void -sctp_error_on_select_row(GtkCList *clist, gint row,gint column _U_, GdkEventButton *event _U_, gpointer user_data _U_) -{ - selected_packet = gtk_clist_get_row_data(GTK_CLIST(clist), row); -} - static void @@ -146,12 +235,6 @@ gtk_sctperror_dlg(void) GtkWidget *bt_frame; GtkWidget *bt_close; - const gchar *titles[NUM_COLS] = {"Framenumber","Chunk Types", "Info"}; - column_arrows *col_arrows; - GtkStyle *win_style; - GtkWidget *column_lb; - int i; - sctp_error_dlg_w = window_new (GTK_WINDOW_TOPLEVEL, "Wireshark: SCTP Associations"); gtk_window_set_position (GTK_WINDOW (sctp_error_dlg_w), GTK_WIN_POS_CENTER); g_signal_connect(sctp_error_dlg_w, "destroy", G_CALLBACK(dlg_destroy), NULL); @@ -166,40 +249,13 @@ gtk_sctperror_dlg(void) gtk_widget_show (scrolledwindow1); gtk_box_pack_start (GTK_BOX (vbox1), scrolledwindow1, TRUE, TRUE, 0); - clist = gtk_clist_new (NUM_COLS); + clist = create_list(); gtk_widget_show (clist); gtk_container_add (GTK_CONTAINER (scrolledwindow1), clist); gtk_widget_set_size_request(clist, 500, 200); - gtk_clist_set_column_width (GTK_CLIST (clist), 0, 100); - gtk_clist_set_column_width (GTK_CLIST (clist), 1, 200); - gtk_clist_set_column_width (GTK_CLIST (clist), 2, 200); - - gtk_clist_set_column_justification(GTK_CLIST(clist), 0, GTK_JUSTIFY_CENTER); - gtk_clist_set_column_justification(GTK_CLIST(clist), 1, GTK_JUSTIFY_LEFT); - gtk_clist_set_column_justification(GTK_CLIST(clist), 2, GTK_JUSTIFY_LEFT); - - gtk_clist_column_titles_show (GTK_CLIST (clist)); - - gtk_clist_set_sort_column(GTK_CLIST(clist), 0); - gtk_clist_set_sort_type(GTK_CLIST(clist), GTK_SORT_ASCENDING); - gtk_widget_show(sctp_error_dlg_w); - col_arrows = (column_arrows *) g_malloc(sizeof(column_arrows) * NUM_COLS); - win_style = gtk_widget_get_style(scrolledwindow1); - - for (i=0; i<NUM_COLS; i++) { - col_arrows[i].table = gtk_table_new(2, 2, FALSE); - gtk_table_set_col_spacings(GTK_TABLE(col_arrows[i].table), 5); - column_lb = gtk_label_new(titles[i]); - gtk_table_attach(GTK_TABLE(col_arrows[i].table), column_lb, 0, 1, 0, 2, GTK_SHRINK, GTK_SHRINK, 0, 0); - gtk_widget_show(column_lb); - - gtk_clist_set_column_widget(GTK_CLIST(clist), i, col_arrows[i].table); - gtk_widget_show(col_arrows[i].table); - } - hbuttonbox2 = gtk_hbutton_box_new (); gtk_widget_show (hbuttonbox2); @@ -221,14 +277,12 @@ gtk_sctperror_dlg(void) gtk_container_add (GTK_CONTAINER (hbuttonbox2), bt_close); g_signal_connect(sctp_error_dlg_w, "destroy", G_CALLBACK(dlg_destroy), NULL); - g_signal_connect(clist, "select_row", G_CALLBACK(sctp_error_on_select_row), NULL); g_signal_connect(bt_unselect, "clicked", G_CALLBACK(sctp_error_on_unselect), NULL); g_signal_connect(bt_frame, "clicked", G_CALLBACK(sctp_error_on_frame), NULL); g_signal_connect(bt_close, "clicked", G_CALLBACK(sctp_error_on_close), NULL); sctp_error_dlg = sctp_error_dlg_w; - g_free(col_arrows); } diff --git a/gtk/sctp_stat_dlg.c b/gtk/sctp_stat_dlg.c index 586d73ccfe..e712f6f429 100644 --- a/gtk/sctp_stat_dlg.c +++ b/gtk/sctp_stat_dlg.c @@ -25,8 +25,6 @@ #ifdef HAVE_CONFIG_H # include <config.h> #endif - -#include <stdio.h> #include <string.h> #include <gtk/gtk.h> @@ -43,10 +41,6 @@ #include "gtk/sctp_stat.h" #include "gtk/gtkglobals.h" -#include "image/clist_ascend.xpm" -#include "image/clist_descend.xpm" - - static GtkWidget *sctp_stat_dlg=NULL; static GtkWidget *clist = NULL; static GList *last_list = NULL; @@ -57,14 +51,224 @@ static guint16 n_children=0; static GtkWidget *bt_afilter = NULL, *bt_unselect=NULL, *bt_analyse=NULL, *bt_filter=NULL; static gboolean prevent_update = FALSE, filter_applied = FALSE; -#define NUM_COLS 9 +enum +{ + PORT1_COLUMN, + PORT2_COLUMN, + PACKETS_COLUMN, + CHECKSUM_TYPE_COLUMN, + CHECKSUM_ERRORS_COLUMN, + DATA_CHUNKS_COLUMN, + DATA_BYTES_COLUMN, + VTAG1_COLUMN, + VTAG2_COLUMN, + N_COLUMN +}; -typedef struct column_arrows { - GtkWidget *table; - GtkWidget *ascend_pm; - GtkWidget *descend_pm; -} column_arrows; +static void +sctp_stat_on_select_row(GtkTreeSelection *sel, gpointer user_data _U_) +{ + GtkTreeModel *model; + GtkTreeIter iter; + GList *list; + sctp_assoc_info_t* assoc; + gboolean stream_found=FALSE; + guint32 port2, port1; + guint32 checksum, data_chunks, data_bytes, packets, vtag1, vtag2; + + if (gtk_tree_selection_get_selected (sel, &model, &iter)) { + gtk_tree_model_get(model, &iter, + PORT1_COLUMN, &port1, + PORT2_COLUMN, &port2, + PACKETS_COLUMN, &packets, + CHECKSUM_ERRORS_COLUMN, &checksum, + DATA_CHUNKS_COLUMN, &data_chunks, + DATA_BYTES_COLUMN, &data_bytes, + VTAG1_COLUMN, &vtag1, + VTAG2_COLUMN, &vtag2, + -1); + } + + list = g_list_first(sctp_assocs->assoc_info_list); + + while (list) + { + assoc = (sctp_assoc_info_t*)(list->data); + if (assoc->port1==port1 && assoc->port2==port2 + && assoc->n_packets==packets && assoc->n_data_chunks==data_chunks && assoc->n_data_bytes==data_bytes + && assoc->verification_tag1==vtag1 && assoc->verification_tag2==vtag2) + { + selected_stream=assoc; + stream_found=TRUE; + break; + } + list=g_list_next(list); + } + + if (!stream_found) + selected_stream = NULL; + + gtk_widget_set_sensitive(bt_unselect,TRUE); + gtk_widget_set_sensitive(bt_analyse,TRUE); + gtk_widget_set_sensitive(bt_filter,TRUE); +} + +static +GtkWidget *create_list() +{ + GtkListStore *list_store; + GtkWidget * list; + GtkTreeViewColumn *column; + GtkCellRenderer *renderer; + GtkTreeSortable *sortable; + GtkTreeView *list_view; + GtkTreeSelection *selection; + + list_store = gtk_list_store_new(N_COLUMN, + G_TYPE_UINT, /* Port1*/ + G_TYPE_UINT, /* Port2*/ + G_TYPE_UINT, /* number of packets */ + G_TYPE_STRING, /* checksum type */ + G_TYPE_UINT, /* number of checksum errors */ + G_TYPE_UINT, /* number of data chunks */ + G_TYPE_UINT, /* number of data bytes */ + G_TYPE_UINT, /* vtag1 */ + G_TYPE_UINT); /* vtag2 */ + + /* Create a view */ + list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store)); + + list_view = GTK_TREE_VIEW(list); + sortable = GTK_TREE_SORTABLE(list_store); + +#if GTK_CHECK_VERSION(2,6,0) + /* Speed up the list display */ + gtk_tree_view_set_fixed_height_mode(list_view, TRUE); +#endif + + gtk_tree_view_set_headers_clickable(list_view, TRUE); + + /* The view now holds a reference. We can get rid of our own reference */ + g_object_unref (G_OBJECT (list_store)); + + /* + * Create the first column packet, associating the "text" attribute of the + * cell_renderer to the first column of the model + */ + /* 1:st column */ + renderer = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes ("Port 1", renderer, + "text", PORT1_COLUMN, + NULL); + + gtk_tree_view_column_set_sort_column_id(column, PORT1_COLUMN); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 80); + + /* Add the column to the view. */ + gtk_tree_view_append_column (list_view, column); + + /* 2:nd column... */ + renderer = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes ("Port 2", renderer, + "text", PORT2_COLUMN, + NULL); + gtk_tree_view_column_set_sort_column_id(column, PORT2_COLUMN); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 80); + gtk_tree_view_append_column (list_view, column); + + /* 3:d column... */ + renderer = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes ("No of Packets", renderer, + "text", PACKETS_COLUMN, + NULL); + gtk_tree_view_column_set_sort_column_id(column, PACKETS_COLUMN); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 120); + gtk_tree_view_append_column (list_view, column); + + /* 4:th column... */ + renderer = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes ("Checksum", renderer, + "text", CHECKSUM_TYPE_COLUMN, + NULL); + gtk_tree_view_column_set_sort_column_id(column, CHECKSUM_TYPE_COLUMN); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 120); + gtk_tree_view_append_column (list_view, column); + + /* 5:th column... */ + renderer = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes ("No of Errors", renderer, + "text", CHECKSUM_ERRORS_COLUMN, + NULL); + gtk_tree_view_column_set_sort_column_id(column, CHECKSUM_ERRORS_COLUMN); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 120); + gtk_tree_view_append_column (list_view, column); + + /* 6:th column... */ + renderer = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes ("Data Chunks", renderer, + "text", DATA_CHUNKS_COLUMN, + NULL); + gtk_tree_view_column_set_sort_column_id(column, DATA_CHUNKS_COLUMN); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 120); + gtk_tree_view_append_column (list_view, column); + + /* 7:th column... */ + renderer = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes ("Data Bytes", renderer, + "text", DATA_BYTES_COLUMN, + NULL); + gtk_tree_view_column_set_sort_column_id(column, DATA_BYTES_COLUMN); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 120); + gtk_tree_view_append_column (list_view, column); + + /* 8:th column... */ + renderer = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes ("VTag 1", renderer, + "text", VTAG1_COLUMN, + NULL); + gtk_tree_view_column_set_sort_column_id(column, VTAG1_COLUMN); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 120); + gtk_tree_view_append_column (list_view, column); + + + /* 9:th column... */ + renderer = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes ("VTag 2", renderer, + "text", VTAG2_COLUMN, + NULL); + gtk_tree_view_column_set_sort_column_id(column, VTAG2_COLUMN); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 120); + gtk_tree_view_append_column (list_view, column); + + /* Now enable the sorting of each column */ + gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(list_view), TRUE); + gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(list_view), TRUE); + + /* Setup the selection handler */ + selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list)); + gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE); + g_signal_connect(selection, "changed", G_CALLBACK(sctp_stat_on_select_row), NULL); + return list; +} static void dlg_destroy(void) @@ -114,27 +318,30 @@ remove_analyse_child(struct sctp_analyse *child) } + static void add_to_clist(sctp_assoc_info_t* assinfo) -{ - gint added_row, i; - gchar *data[NUM_COLS]; - gchar field[NUM_COLS][30]; - - for (i=0; i<NUM_COLS; i++) - data[i]=&field[i][0]; - - g_snprintf(field[0], 20, "%u", assinfo->port1); - g_snprintf(field[1], 20, "%u", assinfo->port2); - g_snprintf(field[2], 20, "%u", assinfo->n_packets); - g_snprintf(field[3], 20, "%s", assinfo->checksum_type); - g_snprintf(field[4], 20, "%u", assinfo->n_checksum_errors); - g_snprintf(field[5], 20, "%u", assinfo->n_data_chunks); - g_snprintf(field[6], 20, "%u", assinfo->n_data_bytes); - g_snprintf(field[7], 20, "0x%x", assinfo->verification_tag1); - g_snprintf(field[8], 20, "0x%x", assinfo->verification_tag2); - - added_row = gtk_clist_append(GTK_CLIST(clist), data); - gtk_clist_set_row_data(GTK_CLIST(clist), added_row, assinfo); +{ + GtkListStore *list_store = NULL; + GtkTreeIter iter; + + list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW (clist))); /* Get store */ + +#if GTK_CHECK_VERSION(2,6,0) + gtk_list_store_insert_with_values( list_store , &iter, G_MAXINT, +#else + gtk_list_store_append (list_store, &iter); + gtk_list_store_set (list_store, &iter, +#endif + PORT1_COLUMN, (guint32)assinfo->port1, + PORT2_COLUMN, (guint32)assinfo->port2, + PACKETS_COLUMN, assinfo->n_packets, + CHECKSUM_TYPE_COLUMN, assinfo->checksum_type, + CHECKSUM_ERRORS_COLUMN, assinfo->n_checksum_errors, + DATA_CHUNKS_COLUMN, assinfo->n_data_chunks, + DATA_BYTES_COLUMN, assinfo->n_data_bytes, + VTAG1_COLUMN, assinfo->verification_tag1, + VTAG2_COLUMN, assinfo->verification_tag2, + -1); } static void @@ -148,7 +355,7 @@ sctp_stat_on_unselect(GtkButton *button _U_, gpointer user_data _U_) selected_stream = NULL; gtk_entry_set_text(GTK_ENTRY(main_display_filter_widget), ""); main_filter_packets(&cfile, "", FALSE); - gtk_clist_unselect_all(GTK_CLIST(clist)); + gtk_tree_selection_unselect_all(gtk_tree_view_get_selection(GTK_TREE_VIEW(clist))); gtk_widget_set_sensitive(bt_unselect,FALSE); gtk_widget_set_sensitive(bt_filter,FALSE); gtk_widget_set_sensitive(bt_analyse,FALSE); @@ -164,7 +371,7 @@ void sctp_stat_dlg_update(void) list=(sctp_stat_get_info()->assoc_info_list); if (sctp_stat_dlg != NULL && !prevent_update) { - gtk_clist_clear(GTK_CLIST(clist)); + gtk_list_store_clear(GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(clist)))); list = g_list_first(sctp_stat_get_info()->assoc_info_list); while (list) @@ -177,58 +384,6 @@ void sctp_stat_dlg_update(void) } -static void -sctp_stat_on_select_row(GtkCList *clist, gint row, gint column _U_, - GdkEventButton *event _U_, gpointer user_data _U_) -{ - gchar *text[1]; - guint16 port1, port2; - guint32 checksum, data_chunks, data_bytes, packets, vtag1, vtag2; - GList *list; - sctp_assoc_info_t* assoc; - gboolean stream_found=FALSE; - - gtk_clist_get_row_data(GTK_CLIST(clist), row); - gtk_clist_get_text(GTK_CLIST(clist), row, 0, text); - port1=atoi(text[0]); - gtk_clist_get_text(GTK_CLIST(clist), row, 1, text); - port2=atoi(text[0]); - gtk_clist_get_text(GTK_CLIST(clist), row, 7, text); - sscanf(text[0],"0x%x",&vtag1); - gtk_clist_get_text(GTK_CLIST(clist), row, 8, text); - sscanf(text[0],"0x%x",&vtag2); - gtk_clist_get_text(GTK_CLIST(clist), row, 2, text); - packets=atoi(text[0]); - gtk_clist_get_text(GTK_CLIST(clist), row, 4, text); - checksum=atoi(text[0]); - gtk_clist_get_text(GTK_CLIST(clist), row, 5, text); - data_chunks=atoi(text[0]); - gtk_clist_get_text(GTK_CLIST(clist), row, 6, text); - data_bytes=atoi(text[0]); - - list = g_list_first(sctp_assocs->assoc_info_list); - - while (list) - { - assoc = (sctp_assoc_info_t*)(list->data); - if (assoc->port1==port1 && assoc->port2==port2 - && assoc->n_packets==packets && assoc->n_data_chunks==data_chunks && assoc->n_data_bytes==data_bytes - && assoc->verification_tag1==vtag1 && assoc->verification_tag2==vtag2) - { - selected_stream=assoc; - stream_found=TRUE; - break; - } - list=g_list_next(list); - } - - if (!stream_found) - selected_stream = NULL; - - gtk_widget_set_sensitive(bt_unselect,TRUE); - gtk_widget_set_sensitive(bt_analyse,TRUE); - gtk_widget_set_sensitive(bt_filter,TRUE); -} static void sctp_stat_on_apply_filter (GtkButton *button _U_, gpointer user_data _U_) @@ -403,68 +558,6 @@ sctp_stat_on_analyse (GtkButton *button _U_, gpointer user_data _U_) prevent_update = TRUE; } -static gint -clist_sort_column(GtkCList *clist, gconstpointer ptr1, gconstpointer ptr2) -{ - char *text1 = NULL; - char *text2 = NULL; - int i1, i2; - - GtkCListRow *row1 = (GtkCListRow *) ptr1; - GtkCListRow *row2 = (GtkCListRow *) ptr2; - prevent_update = FALSE; - text1 = GTK_CELL_TEXT (row1->cell[clist->sort_column])->text; - text2 = GTK_CELL_TEXT (row2->cell[clist->sort_column])->text; - - switch(clist->sort_column){ - case 0: - case 2: - return strcmp (text1, text2); - case 1: - case 3: - case 4: - case 5: - case 6: - case 7: - i1=atoi(text1); - i2=atoi(text2); - return i1-i2; - } - g_assert_not_reached(); - return 0; -} - -static void -clist_click_column_cb(GtkCList *list, gint column, gpointer data) -{ - column_arrows *col_arrows = (column_arrows *) data; - int i; - - prevent_update = FALSE; - gtk_clist_freeze(list); - - for (i = 0; i < NUM_COLS; i++) { - gtk_widget_hide(col_arrows[i].ascend_pm); - gtk_widget_hide(col_arrows[i].descend_pm); - } - - if (column == list->sort_column) { - if (list->sort_type == GTK_SORT_ASCENDING) { - list->sort_type = GTK_SORT_DESCENDING; - gtk_widget_show(col_arrows[column].descend_pm); - } else { - list->sort_type = GTK_SORT_ASCENDING; - gtk_widget_show(col_arrows[column].ascend_pm); - } - } else { - list->sort_type = GTK_SORT_DESCENDING; - gtk_widget_show(col_arrows[column].descend_pm); - gtk_clist_set_sort_column(list, column); - } - gtk_clist_thaw(list); - - gtk_clist_sort(list); -} static void gtk_sctpstat_dlg(void) @@ -475,14 +568,6 @@ gtk_sctpstat_dlg(void) GtkWidget *hbuttonbox2; GtkWidget *bt_close; - const gchar *titles[NUM_COLS] = {"Port 1","Port 2","No of Packets", "Checksum", "No of Errors", "Data Chunks", "Data Bytes", "VTag 1","VTag 2"}; - column_arrows *col_arrows; - GdkBitmap *ascend_bm, *descend_bm; - GdkPixmap *ascend_pm, *descend_pm; - GtkStyle *win_style; - GtkWidget *column_lb; - gint i; - sctp_stat_dlg_w = window_new (GTK_WINDOW_TOPLEVEL, "Wireshark: SCTP Associations"); gtk_window_set_position (GTK_WINDOW (sctp_stat_dlg_w), GTK_WIN_POS_CENTER); g_signal_connect(sctp_stat_dlg_w, "destroy", G_CALLBACK(dlg_destroy), NULL); @@ -497,72 +582,13 @@ gtk_sctpstat_dlg(void) gtk_widget_show (scrolledwindow1); gtk_box_pack_start (GTK_BOX (vbox1), scrolledwindow1, TRUE, TRUE, 0); - clist = gtk_clist_new (NUM_COLS); + clist = create_list(); gtk_widget_show (clist); gtk_container_add (GTK_CONTAINER (scrolledwindow1), clist); - gtk_widget_set_size_request(clist, 650, 200); - - gtk_clist_set_column_width (GTK_CLIST (clist), 0, 50); - gtk_clist_set_column_width (GTK_CLIST (clist), 1, 50); - gtk_clist_set_column_width (GTK_CLIST (clist), 2, 100); - gtk_clist_set_column_width (GTK_CLIST (clist), 3, 100); - gtk_clist_set_column_width (GTK_CLIST (clist), 4, 100); - gtk_clist_set_column_width (GTK_CLIST (clist), 5, 100); - gtk_clist_set_column_width (GTK_CLIST (clist), 6, 100); - gtk_clist_set_column_width (GTK_CLIST (clist), 7, 100); - gtk_clist_set_column_width (GTK_CLIST (clist), 8, 100); - - gtk_clist_set_column_justification(GTK_CLIST(clist), 0, GTK_JUSTIFY_CENTER); - gtk_clist_set_column_justification(GTK_CLIST(clist), 1, GTK_JUSTIFY_CENTER); - gtk_clist_set_column_justification(GTK_CLIST(clist), 2, GTK_JUSTIFY_CENTER); - gtk_clist_set_column_justification(GTK_CLIST(clist), 3, GTK_JUSTIFY_CENTER); - gtk_clist_set_column_justification(GTK_CLIST(clist), 4, GTK_JUSTIFY_CENTER); - gtk_clist_set_column_justification(GTK_CLIST(clist), 5, GTK_JUSTIFY_CENTER); - gtk_clist_set_column_justification(GTK_CLIST(clist), 6, GTK_JUSTIFY_CENTER); - gtk_clist_set_column_justification(GTK_CLIST(clist), 7, GTK_JUSTIFY_CENTER); - gtk_clist_set_column_justification(GTK_CLIST(clist), 8, GTK_JUSTIFY_CENTER); - gtk_clist_column_titles_show (GTK_CLIST (clist)); - - gtk_clist_set_compare_func(GTK_CLIST(clist), clist_sort_column); - gtk_clist_set_sort_column(GTK_CLIST(clist), 0); - gtk_clist_set_sort_type(GTK_CLIST(clist), GTK_SORT_ASCENDING); + gtk_widget_set_size_request(clist, 1050, 200); gtk_widget_show(sctp_stat_dlg_w); - col_arrows = (column_arrows *) g_malloc(sizeof(column_arrows) * NUM_COLS); - win_style = gtk_widget_get_style(scrolledwindow1); - - ascend_pm = gdk_pixmap_create_from_xpm_d(scrolledwindow1->window, - &ascend_bm, - &win_style->bg[GTK_STATE_NORMAL], - (gchar **)clist_ascend_xpm); - descend_pm = gdk_pixmap_create_from_xpm_d(scrolledwindow1->window, - &descend_bm, - &win_style->bg[GTK_STATE_NORMAL], - (gchar **)clist_descend_xpm); - for (i=0; i<NUM_COLS; i++) - { - col_arrows[i].table = gtk_table_new(2, 2, FALSE); - gtk_table_set_col_spacings(GTK_TABLE(col_arrows[i].table), 5); - column_lb = gtk_label_new(titles[i]); - gtk_table_attach(GTK_TABLE(col_arrows[i].table), column_lb, 0, 1, 0, 2, GTK_SHRINK, GTK_SHRINK, 0, 0); - gtk_widget_show(column_lb); - col_arrows[i].ascend_pm = gtk_pixmap_new(ascend_pm, ascend_bm); - gtk_table_attach(GTK_TABLE(col_arrows[i].table), col_arrows[i].ascend_pm, 1, 2, 1, 2, GTK_SHRINK, GTK_SHRINK, 0, 0); - col_arrows[i].descend_pm = gtk_pixmap_new(descend_pm, descend_bm); - gtk_table_attach(GTK_TABLE(col_arrows[i].table), col_arrows[i].descend_pm, 1, 2, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0); - /* make src-ip be the default sort order */ - if (i == 0) - { - gtk_widget_show(col_arrows[i].ascend_pm); - } - - gtk_clist_set_column_widget(GTK_CLIST(clist), i, col_arrows[i].table); - gtk_widget_show(col_arrows[i].table); - } - - g_signal_connect(clist, "click-column", G_CALLBACK(clist_click_column_cb), col_arrows); - hbuttonbox2 = gtk_hbutton_box_new(); gtk_box_pack_start(GTK_BOX(vbox1), hbuttonbox2, FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(hbuttonbox2), 10); @@ -598,7 +624,6 @@ gtk_sctpstat_dlg(void) gtk_widget_show (bt_close); g_signal_connect(sctp_stat_dlg_w, "destroy", G_CALLBACK(dlg_destroy), NULL); - g_signal_connect(clist, "select_row", G_CALLBACK(sctp_stat_on_select_row), NULL); g_signal_connect(bt_unselect, "clicked", G_CALLBACK(sctp_stat_on_unselect), NULL); g_signal_connect(bt_filter, "clicked", G_CALLBACK(sctp_stat_on_filter), NULL); g_signal_connect(bt_afilter, "clicked", G_CALLBACK(sctp_stat_on_apply_filter), NULL); @@ -642,7 +667,6 @@ static void sctp_stat_start(GtkWidget *w _U_, gpointer data _U_) sctp_stat_scan(); /* Show the dialog box with the list of streams */ - /* sctp_stat_dlg_show(sctp_stat_get_info()->assoc_info_list); */ sctp_stat_dlg_show(); } |