settable in GTK+ 2.0's new tree view widget, as the GTK+ developers
consider them per-user preferences rather than items that should be
set by individual applications.
+ ==> Done
- double click on item in protocol tree doesn't expand or collapse its
subtree ;
/* column_prefs.c
* Dialog box for column preferences
*
- * $Id: column_prefs.c,v 1.3 2002/09/07 21:21:56 oabad Exp $
+ * $Id: column_prefs.c,v 1.4 2002/09/14 10:07:39 oabad Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
#include "prefs.h"
#include "column.h"
+#include "ui_util.h"
+
static GtkWidget *column_l, *del_bt, *title_te, *fmt_m, *up_bt, *dn_bt;
static gint cur_fmt, cur_row;
gtk_widget_show(column_sc);
store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
- column_l = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
- gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(column_l), TRUE);
+ column_l = tree_view_new(GTK_TREE_MODEL(store));
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(column_l), TRUE);
gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(column_l), FALSE);
renderer = gtk_cell_renderer_text_new();
/* decode_as_dlg.c
*
- * $Id: decode_as_dlg.c,v 1.3 2002/09/07 18:35:16 oabad Exp $
+ * $Id: decode_as_dlg.c,v 1.4 2002/09/14 10:07:39 oabad Exp $
*
* Routines to modify dissector tables on the fly.
*
/* Initialize list */
store = gtk_list_store_new(E_LIST_D_COLUMNS, G_TYPE_STRING,
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
- list = GTK_TREE_VIEW(gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)));
- gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(list), TRUE);
+ list = GTK_TREE_VIEW(tree_view_new(GTK_TREE_MODEL(store)));
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list), TRUE);
gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(list), FALSE);
gtk_tree_selection_set_mode(gtk_tree_view_get_selection(list),
store = gtk_list_store_new(E_LIST_S_COLUMNS+1, G_TYPE_STRING,
G_TYPE_STRING, G_TYPE_POINTER);
- list = GTK_TREE_VIEW(gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)));
+ list = GTK_TREE_VIEW(tree_view_new(GTK_TREE_MODEL(store)));
*list_p = list;
gtk_tree_view_set_headers_clickable(list, FALSE);
#ifndef DEBUG
* Copyright 2000, Jeffrey C. Foster <jfoste@woodward.com> and
* Guy Harris <guy@alum.mit.edu>
*
- * $Id: dfilter_expr_dlg.c,v 1.3 2002/09/10 20:54:14 oabad Exp $
+ * $Id: dfilter_expr_dlg.c,v 1.4 2002/09/14 10:07:39 oabad Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
gtk_widget_show(tree_scrolled_win);
store = gtk_tree_store_new(2, G_TYPE_STRING, G_TYPE_POINTER);
- tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
+ tree = tree_view_new(GTK_TREE_MODEL(store));
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree), FALSE);
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree));
gtk_tree_selection_set_mode(selection, GTK_SELECTION_BROWSE);
gtk_box_pack_start(GTK_BOX(col2_vb), relation_label, FALSE, FALSE, 0);
l_store = gtk_list_store_new(1, G_TYPE_STRING);
- relation_list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(l_store));
+ relation_list = tree_view_new(GTK_TREE_MODEL(l_store));
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(relation_list), FALSE);
g_object_unref(G_OBJECT(l_store));
renderer = gtk_cell_renderer_text_new();
gtk_widget_show(value_list_scrolled_win);
l_store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_POINTER);
- value_list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(l_store));
+ value_list = tree_view_new(GTK_TREE_MODEL(l_store));
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(value_list), FALSE);
g_object_unref(G_OBJECT(l_store));
renderer = gtk_cell_renderer_text_new();
* (This used to be a notebook page under "Preferences", hence the
* "prefs" in the file name.)
*
- * $Id: filter_prefs.c,v 1.4 2002/09/10 20:49:07 oabad Exp $
+ * $Id: filter_prefs.c,v 1.5 2002/09/14 10:07:39 oabad Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
gtk_widget_show(filter_sc);
store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_POINTER);
- filter_l = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
- gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(filter_l), TRUE);
+ filter_l = tree_view_new(GTK_TREE_MODEL(store));
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(filter_l), FALSE);
renderer = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes("", renderer, "text",
/* gui_prefs.c
* Dialog box for GUI preferences
*
- * $Id: gui_prefs.c,v 1.2 2002/09/05 18:48:51 jmayer Exp $
+ * $Id: gui_prefs.c,v 1.3 2002/09/14 10:07:39 oabad Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
#define SCROLLBAR_PLACEMENT_KEY "scrollbar_placement"
#define PLIST_SEL_BROWSE_KEY "plist_sel_browse"
#define PTREE_SEL_BROWSE_KEY "ptree_sel_browse"
-#define PTREE_LINE_STYLE_KEY "ptree_line_style"
-#define PTREE_EXPANDER_STYLE_KEY "ptree_expander_style"
+#define ALTERN_COLORS_KEY "altern_colors"
#define HEX_DUMP_HIGHLIGHT_STYLE_KEY "hex_dump_highlight_style"
#define GEOMETRY_POSITION_KEY "geometry_position"
#define GEOMETRY_SIZE_KEY "geometry_size"
{ NULL, 0 }
};
-static const enum_val_t line_style_vals[] = {
- { "None", 0 },
- { "Solid", 1 },
- { "Dotted", 2 },
- { "Tabbed", 3 },
- { NULL, 0 }
-};
-
-static const enum_val_t expander_style_vals[] = {
- { "None", 0 },
- { "Square", 1 },
- { "Triangle", 2 },
- { "Circular", 3 },
- { NULL, 0 }
+static const enum_val_t altern_colors_vals[] = {
+ { "No", FALSE },
+ { "Yes", TRUE },
+ { NULL, 0 }
};
static const enum_val_t highlight_style_vals[] = {
{
GtkWidget *main_tb, *main_vb, *hbox, *font_bt, *color_bt;
GtkWidget *scrollbar_om, *plist_browse_om;
- GtkWidget *ptree_browse_om, *line_style_om;
- GtkWidget *expander_style_om, *highlight_style_om;
+ GtkWidget *ptree_browse_om, *altern_colors_om;
+ GtkWidget *highlight_style_om;
GtkWidget *save_position_cb, *save_size_cb;
/* The colors or font haven't been changed yet. */
gtk_object_set_data(GTK_OBJECT(main_vb), PTREE_SEL_BROWSE_KEY,
ptree_browse_om);
- /* Tree line style */
- line_style_om = create_preference_option_menu(main_tb, 3,
- "Tree line style:", NULL, line_style_vals,
- prefs.gui_ptree_line_style);
- gtk_object_set_data(GTK_OBJECT(main_vb), PTREE_LINE_STYLE_KEY,
- line_style_om);
-
- /* Tree expander style */
- expander_style_om = create_preference_option_menu(main_tb, 4,
- "Tree expander style:", NULL, expander_style_vals,
- prefs.gui_ptree_expander_style);
- gtk_object_set_data(GTK_OBJECT(main_vb), PTREE_EXPANDER_STYLE_KEY,
- expander_style_om);
+ /* Alternating row colors in list and tree views */
+ altern_colors_om = create_preference_option_menu(main_tb, 3,
+ "Alternating row colors in lists and trees:", NULL,
+ altern_colors_vals, prefs.gui_altern_colors);
+ gtk_object_set_data(GTK_OBJECT(main_vb), ALTERN_COLORS_KEY,
+ altern_colors_om);
/* Hex Dump highlight style */
- highlight_style_om = create_preference_option_menu(main_tb, 5,
+ highlight_style_om = create_preference_option_menu(main_tb, 4,
"Hex display highlight style:", NULL, highlight_style_vals,
prefs.gui_hex_dump_highlight_style);
gtk_object_set_data(GTK_OBJECT(main_vb), HEX_DUMP_HIGHLIGHT_STYLE_KEY,
/* Geometry prefs */
save_position_cb = create_preference_check_button(main_tb,
- 6, "Save window position:", NULL, prefs.gui_geometry_save_position);
+ 5, "Save window position:", NULL, prefs.gui_geometry_save_position);
gtk_object_set_data(GTK_OBJECT(main_vb), GEOMETRY_POSITION_KEY,
save_position_cb);
save_size_cb = create_preference_check_button(main_tb,
- 7, "Save window size:", NULL, prefs.gui_geometry_save_size);
+ 6, "Save window size:", NULL, prefs.gui_geometry_save_size);
gtk_object_set_data(GTK_OBJECT(main_vb), GEOMETRY_SIZE_KEY,
save_size_cb);
prefs.gui_ptree_sel_browse = fetch_enum_value(
gtk_object_get_data(GTK_OBJECT(w), PTREE_SEL_BROWSE_KEY),
selection_mode_vals);
- prefs.gui_ptree_line_style = fetch_enum_value(
- gtk_object_get_data(GTK_OBJECT(w), PTREE_LINE_STYLE_KEY),
- line_style_vals);
- prefs.gui_ptree_expander_style = fetch_enum_value(
- gtk_object_get_data(GTK_OBJECT(w), PTREE_EXPANDER_STYLE_KEY),
- expander_style_vals);
+ prefs.gui_altern_colors = fetch_enum_value(
+ gtk_object_get_data(GTK_OBJECT(w), ALTERN_COLORS_KEY),
+ altern_colors_vals);
prefs.gui_hex_dump_highlight_style = fetch_enum_value(
gtk_object_get_data(GTK_OBJECT(w), HEX_DUMP_HIGHLIGHT_STYLE_KEY),
highlight_style_vals);
set_scrollbar_placement_all();
set_plist_sel_browse(prefs.gui_plist_sel_browse);
set_ptree_sel_browse_all(prefs.gui_ptree_sel_browse);
+ set_tree_view_styles_all();
if (colors_changed)
update_marked_frames();
/* plugins_dlg.c
* Dialog boxes for plugins
*
- * $Id: plugins_dlg.c,v 1.2 2002/09/05 18:48:51 jmayer Exp $
+ * $Id: plugins_dlg.c,v 1.3 2002/09/14 10:07:39 oabad Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
#include <epan/plugins.h>
#include "dlg_utils.h"
+#include "ui_util.h"
#ifdef HAVE_PLUGINS
GtkWidget *frame_vbnbox;
GtkWidget *main_hbnbox;
GtkWidget *close_bn;
- gchar *titles[] = {"Name", "Version"};
GtkListStore *store;
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
store = gtk_list_store_new(NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING);
plugins_scan(store);
- plugins_list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
- gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(plugins_list), TRUE);
+ plugins_list = tree_view_new(GTK_TREE_MODEL(store));
gtk_tree_view_set_search_column(GTK_TREE_VIEW(plugins_list), 0);
g_object_unref(G_OBJECT(store));
gtk_container_add(GTK_CONTAINER(scrolledwindow), plugins_list);
/* prefs_dlg.c
* Routines for handling preferences
*
- * $Id: prefs_dlg.c,v 1.3 2002/09/10 19:39:00 oabad Exp $
+ * $Id: prefs_dlg.c,v 1.4 2002/09/14 10:07:39 oabad Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
gtk_widget_show(ct_sb);
store = gtk_tree_store_new(2, G_TYPE_STRING, G_TYPE_INT);
- cts.treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
+ cts.treeview = tree_view_new(GTK_TREE_MODEL(store));
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(cts.treeview), FALSE);
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(cts.treeview));
gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);
/* proto_draw.c
* Routines for GTK+ packet display
*
- * $Id: proto_draw.c,v 1.2 2002/09/05 18:48:52 jmayer Exp $
+ * $Id: proto_draw.c,v 1.3 2002/09/14 10:07:39 oabad Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
gtk_widget_show(tv_scrollw);
store = gtk_tree_store_new(2, G_TYPE_STRING, G_TYPE_POINTER);
- tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
+ tree_view = tree_view_new(GTK_TREE_MODEL(store));
g_object_unref(G_OBJECT(store));
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree_view), FALSE);
renderer = gtk_cell_renderer_text_new();
/* proto_hier_stats_dlg.c
*
- * $Id: proto_hier_stats_dlg.c,v 1.1 2002/08/31 09:55:22 oabad Exp $
+ * $Id: proto_hier_stats_dlg.c,v 1.2 2002/09/14 10:07:40 oabad Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
store = gtk_tree_store_new(NUM_STAT_COLUMNS, G_TYPE_STRING,
G_TYPE_STRING, G_TYPE_UINT, G_TYPE_UINT,
G_TYPE_UINT, G_TYPE_UINT);
- tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
+ tree = tree_view_new(GTK_TREE_MODEL(store));
tree_view = GTK_TREE_VIEW(tree);
- gtk_tree_view_set_rules_hint(tree_view, TRUE);
gtk_tree_view_set_headers_visible(tree_view, TRUE);
gtk_tree_view_set_headers_clickable(tree_view, FALSE);
renderer = gtk_cell_renderer_text_new();
/* ui_util.c
* UI utility routines
*
- * $Id: ui_util.c,v 1.2 2002/09/05 18:48:52 jmayer Exp $
+ * $Id: ui_util.c,v 1.3 2002/09/14 10:07:40 oabad Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
{
g_list_foreach(scrolled_windows, set_scrollbar_placement_cb, NULL);
}
+
+/* List of all GtkTreeViews, so we can globally set the alternating
+ * colors style of all of them. */
+static GList *tree_views;
+
+static void setup_tree_view(GtkWidget *tree_view);
+static void forget_tree_view(GtkWidget *tree_view, gpointer data);
+static void set_tree_view_styles(GtkWidget *tree_view);
+
+/* Create a GtkTreeView, give it the right styles, and remember it. */
+GtkWidget *
+tree_view_new(GtkTreeModel *model)
+{
+ GtkWidget *tree;
+
+ tree = gtk_tree_view_new_with_model(model);
+ setup_tree_view(tree);
+ return tree;
+}
+
+/* Set a GtkTreeView's styles and add it to the list of GtkTreeViews */
+static void
+setup_tree_view(GtkWidget *tree_view)
+{
+ set_tree_view_styles(tree_view);
+
+ tree_views = g_list_append(tree_views, tree_view);
+
+ /* Catch the "destroy" event on the widget, so that we remove it from
+ the list when it's destroyed. */
+ g_signal_connect(G_OBJECT(tree_view), "destroy",
+ G_CALLBACK(forget_tree_view), NULL);
+}
+
+/* Remove a GtkTreeView from the list of GtkTreeViews. */
+static void
+forget_tree_view(GtkWidget *tree_view, gpointer data _U_)
+{
+ tree_views = g_list_remove(tree_views, tree_view);
+}
+
+/* Set the styles of a GtkCTree based upon user preferences. */
+static void
+set_tree_view_styles(GtkWidget *tree_view)
+{
+ g_assert(prefs.gui_altern_colors >= 0 &&
+ prefs.gui_altern_colors <= 1);
+ gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(tree_view),
+ prefs.gui_altern_colors);
+}
+
+static void
+set_tree_view_styles_cb(gpointer data, gpointer user_data _U_)
+{
+ set_tree_view_styles((GtkWidget *)data);
+}
+
+/* Set the styles of all GtkTreeViews based upon style values. */
+void
+set_tree_view_styles_all(void)
+{
+ g_list_foreach(tree_views, set_tree_view_styles_cb, NULL);
+}
/* ui_util.h
* Definitions for UI utility routines
*
- * $Id: ui_util.h,v 1.1 2002/08/31 09:55:22 oabad Exp $
+ * $Id: ui_util.h,v 1.2 2002/09/14 10:07:40 oabad Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
preference. */
void set_scrollbar_placement_all(void);
-/* Create a GtkCTree, give it the right styles, and remember it. */
-GtkWidget *ctree_new(gint columns, gint tree_column);
-GtkWidget *ctree_new_with_titles(gint columns, gint tree_column,
- gchar *titles[]);
+/* Create a GtkTreeView, give it the right styles, and remember it. */
+GtkWidget *tree_view_new(GtkTreeModel *model);
-/* Set the styles of all GtkCTrees based upon user preferences. */
-void set_ctree_styles_all(void);
+/* Set the styles of all GtkTreeViews based upon user preferences. */
+void set_tree_view_styles_all(void);
#endif /* __GTKGUIUI_UTIL_H__ */
/* prefs.c
* Routines for handling preferences
*
- * $Id: prefs.c,v 1.89 2002/08/28 21:00:40 jmayer Exp $
+ * $Id: prefs.c,v 1.90 2002/09/14 10:07:37 oabad Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
prefs.gui_scrollbar_on_right = TRUE;
prefs.gui_plist_sel_browse = FALSE;
prefs.gui_ptree_sel_browse = FALSE;
+ prefs.gui_altern_colors = FALSE;
prefs.gui_ptree_line_style = 0;
prefs.gui_ptree_expander_style = 1;
prefs.gui_hex_dump_highlight_style = 1;
#define PRS_GUI_SCROLLBAR_ON_RIGHT "gui.scrollbar_on_right"
#define PRS_GUI_PLIST_SEL_BROWSE "gui.packet_list_sel_browse"
#define PRS_GUI_PTREE_SEL_BROWSE "gui.protocol_tree_sel_browse"
+#define PRS_GUI_ALTERN_COLORS "gui.tree_view_altern_colors"
#define PRS_GUI_PTREE_LINE_STYLE "gui.protocol_tree_line_style"
#define PRS_GUI_PTREE_EXPANDER_STYLE "gui.protocol_tree_expander_style"
#define PRS_GUI_HEX_DUMP_HIGHLIGHT_STYLE "gui.hex_dump_highlight_style"
else {
prefs.gui_ptree_sel_browse = FALSE;
}
+ } else if (strcmp(pref_name, PRS_GUI_ALTERN_COLORS) == 0) {
+ if (strcasecmp(value, "true") == 0) {
+ prefs.gui_altern_colors = TRUE;
+ }
+ else {
+ prefs.gui_altern_colors = FALSE;
+ }
} else if (strcmp(pref_name, PRS_GUI_PTREE_LINE_STYLE) == 0) {
prefs.gui_ptree_line_style =
find_index_from_string_array(value, gui_ptree_line_style_text, 0);
fprintf(pf, PRS_GUI_PTREE_SEL_BROWSE ": %s\n",
prefs.gui_ptree_sel_browse == TRUE ? "TRUE" : "FALSE");
+ fprintf(pf, "\n# Alternating colors in TreeViews\n");
+ fprintf(pf, PRS_GUI_ALTERN_COLORS ": %s\n",
+ prefs.gui_altern_colors == TRUE ? "TRUE" : "FALSE");
+
fprintf(pf, "\n# Protocol-tree line style. One of: NONE, SOLID, DOTTED, TABBED\n");
fprintf(pf, PRS_GUI_PTREE_LINE_STYLE ": %s\n",
- gui_ptree_line_style_text[prefs.gui_ptree_line_style]);
+ gui_ptree_line_style_text[prefs.gui_ptree_line_style]);
fprintf(pf, "\n# Protocol-tree expander style. One of: NONE, SQUARE, TRIANGLE, CIRCULAR\n");
fprintf(pf, PRS_GUI_PTREE_EXPANDER_STYLE ": %s\n",
dest->gui_scrollbar_on_right = src->gui_scrollbar_on_right;
dest->gui_plist_sel_browse = src->gui_plist_sel_browse;
dest->gui_ptree_sel_browse = src->gui_ptree_sel_browse;
+ dest->gui_altern_colors = src->gui_altern_colors;
dest->gui_ptree_line_style = src->gui_ptree_line_style;
dest->gui_ptree_expander_style = src->gui_ptree_expander_style;
dest->gui_hex_dump_highlight_style = src->gui_hex_dump_highlight_style;
/* prefs.h
* Definitions for preference handling routines
*
- * $Id: prefs.h,v 1.40 2002/08/28 21:00:40 jmayer Exp $
+ * $Id: prefs.h,v 1.41 2002/09/14 10:07:37 oabad Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
gboolean gui_scrollbar_on_right;
gboolean gui_plist_sel_browse;
gboolean gui_ptree_sel_browse;
+ gboolean gui_altern_colors;
gint gui_ptree_line_style;
gint gui_ptree_expander_style;
gboolean gui_hex_dump_highlight_style;