diff options
-rw-r--r-- | gtk/gtkglobals.h | 4 | ||||
-rw-r--r-- | gtk/gui_prefs.c | 148 | ||||
-rw-r--r-- | gtk/main.c | 34 | ||||
-rw-r--r-- | prefs.c | 51 | ||||
-rw-r--r-- | prefs.h | 4 |
5 files changed, 211 insertions, 30 deletions
diff --git a/gtk/gtkglobals.h b/gtk/gtkglobals.h index 6326009fb1..6643052338 100644 --- a/gtk/gtkglobals.h +++ b/gtk/gtkglobals.h @@ -1,7 +1,7 @@ /* gtkglobals.h * GTK-related Global defines, etc. * - * $Id: gtkglobals.h,v 1.4 1999/12/29 20:10:09 gram Exp $ + * $Id: gtkglobals.h,v 1.5 1999/12/30 23:02:54 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -39,5 +39,7 @@ extern GtkStyle *item_style; void set_scrollbar_placement(int); /* 1=right, 0=left */ void set_plist_sel_browse(gboolean); void set_ptree_sel_browse(gboolean); +void set_ptree_line_style(gint style); +void set_ptree_expander_style(gint style); #endif diff --git a/gtk/gui_prefs.c b/gtk/gui_prefs.c index 717be022cf..089a065148 100644 --- a/gtk/gui_prefs.c +++ b/gtk/gui_prefs.c @@ -1,7 +1,7 @@ /* gui_prefs.c * Dialog box for GUI preferences * - * $Id: gui_prefs.c,v 1.2 1999/12/29 20:10:10 gram Exp $ + * $Id: gui_prefs.c,v 1.3 1999/12/30 23:02:55 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -43,32 +43,40 @@ static void scrollbar_menu_item_cb(GtkWidget *w, gpointer data); static void plist_sel_browse_cb(GtkWidget *w, gpointer data); static void ptree_sel_browse_cb(GtkWidget *w, gpointer data); +static void ptree_line_style_cb(GtkWidget *w, gpointer data); +static void ptree_expander_style_cb(GtkWidget *w, gpointer data); static gboolean temp_gui_scrollbar_on_right; static gboolean temp_gui_plist_sel_browse; static gboolean temp_gui_ptree_sel_browse; +static gint temp_gui_ptree_line_style; +static gint temp_gui_ptree_expander_style; GtkWidget* gui_prefs_show(void) { GtkWidget *main_tb, *main_vb, *label; - GtkWidget *menu_item_left, *menu_item_right, + GtkWidget *menu_item_false, *menu_item_true, + *menu_item_0, *menu_item_1, *menu_item_2, *menu_item_3, *scrollbar_menu, *scrollbar_option_menu; temp_gui_scrollbar_on_right = prefs.gui_scrollbar_on_right; temp_gui_plist_sel_browse = prefs.gui_plist_sel_browse; temp_gui_ptree_sel_browse = prefs.gui_ptree_sel_browse; + temp_gui_ptree_line_style = prefs.gui_ptree_line_style; + temp_gui_ptree_expander_style = prefs.gui_ptree_expander_style; /* Main vertical box */ main_vb = gtk_vbox_new(FALSE, 5); gtk_container_border_width( GTK_CONTAINER(main_vb), 5 ); /* Main table */ - main_tb = gtk_table_new(3, 2, FALSE); + main_tb = gtk_table_new(5, 2, FALSE); gtk_box_pack_start( GTK_BOX(main_vb), main_tb, FALSE, FALSE, 0 ); gtk_table_set_row_spacings( GTK_TABLE(main_tb), 10 ); gtk_table_set_col_spacings( GTK_TABLE(main_tb), 15 ); + /* Scrollbar placment */ label = gtk_label_new("Vertical Scrollbar Placement:"); gtk_misc_set_alignment( GTK_MISC(label), 1.0, 0.5 ); @@ -77,14 +85,14 @@ gui_prefs_show(void) /* Create a simple menu containing the LEFT/RIGHT choices for * the scrollbar placement option */ scrollbar_menu = gtk_menu_new(); - menu_item_left = gtk_menu_item_new_with_label("Left"); - menu_item_right = gtk_menu_item_new_with_label("Right"); - gtk_menu_append( GTK_MENU(scrollbar_menu), menu_item_left ); - gtk_menu_append( GTK_MENU(scrollbar_menu), menu_item_right ); + menu_item_false = gtk_menu_item_new_with_label("Left"); + menu_item_true = gtk_menu_item_new_with_label("Right"); + gtk_menu_append( GTK_MENU(scrollbar_menu), menu_item_false ); + gtk_menu_append( GTK_MENU(scrollbar_menu), menu_item_true ); - gtk_signal_connect( GTK_OBJECT(menu_item_left), "activate", + gtk_signal_connect( GTK_OBJECT(menu_item_false), "activate", scrollbar_menu_item_cb, GINT_TO_POINTER(FALSE) ); - gtk_signal_connect( GTK_OBJECT(menu_item_right), "activate", + gtk_signal_connect( GTK_OBJECT(menu_item_true), "activate", scrollbar_menu_item_cb, GINT_TO_POINTER(TRUE) ); /* Create the option menu from the option */ @@ -96,6 +104,7 @@ gui_prefs_show(void) gtk_table_attach_defaults( GTK_TABLE(main_tb), scrollbar_option_menu, 1, 2, 0, 1 ); + /* Packet list selection browseable */ label = gtk_label_new("Packet-list selection bar movement:"); gtk_misc_set_alignment( GTK_MISC(label), 1.0, 0.5 ); @@ -103,14 +112,14 @@ gui_prefs_show(void) /* Create a simple menu containing the LEFT/RIGHT choices */ scrollbar_menu = gtk_menu_new(); - menu_item_left = gtk_menu_item_new_with_label("Selects"); - menu_item_right = gtk_menu_item_new_with_label("Browses"); - gtk_menu_append( GTK_MENU(scrollbar_menu), menu_item_left ); - gtk_menu_append( GTK_MENU(scrollbar_menu), menu_item_right ); + menu_item_false = gtk_menu_item_new_with_label("Selects"); + menu_item_true = gtk_menu_item_new_with_label("Browses"); + gtk_menu_append( GTK_MENU(scrollbar_menu), menu_item_false ); + gtk_menu_append( GTK_MENU(scrollbar_menu), menu_item_true ); - gtk_signal_connect( GTK_OBJECT(menu_item_left), "activate", + gtk_signal_connect( GTK_OBJECT(menu_item_false), "activate", plist_sel_browse_cb, GINT_TO_POINTER(FALSE) ); - gtk_signal_connect( GTK_OBJECT(menu_item_right), "activate", + gtk_signal_connect( GTK_OBJECT(menu_item_true), "activate", plist_sel_browse_cb, GINT_TO_POINTER(TRUE) ); /* Create the option menu from the option */ @@ -122,6 +131,7 @@ gui_prefs_show(void) gtk_table_attach_defaults( GTK_TABLE(main_tb), scrollbar_option_menu, 1, 2, 1, 2 ); + /* Proto tree selection browseable */ label = gtk_label_new("Protocol-tree selection bar movement:"); gtk_misc_set_alignment( GTK_MISC(label), 1.0, 0.5 ); @@ -129,14 +139,14 @@ gui_prefs_show(void) /* Create a simple menu containing the LEFT/RIGHT choices */ scrollbar_menu = gtk_menu_new(); - menu_item_left = gtk_menu_item_new_with_label("Selects"); - menu_item_right = gtk_menu_item_new_with_label("Browses"); - gtk_menu_append( GTK_MENU(scrollbar_menu), menu_item_left ); - gtk_menu_append( GTK_MENU(scrollbar_menu), menu_item_right ); + menu_item_false = gtk_menu_item_new_with_label("Selects"); + menu_item_true = gtk_menu_item_new_with_label("Browses"); + gtk_menu_append( GTK_MENU(scrollbar_menu), menu_item_false ); + gtk_menu_append( GTK_MENU(scrollbar_menu), menu_item_true ); - gtk_signal_connect( GTK_OBJECT(menu_item_left), "activate", + gtk_signal_connect( GTK_OBJECT(menu_item_false), "activate", ptree_sel_browse_cb, GINT_TO_POINTER(FALSE) ); - gtk_signal_connect( GTK_OBJECT(menu_item_right), "activate", + gtk_signal_connect( GTK_OBJECT(menu_item_true), "activate", ptree_sel_browse_cb, GINT_TO_POINTER(TRUE) ); /* Create the option menu from the option */ @@ -148,6 +158,76 @@ gui_prefs_show(void) gtk_table_attach_defaults( GTK_TABLE(main_tb), scrollbar_option_menu, 1, 2, 2, 3 ); + + /* Proto tree line style */ + label = gtk_label_new("Protocol-tree line style:"); + gtk_misc_set_alignment( GTK_MISC(label), 1.0, 0.5 ); + gtk_table_attach_defaults( GTK_TABLE(main_tb), label, 0, 1, 3, 4 ); + + /* Create a menu */ + scrollbar_menu = gtk_menu_new(); + menu_item_0 = gtk_menu_item_new_with_label("None"); + menu_item_1 = gtk_menu_item_new_with_label("Solid"); + menu_item_2 = gtk_menu_item_new_with_label("Dotted"); + menu_item_3 = gtk_menu_item_new_with_label("Tabbed"); + gtk_menu_append( GTK_MENU(scrollbar_menu), menu_item_0 ); + gtk_menu_append( GTK_MENU(scrollbar_menu), menu_item_1 ); + gtk_menu_append( GTK_MENU(scrollbar_menu), menu_item_2 ); + gtk_menu_append( GTK_MENU(scrollbar_menu), menu_item_3 ); + + gtk_signal_connect( GTK_OBJECT(menu_item_0), "activate", + ptree_line_style_cb, GINT_TO_POINTER(0) ); + gtk_signal_connect( GTK_OBJECT(menu_item_1), "activate", + ptree_line_style_cb, GINT_TO_POINTER(1) ); + gtk_signal_connect( GTK_OBJECT(menu_item_2), "activate", + ptree_line_style_cb, GINT_TO_POINTER(2) ); + gtk_signal_connect( GTK_OBJECT(menu_item_3), "activate", + ptree_line_style_cb, GINT_TO_POINTER(3) ); + + /* Create the option menu from the option */ + scrollbar_option_menu = gtk_option_menu_new(); + gtk_option_menu_set_menu( GTK_OPTION_MENU(scrollbar_option_menu), + scrollbar_menu ); + gtk_option_menu_set_history( GTK_OPTION_MENU(scrollbar_option_menu), + temp_gui_ptree_line_style); + gtk_table_attach_defaults( GTK_TABLE(main_tb), scrollbar_option_menu, + 1, 2, 3, 4 ); + + + /* Proto tree expander style */ + label = gtk_label_new("Protocol-tree expander style:"); + gtk_misc_set_alignment( GTK_MISC(label), 1.0, 0.5 ); + gtk_table_attach_defaults( GTK_TABLE(main_tb), label, 0, 1, 4, 5 ); + + /* Create a menu */ + scrollbar_menu = gtk_menu_new(); + menu_item_0 = gtk_menu_item_new_with_label("None"); + menu_item_1 = gtk_menu_item_new_with_label("Square"); + menu_item_2 = gtk_menu_item_new_with_label("Triangle"); + menu_item_3 = gtk_menu_item_new_with_label("Circular"); + gtk_menu_append( GTK_MENU(scrollbar_menu), menu_item_0 ); + gtk_menu_append( GTK_MENU(scrollbar_menu), menu_item_1 ); + gtk_menu_append( GTK_MENU(scrollbar_menu), menu_item_2 ); + gtk_menu_append( GTK_MENU(scrollbar_menu), menu_item_3 ); + + gtk_signal_connect( GTK_OBJECT(menu_item_0), "activate", + ptree_expander_style_cb, GINT_TO_POINTER(0) ); + gtk_signal_connect( GTK_OBJECT(menu_item_1), "activate", + ptree_expander_style_cb, GINT_TO_POINTER(1) ); + gtk_signal_connect( GTK_OBJECT(menu_item_2), "activate", + ptree_expander_style_cb, GINT_TO_POINTER(2) ); + gtk_signal_connect( GTK_OBJECT(menu_item_3), "activate", + ptree_expander_style_cb, GINT_TO_POINTER(3) ); + + /* Create the option menu from the option */ + scrollbar_option_menu = gtk_option_menu_new(); + gtk_option_menu_set_menu( GTK_OPTION_MENU(scrollbar_option_menu), + scrollbar_menu ); + gtk_option_menu_set_history( GTK_OPTION_MENU(scrollbar_option_menu), + temp_gui_ptree_expander_style); + gtk_table_attach_defaults( GTK_TABLE(main_tb), scrollbar_option_menu, + 1, 2, 4, 5 ); + /* Show 'em what we got */ gtk_widget_show_all(main_vb); @@ -182,12 +262,34 @@ ptree_sel_browse_cb(GtkWidget *w, gpointer data) set_ptree_sel_browse(value); } +static void +ptree_line_style_cb(GtkWidget *w, gpointer data) +{ + gint value = GPOINTER_TO_INT(data); + + temp_gui_ptree_line_style = value; + set_ptree_line_style(value); +} + +static void +ptree_expander_style_cb(GtkWidget *w, gpointer data) +{ + gint value = GPOINTER_TO_INT(data); + + temp_gui_ptree_expander_style = value; + set_ptree_expander_style(value); +} + + void gui_prefs_ok(GtkWidget *w) { prefs.gui_scrollbar_on_right = temp_gui_scrollbar_on_right; prefs.gui_plist_sel_browse = temp_gui_plist_sel_browse; prefs.gui_ptree_sel_browse = temp_gui_ptree_sel_browse; + prefs.gui_ptree_line_style = temp_gui_ptree_line_style; + prefs.gui_ptree_expander_style = temp_gui_ptree_expander_style; + gui_prefs_delete(w); } @@ -205,10 +307,14 @@ gui_prefs_cancel(GtkWidget *w) temp_gui_scrollbar_on_right = prefs.gui_scrollbar_on_right; temp_gui_plist_sel_browse = prefs.gui_plist_sel_browse; temp_gui_ptree_sel_browse = prefs.gui_ptree_sel_browse; + temp_gui_ptree_line_style = prefs.gui_ptree_line_style; + temp_gui_ptree_expander_style = prefs.gui_ptree_expander_style; set_scrollbar_placement(prefs.gui_scrollbar_on_right); set_plist_sel_browse(prefs.gui_plist_sel_browse); set_ptree_sel_browse(prefs.gui_ptree_sel_browse); + set_ptree_line_style(prefs.gui_ptree_line_style); + set_ptree_expander_style(prefs.gui_ptree_expander_style); gui_prefs_delete(w); } diff --git a/gtk/main.c b/gtk/main.c index ae98bfafe0..f62894178f 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -1,6 +1,6 @@ /* main.c * - * $Id: main.c,v 1.78 1999/12/30 19:53:11 gram Exp $ + * $Id: main.c,v 1.79 1999/12/30 23:02:56 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -815,6 +815,29 @@ set_ptree_sel_browse(gboolean val) } void +set_ptree_line_style(gint style) +{ + /* I'm using an assert here since the preferences code limits + * the user input, both in the GUI and when reading the preferences file. + * If the value is incorrect, it's a program error, not a user-initiated error. + */ + g_assert(style >= GTK_CTREE_LINES_NONE && style <= GTK_CTREE_LINES_TABBED); + gtk_ctree_set_line_style( GTK_CTREE(tree_view), style ); +} + +void +set_ptree_expander_style(gint style) +{ + /* I'm using an assert here since the preferences code limits + * the user input, both in the GUI and when reading the preferences file. + * If the value is incorrect, it's a program error, not a user-initiated error. + */ + g_assert(style >= GTK_CTREE_EXPANDER_NONE && style <= GTK_CTREE_EXPANDER_CIRCULAR); + gtk_ctree_set_expander_style( GTK_CTREE(tree_view), style ); +} + + +void file_quit_cmd_cb (GtkWidget *widget, gpointer data) { /* If we have a capture file open, and it's a temporary file, unlink it. */ @@ -1284,11 +1307,14 @@ main(int argc, char *argv[]) gtk_widget_show(tv_scrollw); tree_view = gtk_ctree_new(1, 0); + /* I need this next line to make the widget work correctly with hidden + * column titles and GTK_SELECTION_BROWSE */ gtk_clist_set_column_auto_resize( GTK_CLIST(tree_view), 0, TRUE ); - gtk_container_add(GTK_CONTAINER(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_container_add( GTK_CONTAINER(tv_scrollw), tree_view ); set_ptree_sel_browse(prefs->gui_ptree_sel_browse); + set_ptree_line_style(prefs->gui_ptree_line_style); + set_ptree_expander_style(prefs->gui_ptree_expander_style); + gtk_signal_connect(GTK_OBJECT(tree_view), "tree-select-row", GTK_SIGNAL_FUNC(tree_view_select_row_cb), NULL); gtk_signal_connect(GTK_OBJECT(tree_view), "tree-unselect-row", @@ -1,7 +1,7 @@ /* prefs.c * Routines for handling preferences * - * $Id: prefs.c,v 1.27 1999/12/29 20:09:46 gram Exp $ + * $Id: prefs.c,v 1.28 1999/12/30 23:02:38 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -65,6 +65,13 @@ static gchar *pf_path = NULL; e_prefs prefs; +gchar *gui_ptree_line_style_text[] = + { "NONE", "SOLID", "DOTTED", "TABBED", NULL }; + +gchar *gui_ptree_expander_style_text[] = + { "NONE", "SQUARE", "TRIANGLE", "CIRCULAR", NULL }; + + /* Parse through a list of comma-separated, quoted strings. Return a list of the string data */ static GList * @@ -122,6 +129,25 @@ clear_string_list(GList *sl) { } } +/* Takes an string and a pointer to an array of strings, and a default int value. + * The array must be terminated by a NULL string. If the string is found in the array + * of strings, the index of that string in the array is returned. Otherwise, the + * default value that was passed as the third argument is returned. + */ +static int +find_index_from_string_array(char *needle, char **haystack, int default_value) +{ + int i = 0; + + while (haystack[i] != NULL) { + if (strcmp(needle, haystack[i]) == 0) { + return i; + } + i++; + } + return default_value; +} + /* Preferences file format: * - Configuration directives start at the beginning of the line, and * are terminated with a colon. @@ -137,8 +163,9 @@ print.file: /a/very/long/path/ * */ -#define MAX_VAR_LEN 32 +#define MAX_VAR_LEN 48 #define MAX_VAL_LEN 1024 + #define DEF_NUM_COLS 6 e_prefs * read_prefs(char **pf_path_return) { @@ -189,6 +216,8 @@ read_prefs(char **pf_path_return) { prefs.gui_scrollbar_on_right = TRUE; prefs.gui_plist_sel_browse = FALSE; prefs.gui_ptree_sel_browse = FALSE; + prefs.gui_ptree_line_style = 0; + prefs.gui_ptree_expander_style = 1; } if (! pf_path) { @@ -305,6 +334,8 @@ read_prefs(char **pf_path_return) { #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_PTREE_LINE_STYLE "gui.protocol_tree_line_style" +#define PRS_GUI_PTREE_EXPANDER_STYLE "gui.protocol_tree_expander_style" #define RED_COMPONENT(x) ((((x) >> 16) & 0xff) * 65535 / 255) #define GREEN_COMPONENT(x) ((((x) >> 8) & 0xff) * 65535 / 255) @@ -410,7 +441,12 @@ set_pref(gchar *pref, gchar *value) { else { prefs.gui_ptree_sel_browse = FALSE; } - + } else if (strcmp(pref, PRS_GUI_PTREE_LINE_STYLE) == 0) { + prefs.gui_ptree_line_style = + find_index_from_string_array(value, gui_ptree_line_style_text, 0); + } else if (strcmp(pref, PRS_GUI_PTREE_EXPANDER_STYLE) == 0) { + prefs.gui_ptree_expander_style = + find_index_from_string_array(value, gui_ptree_expander_style_text, 1); } else { return 0; } @@ -505,5 +541,14 @@ write_prefs(void) { fprintf(pf, "\n# Protocol-tree selection bar can be used to browse w/o selecting? TRUE/FALSE\n"); fprintf(pf, PRS_GUI_PTREE_SEL_BROWSE ": %s\n", prefs.gui_ptree_sel_browse == 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]); + + fprintf(pf, "\n# Protocol-tree expander style. One of: NONE, SQUARE, TRIANGLE, CIRCULAR\n"); + fprintf(pf, PRS_GUI_PTREE_EXPANDER_STYLE ": %s\n", + gui_ptree_expander_style_text[prefs.gui_ptree_expander_style]); + fclose(pf); } @@ -1,7 +1,7 @@ /* prefs.h * Definitions for preference handling routines * - * $Id: prefs.h,v 1.12 1999/12/29 20:09:47 gram Exp $ + * $Id: prefs.h,v 1.13 1999/12/30 23:02:39 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -47,6 +47,8 @@ typedef struct _e_prefs { gboolean gui_scrollbar_on_right; gboolean gui_plist_sel_browse; gboolean gui_ptree_sel_browse; + gint gui_ptree_line_style; + gint gui_ptree_expander_style; } e_prefs; extern e_prefs prefs; |