diff options
-rw-r--r-- | file.c | 25 | ||||
-rw-r--r-- | gtk/main.c | 18 | ||||
-rw-r--r-- | gtk/proto_draw.c | 79 |
3 files changed, 56 insertions, 66 deletions
@@ -1,7 +1,7 @@ /* file.c * File I/O routines * - * $Id: file.c,v 1.138 1999/12/15 06:51:47 gram Exp $ + * $Id: file.c,v 1.139 1999/12/15 07:01:33 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -1326,6 +1326,9 @@ change_time_formats(capture_file *cf) static void clear_tree_and_hex_views(void) { + GList *selection; + GtkWidget *tmp_item; + /* Clear the hex dump. */ gtk_text_freeze(GTK_TEXT(byte_view)); gtk_text_set_point(GTK_TEXT(byte_view), 0); @@ -1333,7 +1336,25 @@ clear_tree_and_hex_views(void) gtk_text_get_length(GTK_TEXT(byte_view))); gtk_text_thaw(GTK_TEXT(byte_view)); - gtk_clist_clear ( GTK_CLIST(tree_view) ); + /* Deselect any selected tree item. gtktree.c should + * do this when we clear_items, but it doesn't. I copied + * this while() loop from gtktree.c, gtk_real_tree_select_child() + */ + if (GTK_TREE(tree_view)->root_tree) { + selection = GTK_TREE(tree_view)->root_tree->selection; + while (selection) { + tmp_item = selection->data; + gtk_tree_item_deselect(GTK_TREE_ITEM(tmp_item)); + gtk_widget_unref(tmp_item); + selection = selection->next; + } + g_list_free(GTK_TREE(tree_view)->root_tree->selection); + GTK_TREE(tree_view)->root_tree->selection = NULL; + } + + /* Clear the protocol tree view. The length arg of -1 + * means to clear all items up to the end. */ + gtk_tree_clear_items(GTK_TREE(tree_view), 0, -1); } gboolean diff --git a/gtk/main.c b/gtk/main.c index 84e4c22735..9638ffdaa6 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -1,6 +1,6 @@ /* main.c * - * $Id: main.c,v 1.73 1999/12/15 06:52:23 gram Exp $ + * $Id: main.c,v 1.74 1999/12/15 07:03:06 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -764,13 +764,13 @@ packet_list_unselect_cb(GtkWidget *w, gint row, gint col, gpointer evt) { void tree_view_cb(GtkWidget *w, gpointer data) { -#if 0 + field_info *finfo; int tree_selected_start = -1; int tree_selected_len = -1; if (GTK_TREE(w)->selection) { - finfo = gtk_ctree_node + finfo = gtk_object_get_data(GTK_OBJECT(GTK_TREE(w)->selection->data), E_TREEINFO_FIELD_INFO_KEY); g_assert(finfo); @@ -782,7 +782,6 @@ tree_view_cb(GtkWidget *w, gpointer data) { packet_hex_print(GTK_TEXT(byte_view), cf.pd, cf.current_frame->cap_len, tree_selected_start, tree_selected_len, cf.current_frame->encoding); -#endif } void collapse_all_cb(GtkWidget *widget, gpointer data) { @@ -1263,11 +1262,14 @@ main(int argc, char *argv[]) gtk_widget_set_usize(tv_scrollw, -1, tv_size); gtk_widget_show(tv_scrollw); - tree_view = gtk_ctree_new(1, 0); + tree_view = gtk_tree_new(); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(tv_scrollw), tree_view); - gtk_ctree_set_line_style(GTK_CTREE(tree_view), GTK_CTREE_LINES_NONE); - gtk_ctree_set_expander_style(GTK_CTREE(tree_view), GTK_CTREE_EXPANDER_SQUARE); - gtk_signal_connect(GTK_OBJECT(tree_view), "tree-select-row", + gtk_tree_set_selection_mode(GTK_TREE(tree_view), GTK_SELECTION_SINGLE); + + gtk_tree_set_view_lines(GTK_TREE(tree_view), FALSE); + gtk_tree_set_view_mode(GTK_TREE(tree_view), GTK_TREE_VIEW_ITEM); + + gtk_signal_connect(GTK_OBJECT(tree_view), "selection_changed", GTK_SIGNAL_FUNC(tree_view_cb), NULL); gtk_widget_show(tree_view); diff --git a/gtk/proto_draw.c b/gtk/proto_draw.c index b59a3b83d4..f68399d2cb 100644 --- a/gtk/proto_draw.c +++ b/gtk/proto_draw.c @@ -1,7 +1,7 @@ /* gtkpacket.c * Routines for GTK+ packet display * - * $Id: proto_draw.c,v 1.10 1999/12/15 06:52:32 gram Exp $ + * $Id: proto_draw.c,v 1.11 1999/12/15 07:03:11 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -161,9 +161,8 @@ void expand_all_tree(proto_tree *protocol_tree, GtkWidget *tree_view) { for(i=0; i < num_tree_types; i++) { tree_is_expanded[i] = TRUE; } -/* gtk_tree_clear_items(GTK_TREE(tree_view), 0, -1); + gtk_tree_clear_items(GTK_TREE(tree_view), 0, -1); proto_tree_draw(protocol_tree, tree_view); - gtk_ctree_expand_recursive(GTK_CTREE(tree_view), */ } void collapse_all_tree(proto_tree *protocol_tree, GtkWidget *tree_view) { @@ -171,8 +170,8 @@ void collapse_all_tree(proto_tree *protocol_tree, GtkWidget *tree_view) { for(i=0; i < num_tree_types; i++) { tree_is_expanded[i] = FALSE; } -/* gtk_tree_clear_items(GTK_TREE(tree_view), 0, -1); - proto_tree_draw(protocol_tree, tree_view);*/ + gtk_tree_clear_items(GTK_TREE(tree_view), 0, -1); + proto_tree_draw(protocol_tree, tree_view); } static void @@ -187,44 +186,27 @@ collapse_tree(GtkWidget *w, gpointer data) { *val = FALSE; } -/*static void +static void set_item_style(GtkWidget *widget, gpointer dummy) { gtk_widget_set_style(widget, item_style); -}*/ - -struct proto_tree_draw_info { - GtkCTree *ctree; - GtkCTreeNode *ctree_node; -}; +} void proto_tree_draw(proto_tree *protocol_tree, GtkWidget *tree_view) { - struct proto_tree_draw_info info; - - info.ctree = GTK_CTREE(tree_view); - info.ctree_node = NULL; - - gtk_clist_freeze ( GTK_CLIST(tree_view) ); - g_node_children_foreach((GNode*) protocol_tree, G_TRAVERSE_ALL, - proto_tree_draw_node, &info); - - gtk_clist_thaw ( GTK_CLIST(tree_view) ); + proto_tree_draw_node, tree_view); } static void proto_tree_draw_node(GNode *node, gpointer data) { - struct proto_tree_draw_info info; - struct proto_tree_draw_info *parent_info = (struct proto_tree_draw_info*) data; - + GtkWidget *tree_view = (GtkWidget*) data; field_info *fi = (field_info*) (node->data); + GtkWidget *ti, *subtree; gchar label_str[ITEM_LABEL_LENGTH]; gchar *label_ptr; - GtkCTreeNode *parent; - gboolean is_leaf, is_expanded; if (!fi->visible) return; @@ -237,40 +219,25 @@ proto_tree_draw_node(GNode *node, gpointer data) label_ptr = label_str; proto_item_fill_label(fi, label_str); } - - if (g_node_n_children(node) > 0) { - is_leaf = FALSE; - if (tree_is_expanded[fi->tree_type]) { - is_expanded = TRUE; - } - else { - is_expanded = FALSE; - } - } - else { - is_leaf = TRUE; - is_expanded = FALSE; - } + + ti = gtk_tree_item_new_with_label(label_ptr); + gtk_container_foreach(GTK_CONTAINER(ti), set_item_style, NULL); - info.ctree = parent_info->ctree; - parent = gtk_ctree_insert_node ( info.ctree, parent_info->ctree_node, NULL, - &label_ptr, 4, NULL, NULL, NULL, NULL, - is_leaf, is_expanded ); - -/* g_return_if_fail( parent != NULL );*/ + gtk_object_set_data(GTK_OBJECT(ti), E_TREEINFO_FIELD_INFO_KEY, (gpointer) fi); + gtk_tree_append(GTK_TREE(tree_view), ti); + gtk_widget_show(ti); - gtk_ctree_node_set_row_data( GTK_CTREE(info.ctree), parent, fi ); - gtk_ctree_node_set_row_style( GTK_CTREE(info.ctree), parent, item_style); - - if (!is_leaf) { -/* gtk_signal_connect(GTK_OBJECT(ti), "expand", (GtkSignalFunc) expand_tree, + if (g_node_n_children(node) > 0) { + subtree = gtk_tree_new(); + gtk_tree_item_set_subtree(GTK_TREE_ITEM(ti), GTK_WIDGET(subtree)); + if (tree_is_expanded[fi->tree_type]) + gtk_tree_item_expand(GTK_TREE_ITEM(ti)); + gtk_signal_connect(GTK_OBJECT(ti), "expand", (GtkSignalFunc) expand_tree, (gpointer) &tree_is_expanded[fi->tree_type]); gtk_signal_connect(GTK_OBJECT(ti), "collapse", (GtkSignalFunc) collapse_tree, - (gpointer) &tree_is_expanded[fi->tree_type]);*/ - + (gpointer) &tree_is_expanded[fi->tree_type]); - info.ctree_node = parent; g_node_children_foreach(node, G_TRAVERSE_ALL, - proto_tree_draw_node, &info); + proto_tree_draw_node, subtree); } } |