From ddc5a1773ac4fa682eaff622d43b3e7bf16c309c Mon Sep 17 00:00:00 2001 From: Guy Harris Date: Sat, 20 Mar 2004 06:34:09 +0000 Subject: From Tomas Kukosa: add Expand Tree to the View menu; make the Expand Tree context menu active iff the currently-selected item has a subtree; fix the GTK2 code for Expand Tree. svn path=/trunk/; revision=10415 --- gtk/main.c | 18 ++---------------- gtk/menu.c | 9 +++++++-- gtk/proto_draw.c | 14 +++++++++++++- gtk/proto_draw.h | 3 ++- 4 files changed, 24 insertions(+), 20 deletions(-) (limited to 'gtk') diff --git a/gtk/main.c b/gtk/main.c index 27df938fc5..5074e7dd71 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -1,6 +1,6 @@ /* main.c * - * $Id: main.c,v 1.418 2004/03/19 06:23:38 guy Exp $ + * $Id: main.c,v 1.419 2004/03/20 06:34:08 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -1070,11 +1070,7 @@ void expand_tree_cb(GtkWidget *widget _U_, gpointer data _U_) { #if GTK_MAJOR_VERSION < 2 GtkCTreeNode *node; #else - GtkTreeModel *model; GtkTreePath *path; - GtkTreeIter iter; - field_info *fi; - gboolean valid; #endif #if GTK_MAJOR_VERSION < 2 @@ -1082,17 +1078,7 @@ void expand_tree_cb(GtkWidget *widget _U_, gpointer data _U_) { g_assert(node); gtk_ctree_expand_recursive(GTK_CTREE(tree_view), node); #else - model = gtk_tree_view_get_model(GTK_TREE_VIEW(tree_view)); - path = NULL; - valid = gtk_tree_model_get_iter_first(model, &iter); - while (valid) { - gtk_tree_model_get(model, &iter, 1, &fi, -1); - if (fi == cfile.finfo_selected) { - path = gtk_tree_model_get_path(model, &iter); - break; - } - valid = gtk_tree_model_iter_next(model, &iter); - } + path = tree_find_by_field_info(GTK_TREE_VIEW(tree_view), cfile.finfo_selected); g_assert(path); gtk_tree_view_expand_row(GTK_TREE_VIEW(tree_view), path, TRUE); gtk_tree_path_free(path); diff --git a/gtk/menu.c b/gtk/menu.c index 968c2bdb3c..d64c609d6d 100644 --- a/gtk/menu.c +++ b/gtk/menu.c @@ -1,7 +1,7 @@ /* menu.c * Menu routines * - * $Id: menu.c,v 1.179 2004/03/19 06:23:38 guy Exp $ + * $Id: menu.c,v 1.180 2004/03/20 06:34:09 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -234,6 +234,7 @@ static GtkItemFactoryEntry menu_items[] = 0, NULL, NULL), ITEM_FACTORY_ENTRY("/View/_Expand All", NULL, expand_all_cb, 0, NULL, NULL), + ITEM_FACTORY_ENTRY("/View/Expand Tree", NULL, expand_tree_cb, 0, NULL, NULL), ITEM_FACTORY_ENTRY("/View/", NULL, NULL, 0, "", NULL), ITEM_FACTORY_STOCK_ENTRY("/View/_Coloring Rules...", NULL, color_display_cb, 0, GTK_STOCK_SELECT_COLOR), @@ -1645,6 +1646,8 @@ set_menus_for_selected_packet(capture_file *cf) cf->current_frame != NULL); set_menu_sensitivity(tree_view_menu_factory, "/Expand All", cf->current_frame != NULL); + set_menu_sensitivity(main_menu_factory, "/View/Expand Tree", + cf->current_frame != NULL); set_menu_sensitivity(tree_view_menu_factory, "/Expand Tree", cf->current_frame != NULL); set_menu_sensitivity(main_menu_factory, "/View/Show Packet in New Window", @@ -1762,7 +1765,8 @@ set_menus_for_selected_tree_row(capture_file *cf) proto_can_match_selected(cf->finfo_selected, cf->edt)); set_menu_sensitivity(tree_view_menu_factory, "/Protocol Properties...", properties); - set_menu_sensitivity(tree_view_menu_factory, "/Expand Tree", TRUE); + set_menu_sensitivity(main_menu_factory, "/View/Expand Tree", cf->finfo_selected->tree_type != -1); + set_menu_sensitivity(tree_view_menu_factory, "/Expand Tree", cf->finfo_selected->tree_type != -1); } else { set_menu_sensitivity(main_menu_factory, "/Go/Go to Corresponding Packet", FALSE); @@ -1774,6 +1778,7 @@ set_menus_for_selected_tree_row(capture_file *cf) set_menu_sensitivity(tree_view_menu_factory, "/Prepare", FALSE); set_menu_sensitivity(tree_view_menu_factory, "/Protocol Properties...", FALSE); + set_menu_sensitivity(main_menu_factory, "/View/Expand Tree", FALSE); set_menu_sensitivity(tree_view_menu_factory, "/Expand Tree", FALSE); } diff --git a/gtk/proto_draw.c b/gtk/proto_draw.c index e5361121e4..4bc6284977 100644 --- a/gtk/proto_draw.c +++ b/gtk/proto_draw.c @@ -1,7 +1,7 @@ /* proto_draw.c * Routines for GTK+ packet display * - * $Id: proto_draw.c,v 1.89 2004/02/20 17:31:00 ulfl Exp $ + * $Id: proto_draw.c,v 1.90 2004/03/20 06:34:09 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -337,6 +337,18 @@ lookup_finfo(GtkTreeModel *model, GtkTreePath *path _U_, GtkTreeIter *iter, } return FALSE; } + +GtkTreePath *tree_find_by_field_info(GtkTreeView *tree_view, field_info *finfo) { + GtkTreeModel *model; + struct field_lookup_info fli; + + model = gtk_tree_view_get_model(tree_view); + fli.fi = finfo; + gtk_tree_model_foreach(model, lookup_finfo, &fli); + + return gtk_tree_model_get_path(model, &fli.iter); +} + #endif /* If the user selected a certain byte in the byte view, try to find diff --git a/gtk/proto_draw.h b/gtk/proto_draw.h index 1cc0147759..0300abce34 100644 --- a/gtk/proto_draw.h +++ b/gtk/proto_draw.h @@ -1,7 +1,7 @@ /* proto_draw.h * Definitions for GTK+ packet display structures and routines * - * $Id: proto_draw.h,v 1.24 2004/01/27 20:36:48 guy Exp $ + * $Id: proto_draw.h,v 1.25 2004/03/20 06:34:09 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -64,6 +64,7 @@ void packet_hex_print(GtkTextView *, const guint8 *, frame_data *, field_info *, guint); void packet_hex_reprint(GtkTextView *); void set_ptree_font_all(PangoFontDescription *font); +GtkTreePath *tree_find_by_field_info(GtkTreeView *tree_view, field_info *finfo); #endif extern GtkWidget * main_tree_view_new(e_prefs *prefs, GtkWidget **tree_view_p); -- cgit v1.2.3