diff options
author | Ulf Lamping <ulf.lamping@web.de> | 2004-04-22 21:31:09 +0000 |
---|---|---|
committer | Ulf Lamping <ulf.lamping@web.de> | 2004-04-22 21:31:09 +0000 |
commit | 3b86a98d539adc668771db420b49bacd8c11c205 (patch) | |
tree | cd68f711934e423f9fb998b04dfe81392bf65e5e /gtk | |
parent | aae50cae26c8402e60cfaed09c63b5a2d5247a93 (diff) |
seperated common packet range code from the save and the print dialog,
and put it into new range_utils files. This will avoid:
a) duplicate code in save and print dialog and
b) yet another code duplication for future dialogs (export, ...)
svn path=/trunk/; revision=10665
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/Makefile.am | 3 | ||||
-rw-r--r-- | gtk/Makefile.common | 3 | ||||
-rw-r--r-- | gtk/file_dlg.c | 303 | ||||
-rw-r--r-- | gtk/print_dlg.c | 320 | ||||
-rw-r--r-- | gtk/range_utils.c | 467 | ||||
-rw-r--r-- | gtk/range_utils.h | 46 |
6 files changed, 531 insertions, 611 deletions
diff --git a/gtk/Makefile.am b/gtk/Makefile.am index 9d605e4530..2d4649541a 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -1,7 +1,7 @@ # Makefile.am # Automake file for the GTK interface routines for Ethereal # -# $Id: Makefile.am,v 1.93 2004/02/22 19:48:10 ulfl Exp $ +# $Id: Makefile.am,v 1.94 2004/04/22 21:29:34 ulfl Exp $ # # Ethereal - Network traffic analyzer # By Gerald Combs <gerald@ethereal.com> @@ -68,6 +68,7 @@ noinst_HEADERS = \ proto_dlg.h \ proto_draw.h \ proto_hier_stats_dlg.h \ + range_utils.h \ recent.h \ rtp_analysis.h \ rtp_stream.h \ diff --git a/gtk/Makefile.common b/gtk/Makefile.common index e816230527..a1e1a4b68e 100644 --- a/gtk/Makefile.common +++ b/gtk/Makefile.common @@ -3,7 +3,7 @@ # a) common to both files and # b) portable between both files # -# $Id: Makefile.common,v 1.10 2004/04/21 05:53:59 guy Exp $ +# $Id: Makefile.common,v 1.11 2004/04/22 21:29:34 ulfl Exp $ # # Ethereal - Network traffic analyzer # By Gerald Combs <gerald@ethereal.com> @@ -65,6 +65,7 @@ ETHEREAL_GTK_SRC = \ proto_dlg.c \ proto_draw.c \ proto_hier_stats_dlg.c \ + range_utils.c \ recent.c \ rtp_stream.c \ service_response_time_table.c \ diff --git a/gtk/file_dlg.c b/gtk/file_dlg.c index ac86f5f2ee..74423c6a16 100644 --- a/gtk/file_dlg.c +++ b/gtk/file_dlg.c @@ -1,7 +1,7 @@ /* file_dlg.c * Dialog boxes for handling files * - * $Id: file_dlg.c,v 1.102 2004/03/29 22:55:13 guy Exp $ + * $Id: file_dlg.c,v 1.103 2004/04/22 21:29:33 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -52,6 +52,7 @@ #include "gtk/color_dlg.h" #ifdef HAVE_LIBPCAP #include "capture_dlg.h" +#include "range_utils.h" #endif @@ -553,26 +554,9 @@ file_save_cmd_cb(GtkWidget *w, gpointer data) { static packet_range_t range; static gboolean color_marked; static int filetype; -static GtkWidget *captured_bt; -static GtkWidget *displayed_bt; -static GtkWidget *select_all_rb; -static GtkWidget *select_all_c_lb; -static GtkWidget *select_all_d_lb; -static GtkWidget *select_curr_rb; -static GtkWidget *select_curr_c_lb; -static GtkWidget *select_curr_d_lb; -static GtkWidget *select_marked_only_rb; -static GtkWidget *select_marked_only_c_lb; -static GtkWidget *select_marked_only_d_lb; -static GtkWidget *select_marked_range_rb; -static GtkWidget *select_marked_range_c_lb; -static GtkWidget *select_marked_range_d_lb; -static GtkWidget *select_user_range_rb; -static GtkWidget *select_user_range_c_lb; -static GtkWidget *select_user_range_d_lb; -static GtkWidget *select_user_range_entry; static GtkWidget *cfmark_cb; static GtkWidget *ft_om; +static GtkWidget *range_tb; static gboolean can_save_with_wiretap(int ft) @@ -583,61 +567,6 @@ can_save_with_wiretap(int ft) return wtap_dump_can_open(ft) && wtap_dump_can_write_encap(ft, cfile.lnk_t); } -static void -file_set_save_dynamics(void) { - gboolean filtered_active; - gchar label_text[100]; - gint selected_num; - - - filtered_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(displayed_bt)); - - gtk_widget_set_sensitive(displayed_bt, can_save_with_wiretap(filetype)); - - gtk_widget_set_sensitive(select_all_c_lb, !filtered_active); - g_snprintf(label_text, sizeof(label_text), "%u", cfile.count); - gtk_label_set_text(GTK_LABEL(select_all_c_lb), label_text); - gtk_widget_set_sensitive(select_all_d_lb, filtered_active); - g_snprintf(label_text, sizeof(label_text), "%u", range.displayed_cnt); - - gtk_label_set_text(GTK_LABEL(select_all_d_lb), label_text); - - selected_num = (cfile.current_frame) ? cfile.current_frame->num : 0; - /* XXX: how to update the radio button label but keep the mnemonic? */ -/* g_snprintf(label_text, sizeof(label_text), "_Selected packet #%u only", selected_num); - gtk_label_set_text(GTK_LABEL(GTK_BIN(select_curr_rb)->child), label_text);*/ - gtk_widget_set_sensitive(select_curr_rb, selected_num); - g_snprintf(label_text, sizeof(label_text), "%u", selected_num ? 1 : 0); - gtk_label_set_text(GTK_LABEL(select_curr_c_lb), label_text); - gtk_widget_set_sensitive(select_curr_c_lb, selected_num && !filtered_active); - g_snprintf(label_text, sizeof(label_text), "%u", selected_num ? 1 : 0); - gtk_label_set_text(GTK_LABEL(select_curr_d_lb), label_text); - gtk_widget_set_sensitive(select_curr_d_lb, selected_num && filtered_active); - - gtk_widget_set_sensitive(select_marked_only_rb, cfile.marked_count); - g_snprintf(label_text, sizeof(label_text), "%u", cfile.marked_count); - gtk_label_set_text(GTK_LABEL(select_marked_only_c_lb), label_text); - gtk_widget_set_sensitive(select_marked_only_c_lb, cfile.marked_count && !filtered_active); - g_snprintf(label_text, sizeof(label_text), "%u", range.displayed_marked_cnt); - gtk_label_set_text(GTK_LABEL(select_marked_only_d_lb), label_text); - gtk_widget_set_sensitive(select_marked_only_d_lb, range.displayed_marked_cnt && filtered_active); - - gtk_widget_set_sensitive(select_marked_range_rb, range.mark_range_cnt); - g_snprintf(label_text, sizeof(label_text), "%u", range.mark_range_cnt); - gtk_label_set_text(GTK_LABEL(select_marked_range_c_lb), label_text); - gtk_widget_set_sensitive(select_marked_range_c_lb, range.mark_range_cnt && !filtered_active); - g_snprintf(label_text, sizeof(label_text), "%u", range.displayed_mark_range_cnt); - gtk_label_set_text(GTK_LABEL(select_marked_range_d_lb), label_text); - gtk_widget_set_sensitive(select_marked_range_d_lb, range.displayed_mark_range_cnt && filtered_active); - - gtk_widget_set_sensitive(select_user_range_rb, TRUE); - g_snprintf(label_text, sizeof(label_text), "%u", range.user_range_cnt); - gtk_label_set_text(GTK_LABEL(select_user_range_c_lb), label_text); - gtk_widget_set_sensitive(select_user_range_c_lb, !filtered_active); - g_snprintf(label_text, sizeof(label_text), "%u", range.displayed_user_range_cnt); - gtk_label_set_text(GTK_LABEL(select_user_range_d_lb), label_text); - gtk_widget_set_sensitive(select_user_range_d_lb, filtered_active); -} /* Generate a list of the file types we can save this file as. @@ -701,116 +630,12 @@ select_file_type_cb(GtkWidget *w _U_, gpointer data) if (filetype != new_filetype) { /* We can select only the filtered or marked packets to be saved if we can use Wiretap to save the file. */ - gtk_widget_set_sensitive(displayed_bt, can_save_with_wiretap(new_filetype)); + range_set_displayed_sensitive(range_tb, can_save_with_wiretap(new_filetype)); filetype = new_filetype; file_set_save_marked_sensitive(); } } -static void -toggle_captured_cb(GtkWidget *widget, gpointer data _U_) -{ - /* is the button now active? */ - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))) { - /* They changed the state of the "captured" button. */ - range.process_filtered = FALSE; - /* XXX: the following line fails, I have no idea why */ - /* set_file_type_list(ft_om);*/ - - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(captured_bt), TRUE); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(displayed_bt), FALSE); - - file_set_save_dynamics(); - } -} - -static void -toggle_filtered_cb(GtkWidget *widget, gpointer data _U_) -{ - /* is the button now active? */ - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))) { - range.process_filtered = TRUE; - set_file_type_list(ft_om); - - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(captured_bt), FALSE); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(displayed_bt), TRUE); - - file_set_save_dynamics(); - } -} - -static void -toggle_select_all(GtkWidget *widget, gpointer data _U_) -{ - /* is the button now active? */ - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))) { - range.process = range_process_all; - set_file_type_list(ft_om); - file_set_save_dynamics(); - } -} - -static void -toggle_select_selected(GtkWidget *widget, gpointer data _U_) -{ - /* is the button now active? */ - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))) { - range.process = range_process_selected; - set_file_type_list(ft_om); - file_set_save_dynamics(); - } -} - -static void -toggle_select_marked_only(GtkWidget *widget, gpointer data _U_) -{ - /* is the button now active? */ - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))) { - range.process = range_process_marked; - set_file_type_list(ft_om); - file_set_save_dynamics(); - } -} - -static void -toggle_select_marked_range(GtkWidget *widget, gpointer data _U_) -{ - /* is the button now active? */ - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))) { - range.process = range_process_marked_range; - set_file_type_list(ft_om); - file_set_save_dynamics(); - } -} - -static void -toggle_select_user_range(GtkWidget *widget, gpointer data _U_) -{ - /* is the button now active? */ - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))) { - range.process = range_process_user_range; - set_file_type_list(ft_om); - file_set_save_dynamics(); - } - - /* Make the entry widget sensitive or insensitive */ - gtk_widget_set_sensitive(select_user_range_entry, range.process == range_process_user_range); - - /* When selecting user specified range, then focus on the entry */ - if (range.process == range_process_user_range) - gtk_widget_grab_focus(select_user_range_entry); - -} - -static void -range_entry(GtkWidget *entry) -{ - const gchar *entry_text; - - entry_text = gtk_entry_get_text (GTK_ENTRY (entry)); - packet_range_convert_str(&range, entry_text); - file_set_save_dynamics(); -} /* * Set the "Save only marked packets" toggle button as appropriate for @@ -830,22 +655,19 @@ file_set_save_marked_sensitive(void) /* We can request that only the marked packets be saved only if we can use Wiretap to save the file and if there *are* marked packets. */ if (can_save_with_wiretap(filetype) && cfile.marked_count != 0) { - gtk_widget_set_sensitive(select_marked_only_rb, TRUE); - gtk_widget_set_sensitive(select_marked_range_rb, TRUE); + range_set_marked_sensitive(range_tb, TRUE); } else { /* Force the "Save only marked packets" toggle to "false", turn off the flag it controls, and update the list of types we can save the file as. */ range.process = range_process_all; - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(select_marked_only_rb), FALSE); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(select_marked_range_rb), FALSE); set_file_type_list(ft_om); - gtk_widget_set_sensitive(select_marked_only_rb, FALSE); - gtk_widget_set_sensitive(select_marked_range_rb, FALSE); + range_set_marked_sensitive(range_tb, FALSE); } } + action_after_save_e action_after_save_g; gpointer action_after_save_data_g; @@ -853,7 +675,7 @@ gpointer action_after_save_data_g; void file_save_as_cmd(action_after_save_e action_after_save, gpointer action_after_save_data) { - GtkWidget *main_vb, *ft_hb, *ft_lb, *range_fr, *range_tb; + GtkWidget *main_vb, *ft_hb, *ft_lb, *range_fr; GtkTooltips *tooltips; #if GTK_MAJOR_VERSION < 2 @@ -908,115 +730,10 @@ file_save_as_cmd(action_after_save_e action_after_save, gpointer action_after_sa gtk_widget_show(range_fr); /* range table */ - range_tb = gtk_table_new(7, 3, FALSE); - gtk_container_border_width(GTK_CONTAINER(range_tb), 5); + range_tb = range_new(&range); gtk_container_add(GTK_CONTAINER(range_fr), range_tb); gtk_widget_show(range_tb); - /* captured button */ - captured_bt = TOGGLE_BUTTON_NEW_WITH_MNEMONIC("_Captured", accel_group); - gtk_table_attach_defaults(GTK_TABLE(range_tb), captured_bt, 1, 2, 0, 1); - SIGNAL_CONNECT(captured_bt, "toggled", toggle_captured_cb, NULL); - gtk_tooltips_set_tip (tooltips,captured_bt,("Process all the below chosen packets"), NULL); - gtk_widget_show(captured_bt); - - /* displayed button */ - displayed_bt = TOGGLE_BUTTON_NEW_WITH_MNEMONIC("_Displayed", accel_group); - gtk_table_attach_defaults(GTK_TABLE(range_tb), displayed_bt, 2, 3, 0, 1); - SIGNAL_CONNECT(displayed_bt, "toggled", toggle_filtered_cb, NULL); - gtk_tooltips_set_tip (tooltips,displayed_bt,("Process only the below chosen packets, which also passes the current display filter"), NULL); - gtk_widget_show(displayed_bt); - - - /* Process all packets */ - select_all_rb = RADIO_BUTTON_NEW_WITH_MNEMONIC(NULL, "_All packets", accel_group); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_all_rb, 0, 1, 1, 2); - gtk_tooltips_set_tip (tooltips,select_all_rb,("Process all packets"), NULL); - SIGNAL_CONNECT(select_all_rb, "toggled", toggle_select_all, NULL); - gtk_widget_show(select_all_rb); - - select_all_c_lb = gtk_label_new("?"); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_all_c_lb, 1, 2, 1, 2); - gtk_widget_show(select_all_c_lb); - select_all_d_lb = gtk_label_new("?"); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_all_d_lb, 2, 3, 1, 2); - gtk_widget_show(select_all_d_lb); - - - /* Process currently selected */ - select_curr_rb = RADIO_BUTTON_NEW_WITH_MNEMONIC(select_all_rb, "_Selected packet only", accel_group); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_curr_rb, 0, 1, 2, 3); - gtk_tooltips_set_tip (tooltips,select_curr_rb,("Process the currently selected packet only"), NULL); - SIGNAL_CONNECT(select_curr_rb, "toggled", toggle_select_selected, NULL); - gtk_widget_show(select_curr_rb); - - select_curr_c_lb = gtk_label_new("?"); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_curr_c_lb, 1, 2, 2, 3); - gtk_widget_show(select_curr_c_lb); - select_curr_d_lb = gtk_label_new("?"); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_curr_d_lb, 2, 3, 2, 3); - gtk_widget_show(select_curr_d_lb); - - - /* Process marked packets */ - select_marked_only_rb = RADIO_BUTTON_NEW_WITH_MNEMONIC(select_all_rb, "_Marked packets only", accel_group); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_marked_only_rb, 0, 1, 3, 4); - gtk_tooltips_set_tip (tooltips,select_marked_only_rb,("Process marked packets only"), NULL); - SIGNAL_CONNECT(select_marked_only_rb, "toggled", toggle_select_marked_only, NULL); - gtk_widget_show(select_marked_only_rb); - - select_marked_only_c_lb = gtk_label_new("?"); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_marked_only_c_lb, 1, 2, 3, 4); - gtk_widget_show(select_marked_only_c_lb); - select_marked_only_d_lb = gtk_label_new("?"); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_marked_only_d_lb, 2, 3, 3, 4); - gtk_widget_show(select_marked_only_d_lb); - - - /* Process packet range between first and last packet */ - select_marked_range_rb = RADIO_BUTTON_NEW_WITH_MNEMONIC(select_all_rb, "From first _to last marked packet", accel_group); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_marked_range_rb, 0, 1, 4, 5); - gtk_tooltips_set_tip (tooltips,select_marked_range_rb,("Process all packets between the first and last marker"), NULL); - SIGNAL_CONNECT(select_marked_range_rb, "toggled", toggle_select_marked_range, NULL); - gtk_widget_show(select_marked_range_rb); - - select_marked_range_c_lb = gtk_label_new("?"); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_marked_range_c_lb, 1, 2, 4, 5); - gtk_widget_show(select_marked_range_c_lb); - select_marked_range_d_lb = gtk_label_new("?"); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_marked_range_d_lb, 2, 3, 4, 5); - gtk_widget_show(select_marked_range_d_lb); - - - /* Process a user specified provided packet range : -10,30,40-70,80- */ - select_user_range_rb = RADIO_BUTTON_NEW_WITH_MNEMONIC(select_all_rb, "Specify a packet _range:", accel_group); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_user_range_rb, 0, 1, 5, 6); - gtk_tooltips_set_tip (tooltips,select_user_range_rb,("Process a specified packet range"), NULL); - SIGNAL_CONNECT(select_user_range_rb, "toggled", toggle_select_user_range, NULL); - gtk_widget_show(select_user_range_rb); - - select_user_range_c_lb = gtk_label_new("?"); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_user_range_c_lb, 1, 2, 5, 6); - gtk_widget_show(select_user_range_c_lb); - select_user_range_d_lb = gtk_label_new("?"); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_user_range_d_lb, 2, 3, 5, 6); - gtk_widget_show(select_user_range_d_lb); - - - /* The entry part */ - select_user_range_entry = gtk_entry_new(); - gtk_entry_set_max_length (GTK_ENTRY (select_user_range_entry), 254); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_user_range_entry, 0, 1, 6, 7); - gtk_tooltips_set_tip (tooltips,select_user_range_entry, - ("Specify a range of packet numbers : \nExample : 1-10,18,25-100,332-"), NULL); - SIGNAL_CONNECT(select_user_range_entry,"changed", range_entry, select_user_range_entry); - gtk_widget_set_sensitive(select_user_range_entry, FALSE); - gtk_widget_show(select_user_range_entry); - - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(captured_bt), TRUE); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(displayed_bt), FALSE); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(select_all_rb), TRUE); - /* File type row */ ft_hb = gtk_hbox_new(FALSE, 3); gtk_container_add(GTK_CONTAINER(main_vb), ft_hb); @@ -1043,7 +760,7 @@ file_save_as_cmd(action_after_save_e action_after_save, gpointer action_after_sa file_set_save_marked_sensitive(); /* dynamic values in the range frame */ - file_set_save_dynamics(); + range_update_dynamics(range_tb); #if (GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION >= 4) || GTK_MAJOR_VERSION > 2 if (gtk_dialog_run(GTK_DIALOG(file_save_as_w)) == GTK_RESPONSE_ACCEPT) diff --git a/gtk/print_dlg.c b/gtk/print_dlg.c index fd78bb0af9..858f8ec5c1 100644 --- a/gtk/print_dlg.c +++ b/gtk/print_dlg.c @@ -1,7 +1,7 @@ /* print_dlg.c * Dialog boxes for printing * - * $Id: print_dlg.c,v 1.68 2004/04/22 17:03:21 ulfl Exp $ + * $Id: print_dlg.c,v 1.69 2004/04/22 21:31:09 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -47,6 +47,7 @@ #include "print_mswin.h" #endif #include "compat_macros.h" +#include "range_utils.h" /* On Win32, a GUI application apparently can't use "popen()" (it @@ -96,27 +97,6 @@ static gchar * print_cmd; #define PRINT_BT_KEY "printer_button" -/* XXX - can we make these not be static? */ -static packet_range_t range; -static GtkWidget *captured_bt; -static GtkWidget *displayed_bt; -static GtkWidget *select_all_rb; -static GtkWidget *select_all_c_lb; -static GtkWidget *select_all_d_lb; -static GtkWidget *select_curr_rb; -static GtkWidget *select_curr_c_lb; -static GtkWidget *select_curr_d_lb; -static GtkWidget *select_marked_only_rb; -static GtkWidget *select_marked_only_c_lb; -static GtkWidget *select_marked_only_d_lb; -static GtkWidget *select_marked_range_rb; -static GtkWidget *select_marked_range_c_lb; -static GtkWidget *select_marked_range_d_lb; -static GtkWidget *select_user_range_rb; -static GtkWidget *select_user_range_c_lb; -static GtkWidget *select_user_range_d_lb; -static GtkWidget *select_user_range_entry; - /* * Keep a static pointer to the current "Print" window, if any, so that if * somebody tries to do "File:Print" while there's already a "Print" window @@ -124,192 +104,8 @@ static GtkWidget *select_user_range_entry; */ static GtkWidget *print_w; -static void -file_set_print_dynamics(void) { - gboolean filtered_active; - gchar label_text[100]; - gint selected_num; - - - filtered_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(displayed_bt)); - - gtk_widget_set_sensitive(displayed_bt, TRUE); - - gtk_widget_set_sensitive(select_all_c_lb, !filtered_active); - g_snprintf(label_text, sizeof(label_text), "%u", cfile.count); - gtk_label_set_text(GTK_LABEL(select_all_c_lb), label_text); - gtk_widget_set_sensitive(select_all_d_lb, filtered_active); - g_snprintf(label_text, sizeof(label_text), "%u", range.displayed_cnt); - - gtk_label_set_text(GTK_LABEL(select_all_d_lb), label_text); - - selected_num = (cfile.current_frame) ? cfile.current_frame->num : 0; - /* XXX: how to update the radio button label but keep the mnemonic? */ -/* g_snprintf(label_text, sizeof(label_text), "_Selected packet #%u only", selected_num); - gtk_label_set_text(GTK_LABEL(GTK_BIN(select_curr_rb)->child), label_text);*/ - gtk_widget_set_sensitive(select_curr_rb, selected_num); - g_snprintf(label_text, sizeof(label_text), "%u", selected_num ? 1 : 0); - gtk_label_set_text(GTK_LABEL(select_curr_c_lb), label_text); - gtk_widget_set_sensitive(select_curr_c_lb, selected_num && !filtered_active); - g_snprintf(label_text, sizeof(label_text), "%u", selected_num ? 1 : 0); - gtk_label_set_text(GTK_LABEL(select_curr_d_lb), label_text); - gtk_widget_set_sensitive(select_curr_d_lb, selected_num && filtered_active); - - gtk_widget_set_sensitive(select_marked_only_rb, cfile.marked_count); - g_snprintf(label_text, sizeof(label_text), "%u", cfile.marked_count); - gtk_label_set_text(GTK_LABEL(select_marked_only_c_lb), label_text); - gtk_widget_set_sensitive(select_marked_only_c_lb, cfile.marked_count && !filtered_active); - g_snprintf(label_text, sizeof(label_text), "%u", range.displayed_marked_cnt); - gtk_label_set_text(GTK_LABEL(select_marked_only_d_lb), label_text); - gtk_widget_set_sensitive(select_marked_only_d_lb, range.displayed_marked_cnt && filtered_active); - - gtk_widget_set_sensitive(select_marked_range_rb, range.mark_range_cnt); - g_snprintf(label_text, sizeof(label_text), "%u", range.mark_range_cnt); - gtk_label_set_text(GTK_LABEL(select_marked_range_c_lb), label_text); - gtk_widget_set_sensitive(select_marked_range_c_lb, range.mark_range_cnt && !filtered_active); - g_snprintf(label_text, sizeof(label_text), "%u", range.displayed_mark_range_cnt); - gtk_label_set_text(GTK_LABEL(select_marked_range_d_lb), label_text); - gtk_widget_set_sensitive(select_marked_range_d_lb, range.displayed_mark_range_cnt && filtered_active); - - gtk_widget_set_sensitive(select_user_range_rb, TRUE); - g_snprintf(label_text, sizeof(label_text), "%u", range.user_range_cnt); - gtk_label_set_text(GTK_LABEL(select_user_range_c_lb), label_text); - gtk_widget_set_sensitive(select_user_range_c_lb, !filtered_active); - g_snprintf(label_text, sizeof(label_text), "%u", range.displayed_user_range_cnt); - gtk_label_set_text(GTK_LABEL(select_user_range_d_lb), label_text); - gtk_widget_set_sensitive(select_user_range_d_lb, filtered_active); -} - - -static void -toggle_captured_cb(GtkWidget *widget, gpointer data _U_) -{ - /* is the button now active? */ - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))) { - /* They changed the state of the "captured" button. */ - range.process_filtered = FALSE; - /* XXX: the following line fails, I have no idea why */ - /* set_file_type_list(ft_om);*/ - - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(captured_bt), TRUE); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(displayed_bt), FALSE); - - file_set_print_dynamics(); - } -} - -static void -toggle_filtered_cb(GtkWidget *widget, gpointer data _U_) -{ - /* is the button now active? */ - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))) { - range.process_filtered = TRUE; - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(captured_bt), FALSE); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(displayed_bt), TRUE); - - file_set_print_dynamics(); - } -} - -static void -toggle_select_all(GtkWidget *widget, gpointer data _U_) -{ - /* is the button now active? */ - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))) { - range.process = range_process_all; - file_set_print_dynamics(); - } -} - -static void -toggle_select_selected(GtkWidget *widget, gpointer data _U_) -{ - /* is the button now active? */ - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))) { - range.process = range_process_selected; - file_set_print_dynamics(); - } -} - -static void -toggle_select_marked_only(GtkWidget *widget, gpointer data _U_) -{ - /* is the button now active? */ - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))) { - range.process = range_process_marked; - file_set_print_dynamics(); - } -} - -static void -toggle_select_marked_range(GtkWidget *widget, gpointer data _U_) -{ - /* is the button now active? */ - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))) { - range.process = range_process_marked_range; - file_set_print_dynamics(); - } -} - -static void -toggle_select_user_range(GtkWidget *widget, gpointer data _U_) -{ - /* is the button now active? */ - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))) { - range.process = range_process_user_range; - file_set_print_dynamics(); - } - - /* Make the entry widget sensitive or insensitive */ - gtk_widget_set_sensitive(select_user_range_entry, range.process == range_process_user_range); - - /* When selecting user specified range, then focus on the entry */ - if (range.process == range_process_user_range) - gtk_widget_grab_focus(select_user_range_entry); - -} - -static void -range_entry(GtkWidget *entry) -{ - const gchar *entry_text; +static packet_range_t range; - entry_text = gtk_entry_get_text (GTK_ENTRY (entry)); - packet_range_convert_str(&range, entry_text); - file_set_print_dynamics(); -} - -/* - * Set the "Print only marked packets" toggle button as appropriate for - * the current output file type and count of marked packets. - * - * Called when the "Print..." dialog box is created and when either - * the file type or the marked count changes. - */ -void -file_set_print_marked_sensitive(void) -{ - if (print_w == NULL) { - /* We don't currently have a "Print" dialog box up. */ - return; - } - - /* We can request that only the marked packets be printed only if we - if there *are* marked packets. */ - if (cfile.marked_count != 0) { - gtk_widget_set_sensitive(select_marked_only_rb, TRUE); - gtk_widget_set_sensitive(select_marked_range_rb, TRUE); - } - else { - /* Force the "Process only marked packets" toggle to "false", turn - off the flag it controls. */ - range.process = range_process_all; - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(select_marked_only_rb), FALSE); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(select_marked_range_rb), FALSE); - gtk_widget_set_sensitive(select_marked_only_rb, FALSE); - gtk_widget_set_sensitive(select_marked_range_rb, FALSE); - } -} /* Print the capture */ @@ -508,118 +304,10 @@ file_print_cmd_cb(GtkWidget *widget _U_, gpointer data _U_) gtk_box_pack_start(GTK_BOX(packet_hb), range_fr, FALSE, FALSE, 0); gtk_widget_show(range_fr); - /* range table */ - range_tb = gtk_table_new(7, 3, FALSE); - gtk_container_border_width(GTK_CONTAINER(range_tb), 5); + range_tb = range_new(&range); gtk_container_add(GTK_CONTAINER(range_fr), range_tb); gtk_widget_show(range_tb); - /* captured button */ - captured_bt = TOGGLE_BUTTON_NEW_WITH_MNEMONIC("_Captured", accel_group); - gtk_table_attach_defaults(GTK_TABLE(range_tb), captured_bt, 1, 2, 0, 1); - SIGNAL_CONNECT(captured_bt, "toggled", toggle_captured_cb, NULL); - gtk_tooltips_set_tip (tooltips,captured_bt,("Process all the below chosen packets"), NULL); - gtk_widget_show(captured_bt); - - /* displayed button */ - displayed_bt = TOGGLE_BUTTON_NEW_WITH_MNEMONIC("_Displayed", accel_group); - gtk_table_attach_defaults(GTK_TABLE(range_tb), displayed_bt, 2, 3, 0, 1); - SIGNAL_CONNECT(displayed_bt, "toggled", toggle_filtered_cb, NULL); - gtk_tooltips_set_tip (tooltips,displayed_bt,("Process only the below chosen packets, which also passes the current display filter"), NULL); - gtk_widget_show(displayed_bt); - - - /* Process all packets */ - select_all_rb = RADIO_BUTTON_NEW_WITH_MNEMONIC(NULL, "_All packets", accel_group); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_all_rb, 0, 1, 1, 2); - gtk_tooltips_set_tip (tooltips, select_all_rb, - ("Process all packets"), NULL); - SIGNAL_CONNECT(select_all_rb, "toggled", toggle_select_all, NULL); - gtk_widget_show(select_all_rb); - - select_all_c_lb = gtk_label_new("?"); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_all_c_lb, 1, 2, 1, 2); - gtk_widget_show(select_all_c_lb); - select_all_d_lb = gtk_label_new("?"); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_all_d_lb, 2, 3, 1, 2); - gtk_widget_show(select_all_d_lb); - - - /* Process currently selected */ - select_curr_rb = RADIO_BUTTON_NEW_WITH_MNEMONIC(select_all_rb, "_Selected packet only", accel_group); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_curr_rb, 0, 1, 2, 3); - gtk_tooltips_set_tip (tooltips, select_curr_rb, ("Process the currently selected packet only"), NULL); - SIGNAL_CONNECT(select_curr_rb, "toggled", toggle_select_selected, NULL); - gtk_widget_show(select_curr_rb); - - select_curr_c_lb = gtk_label_new("?"); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_curr_c_lb, 1, 2, 2, 3); - gtk_widget_show(select_curr_c_lb); - select_curr_d_lb = gtk_label_new("?"); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_curr_d_lb, 2, 3, 2, 3); - gtk_widget_show(select_curr_d_lb); - - - /* Process marked packets */ - select_marked_only_rb = RADIO_BUTTON_NEW_WITH_MNEMONIC(select_all_rb, "_Marked packets only", accel_group); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_marked_only_rb, 0, 1, 3, 4); - gtk_tooltips_set_tip (tooltips, select_marked_only_rb, ("Process marked packets only"), NULL); - SIGNAL_CONNECT(select_marked_only_rb, "toggled", toggle_select_marked_only, NULL); - gtk_widget_show(select_marked_only_rb); - - select_marked_only_c_lb = gtk_label_new("?"); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_marked_only_c_lb, 1, 2, 3, 4); - gtk_widget_show(select_marked_only_c_lb); - select_marked_only_d_lb = gtk_label_new("?"); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_marked_only_d_lb, 2, 3, 3, 4); - gtk_widget_show(select_marked_only_d_lb); - - - /* Process packet range between first and last packet */ - select_marked_range_rb = RADIO_BUTTON_NEW_WITH_MNEMONIC(select_all_rb, "From first _to last marked packet", accel_group); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_marked_range_rb, 0, 1, 4, 5); - gtk_tooltips_set_tip (tooltips,select_marked_range_rb,("Process all packets between the first and last marker"), NULL); - SIGNAL_CONNECT(select_marked_range_rb, "toggled", toggle_select_marked_range, NULL); - gtk_widget_show(select_marked_range_rb); - - select_marked_range_c_lb = gtk_label_new("?"); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_marked_range_c_lb, 1, 2, 4, 5); - gtk_widget_show(select_marked_range_c_lb); - select_marked_range_d_lb = gtk_label_new("?"); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_marked_range_d_lb, 2, 3, 4, 5); - gtk_widget_show(select_marked_range_d_lb); - - - /* Process a user specified provided packet range : -10,30,40-70,80- */ - select_user_range_rb = RADIO_BUTTON_NEW_WITH_MNEMONIC(select_all_rb, "Specify a packet _range:", accel_group); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_user_range_rb, 0, 1, 5, 6); - gtk_tooltips_set_tip (tooltips,select_user_range_rb,("Process a specified packet range"), NULL); - SIGNAL_CONNECT(select_user_range_rb, "toggled", toggle_select_user_range, NULL); - gtk_widget_show(select_user_range_rb); - - select_user_range_c_lb = gtk_label_new("?"); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_user_range_c_lb, 1, 2, 5, 6); - gtk_widget_show(select_user_range_c_lb); - select_user_range_d_lb = gtk_label_new("?"); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_user_range_d_lb, 2, 3, 5, 6); - gtk_widget_show(select_user_range_d_lb); - - - /* The entry part */ - select_user_range_entry = gtk_entry_new(); - gtk_entry_set_max_length (GTK_ENTRY (select_user_range_entry), 254); - gtk_table_attach_defaults(GTK_TABLE(range_tb), select_user_range_entry, 0, 1, 6, 7); - gtk_tooltips_set_tip (tooltips,select_user_range_entry, - ("Specify a range of packet numbers : \nExample : 1-10,18,25-100,332-"), NULL); - SIGNAL_CONNECT(select_user_range_entry,"changed", range_entry, select_user_range_entry); - gtk_widget_set_sensitive(select_user_range_entry, FALSE); - gtk_widget_show(select_user_range_entry); - - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(captured_bt), TRUE); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(displayed_bt), FALSE); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(select_all_rb), TRUE); - - /*****************************************************/ /*** packet format frame ***/ diff --git a/gtk/range_utils.c b/gtk/range_utils.c new file mode 100644 index 0000000000..855a16b8ab --- /dev/null +++ b/gtk/range_utils.c @@ -0,0 +1,467 @@ +/* range_utils.c + * Packet range routines (save, print, ...) for GTK things + * + * $Id: range_utils.c,v 1.1 2004/04/22 21:29:34 ulfl Exp $ + * + * Ulf Lamping <ulf.lamping@web.de> + * + * Ethereal - Network traffic analyzer + * By Gerald Combs <gerald@ethereal.com> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <gtk/gtk.h> + +#include "globals.h" + +#include "range.h" +#include "ui_util.h" +#include "dlg_utils.h" +#include "compat_macros.h" + + +#define RANGE_VALUES_KEY "range_values" +#define RANGE_CAPTURED_BT_KEY "range_captured_button" +#define RANGE_DISPLAYED_BT_KEY "range_displayed_button" + +#define RANGE_SELECT_ALL_C_KEY "range_select_all_c_lb" +#define RANGE_SELECT_ALL_D_KEY "range_select_all_d_lb" +#define RANGE_SELECT_CURR_KEY "range_select_curr_rb" +#define RANGE_SELECT_CURR_C_KEY "range_select_curr_c_lb" +#define RANGE_SELECT_CURR_D_KEY "range_select_curr_d_lb" +#define RANGE_SELECT_MARKED_KEY "range_select_marked_only_rb" +#define RANGE_SELECT_MARKED_C_KEY "range_select_marked_only_c_lb" +#define RANGE_SELECT_MARKED_D_KEY "range_select_marked_only_d_lb" +#define RANGE_SELECT_MARKED_RANGE_KEY "range_select_marked_range_rb" +#define RANGE_SELECT_MARKED_RANGE_C_KEY "range_select_marked_range_c_lb" +#define RANGE_SELECT_MARKED_RANGE_D_KEY "range_select_marked_range_d_lb" +#define RANGE_SELECT_USER_KEY "range_select_user_range_rb" +#define RANGE_SELECT_USER_C_KEY "range_select_user_range_c_lb" +#define RANGE_SELECT_USER_D_KEY "range_select_user_range_d_lb" +#define RANGE_SELECT_USER_ENTRY_KEY "range_select_user_range_entry" + + + +/* update all "dynamic" things */ +void +range_update_dynamics(gpointer data) { + gboolean filtered_active; + gchar label_text[100]; + gint selected_num; + GtkWidget *bt; + packet_range_t *range; + + + range = OBJECT_GET_DATA(data, RANGE_VALUES_KEY); + + + bt = OBJECT_GET_DATA(data, RANGE_DISPLAYED_BT_KEY); + filtered_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(bt)); + + gtk_widget_set_sensitive(bt, TRUE); + + gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_ALL_C_KEY), !filtered_active); + g_snprintf(label_text, sizeof(label_text), "%u", cfile.count); + gtk_label_set_text(GTK_LABEL(OBJECT_GET_DATA(data, RANGE_SELECT_ALL_C_KEY)), label_text); + gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_ALL_D_KEY), filtered_active); + g_snprintf(label_text, sizeof(label_text), "%u", range->displayed_cnt); + + gtk_label_set_text(GTK_LABEL(OBJECT_GET_DATA(data, RANGE_SELECT_ALL_D_KEY)), label_text); + + selected_num = (cfile.current_frame) ? cfile.current_frame->num : 0; + /* XXX: how to update the radio button label but keep the mnemonic? */ +/* g_snprintf(label_text, sizeof(label_text), "_Selected packet #%u only", selected_num); + gtk_label_set_text(GTK_LABEL(GTK_BIN(select_curr_rb)->child), label_text);*/ + gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_CURR_KEY), selected_num); + g_snprintf(label_text, sizeof(label_text), "%u", selected_num ? 1 : 0); + gtk_label_set_text(GTK_LABEL(OBJECT_GET_DATA(data, RANGE_SELECT_CURR_C_KEY)), label_text); + gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_CURR_C_KEY), selected_num && !filtered_active); + g_snprintf(label_text, sizeof(label_text), "%u", selected_num ? 1 : 0); + gtk_label_set_text(GTK_LABEL(OBJECT_GET_DATA(data, RANGE_SELECT_CURR_D_KEY)), label_text); + gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_CURR_D_KEY), selected_num && filtered_active); + + gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_MARKED_KEY), cfile.marked_count); + g_snprintf(label_text, sizeof(label_text), "%u", cfile.marked_count); + gtk_label_set_text(GTK_LABEL(OBJECT_GET_DATA(data, RANGE_SELECT_MARKED_C_KEY)), label_text); + gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_MARKED_C_KEY), cfile.marked_count && !filtered_active); + g_snprintf(label_text, sizeof(label_text), "%u", range->displayed_marked_cnt); + gtk_label_set_text(GTK_LABEL(OBJECT_GET_DATA(data, RANGE_SELECT_MARKED_D_KEY)), label_text); + gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_MARKED_D_KEY), range->displayed_marked_cnt && filtered_active); + + gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_MARKED_RANGE_KEY), range->mark_range_cnt); + g_snprintf(label_text, sizeof(label_text), "%u", range->mark_range_cnt); + gtk_label_set_text(GTK_LABEL(OBJECT_GET_DATA(data, RANGE_SELECT_MARKED_RANGE_C_KEY)), label_text); + gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_MARKED_RANGE_C_KEY), range->mark_range_cnt && !filtered_active); + g_snprintf(label_text, sizeof(label_text), "%u", range->displayed_mark_range_cnt); + gtk_label_set_text(GTK_LABEL(OBJECT_GET_DATA(data, RANGE_SELECT_MARKED_RANGE_D_KEY)), label_text); + gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_MARKED_RANGE_D_KEY), range->displayed_mark_range_cnt && filtered_active); + + gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_USER_KEY), TRUE); + g_snprintf(label_text, sizeof(label_text), "%u", range->user_range_cnt); + gtk_label_set_text(GTK_LABEL(OBJECT_GET_DATA(data, RANGE_SELECT_USER_C_KEY)), label_text); + gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_USER_C_KEY), !filtered_active); + g_snprintf(label_text, sizeof(label_text), "%u", range->displayed_user_range_cnt); + gtk_label_set_text(GTK_LABEL(OBJECT_GET_DATA(data, RANGE_SELECT_USER_D_KEY)), label_text); + gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_USER_D_KEY), filtered_active); +} + + +static void +toggle_captured_cb(GtkWidget *widget, gpointer data) +{ + GtkWidget *bt; + packet_range_t *range; + + + range = OBJECT_GET_DATA(data, RANGE_VALUES_KEY); + + /* is the button now active? */ + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))) { + /* They changed the state of the "captured" button. */ + range->process_filtered = FALSE; + + bt = OBJECT_GET_DATA(data, RANGE_CAPTURED_BT_KEY); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(bt), TRUE); + bt = OBJECT_GET_DATA(data, RANGE_DISPLAYED_BT_KEY); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(bt), FALSE); + + range_update_dynamics(data); + } +} + +static void +toggle_filtered_cb(GtkWidget *widget, gpointer data) +{ + GtkWidget *bt; + packet_range_t *range; + + + range = OBJECT_GET_DATA(data, RANGE_VALUES_KEY); + + /* is the button now active? */ + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))) { + range->process_filtered = TRUE; + bt = OBJECT_GET_DATA(data, RANGE_CAPTURED_BT_KEY); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(bt), FALSE); + bt = OBJECT_GET_DATA(data, RANGE_DISPLAYED_BT_KEY); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(bt), TRUE); + + range_update_dynamics(data); + } +} + +static void +toggle_select_all(GtkWidget *widget, gpointer data) +{ + packet_range_t *range; + + + range = OBJECT_GET_DATA(data, RANGE_VALUES_KEY); + + /* is the button now active? */ + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))) { + range->process = range_process_all; + range_update_dynamics(data); + } +} + +static void +toggle_select_selected(GtkWidget *widget, gpointer data) +{ + packet_range_t *range; + + + range = OBJECT_GET_DATA(data, RANGE_VALUES_KEY); + + /* is the button now active? */ + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))) { + range->process = range_process_selected; + range_update_dynamics(data); + } +} + +static void +toggle_select_marked_only(GtkWidget *widget, gpointer data) +{ + packet_range_t *range; + + + range = OBJECT_GET_DATA(data, RANGE_VALUES_KEY); + + /* is the button now active? */ + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))) { + range->process = range_process_marked; + range_update_dynamics(data); + } +} + +static void +toggle_select_marked_range(GtkWidget *widget, gpointer data) +{ + packet_range_t *range; + + + range = OBJECT_GET_DATA(data, RANGE_VALUES_KEY); + + /* is the button now active? */ + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))) { + range->process = range_process_marked_range; + range_update_dynamics(data); + } +} + +static void +toggle_select_user_range(GtkWidget *widget, gpointer data) +{ + packet_range_t *range; + + + range = OBJECT_GET_DATA(data, RANGE_VALUES_KEY); + + /* is the button now active? */ + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))) { + range->process = range_process_user_range; + range_update_dynamics(data); + } + + /* Make the entry widget sensitive or insensitive */ + gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_USER_ENTRY_KEY), range->process == range_process_user_range); + + /* When selecting user specified range, then focus on the entry */ + if (range->process == range_process_user_range) + gtk_widget_grab_focus(OBJECT_GET_DATA(data, RANGE_SELECT_USER_ENTRY_KEY)); + +} + + +static void +range_entry(GtkWidget *widget, gpointer data) +{ + const gchar *entry_text; + GtkWidget *entry; + packet_range_t *range; + + + range = OBJECT_GET_DATA(data, RANGE_VALUES_KEY); + entry = OBJECT_GET_DATA(data, RANGE_SELECT_USER_ENTRY_KEY); + + gtk_toggle_button_set_active(OBJECT_GET_DATA(data, RANGE_SELECT_USER_KEY), TRUE); + entry_text = gtk_entry_get_text (GTK_ENTRY (entry)); + packet_range_convert_str(range, entry_text); + range_update_dynamics(data); +} + + +static void +range_entry_in_event(GtkWidget *widget, GdkEventFocus *event, gpointer user_data) +{ + range_entry(widget, user_data); +} + + +/* set the "Process only marked packets" toggle button as appropriate */ +void +range_set_marked_sensitive(gpointer data, gboolean marked_valid) +{ + packet_range_t *range; + + + range = OBJECT_GET_DATA(data, RANGE_VALUES_KEY); + + /* We can request that only the marked packets be processed only if we + if there *are* marked packets. */ + if (marked_valid) { + gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_MARKED_KEY), TRUE); + gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_MARKED_RANGE_KEY), TRUE); + } + else { + /* Force the "Process only marked packets" toggle to "false", turn + off the flag it controls. */ + range->process = range_process_all; + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(OBJECT_GET_DATA(data, RANGE_SELECT_MARKED_KEY)), FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(OBJECT_GET_DATA(data, RANGE_SELECT_MARKED_RANGE_KEY)), FALSE); + gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_MARKED_KEY), FALSE); + gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_MARKED_RANGE_KEY), FALSE); + } +} + + +/* set the "displayed" button as appropriate */ +void +range_set_displayed_sensitive(gpointer data, gboolean displayed_valid) +{ + + gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_DISPLAYED_BT_KEY), displayed_valid); +} + + +/* create a new range "widget" */ +GtkWidget *range_new(packet_range_t *range +#if GTK_MAJOR_VERSION < 2 +, GtkAccelGroup *accel_group +#endif +) { + GtkWidget *range_tb; + GtkWidget *captured_bt; + GtkWidget *displayed_bt; + + GtkWidget *select_all_rb; + GtkWidget *select_all_c_lb; + GtkWidget *select_all_d_lb; + GtkWidget *select_curr_rb; + GtkWidget *select_curr_c_lb; + GtkWidget *select_curr_d_lb; + GtkWidget *select_marked_only_rb; + GtkWidget *select_marked_only_c_lb; + GtkWidget *select_marked_only_d_lb; + GtkWidget *select_marked_range_rb; + GtkWidget *select_marked_range_c_lb; + GtkWidget *select_marked_range_d_lb; + GtkWidget *select_user_range_rb; + GtkWidget *select_user_range_c_lb; + GtkWidget *select_user_range_d_lb; + GtkWidget *select_user_range_entry; + + GtkTooltips *tooltips; + + + /* Enable tooltips */ + tooltips = gtk_tooltips_new(); + + /* range table */ + range_tb = gtk_table_new(7, 3, FALSE); + gtk_container_border_width(GTK_CONTAINER(range_tb), 5); + + /* captured button */ + captured_bt = TOGGLE_BUTTON_NEW_WITH_MNEMONIC("_Captured", accel_group); + gtk_table_attach_defaults(GTK_TABLE(range_tb), captured_bt, 1, 2, 0, 1); + SIGNAL_CONNECT(captured_bt, "toggled", toggle_captured_cb, range_tb); + gtk_tooltips_set_tip (tooltips,captured_bt,("Process all the below chosen packets"), NULL); + + /* displayed button */ + displayed_bt = TOGGLE_BUTTON_NEW_WITH_MNEMONIC("_Displayed", accel_group); + gtk_table_attach_defaults(GTK_TABLE(range_tb), displayed_bt, 2, 3, 0, 1); + SIGNAL_CONNECT(displayed_bt, "toggled", toggle_filtered_cb, range_tb); + gtk_tooltips_set_tip (tooltips,displayed_bt,("Process only the below chosen packets, which also passes the current display filter"), NULL); + + + /* Process all packets */ + select_all_rb = RADIO_BUTTON_NEW_WITH_MNEMONIC(NULL, "_All packets", accel_group); + gtk_table_attach_defaults(GTK_TABLE(range_tb), select_all_rb, 0, 1, 1, 2); + gtk_tooltips_set_tip (tooltips, select_all_rb, + ("Process all packets"), NULL); + SIGNAL_CONNECT(select_all_rb, "toggled", toggle_select_all, range_tb); + + select_all_c_lb = gtk_label_new("?"); + gtk_table_attach_defaults(GTK_TABLE(range_tb), select_all_c_lb, 1, 2, 1, 2); + select_all_d_lb = gtk_label_new("?"); + gtk_table_attach_defaults(GTK_TABLE(range_tb), select_all_d_lb, 2, 3, 1, 2); + + + /* Process currently selected */ + select_curr_rb = RADIO_BUTTON_NEW_WITH_MNEMONIC(select_all_rb, "_Selected packet only", accel_group); + gtk_table_attach_defaults(GTK_TABLE(range_tb), select_curr_rb, 0, 1, 2, 3); + gtk_tooltips_set_tip (tooltips, select_curr_rb, ("Process the currently selected packet only"), NULL); + SIGNAL_CONNECT(select_curr_rb, "toggled", toggle_select_selected, range_tb); + + select_curr_c_lb = gtk_label_new("?"); + gtk_table_attach_defaults(GTK_TABLE(range_tb), select_curr_c_lb, 1, 2, 2, 3); + select_curr_d_lb = gtk_label_new("?"); + gtk_table_attach_defaults(GTK_TABLE(range_tb), select_curr_d_lb, 2, 3, 2, 3); + + + /* Process marked packets */ + select_marked_only_rb = RADIO_BUTTON_NEW_WITH_MNEMONIC(select_all_rb, "_Marked packets only", accel_group); + gtk_table_attach_defaults(GTK_TABLE(range_tb), select_marked_only_rb, 0, 1, 3, 4); + gtk_tooltips_set_tip (tooltips, select_marked_only_rb, ("Process marked packets only"), NULL); + SIGNAL_CONNECT(select_marked_only_rb, "toggled", toggle_select_marked_only, range_tb); + + select_marked_only_c_lb = gtk_label_new("?"); + gtk_table_attach_defaults(GTK_TABLE(range_tb), select_marked_only_c_lb, 1, 2, 3, 4); + select_marked_only_d_lb = gtk_label_new("?"); + gtk_table_attach_defaults(GTK_TABLE(range_tb), select_marked_only_d_lb, 2, 3, 3, 4); + + + /* Process packet range between first and last packet */ + select_marked_range_rb = RADIO_BUTTON_NEW_WITH_MNEMONIC(select_all_rb, "From first _to last marked packet", accel_group); + gtk_table_attach_defaults(GTK_TABLE(range_tb), select_marked_range_rb, 0, 1, 4, 5); + gtk_tooltips_set_tip (tooltips,select_marked_range_rb,("Process all packets between the first and last marker"), NULL); + SIGNAL_CONNECT(select_marked_range_rb, "toggled", toggle_select_marked_range, range_tb); + + select_marked_range_c_lb = gtk_label_new("?"); + gtk_table_attach_defaults(GTK_TABLE(range_tb), select_marked_range_c_lb, 1, 2, 4, 5); + select_marked_range_d_lb = gtk_label_new("?"); + gtk_table_attach_defaults(GTK_TABLE(range_tb), select_marked_range_d_lb, 2, 3, 4, 5); + + + /* Process a user specified provided packet range : -10,30,40-70,80- */ + select_user_range_rb = RADIO_BUTTON_NEW_WITH_MNEMONIC(select_all_rb, "Specify a packet _range:", accel_group); + gtk_table_attach_defaults(GTK_TABLE(range_tb), select_user_range_rb, 0, 1, 5, 6); + gtk_tooltips_set_tip (tooltips,select_user_range_rb,("Process a specified packet range"), NULL); + SIGNAL_CONNECT(select_user_range_rb, "toggled", toggle_select_user_range, range_tb); + + select_user_range_c_lb = gtk_label_new("?"); + gtk_table_attach_defaults(GTK_TABLE(range_tb), select_user_range_c_lb, 1, 2, 5, 6); + select_user_range_d_lb = gtk_label_new("?"); + gtk_table_attach_defaults(GTK_TABLE(range_tb), select_user_range_d_lb, 2, 3, 5, 6); + + + /* The entry part */ + select_user_range_entry = gtk_entry_new(); + gtk_entry_set_max_length (GTK_ENTRY (select_user_range_entry), 254); + gtk_table_attach_defaults(GTK_TABLE(range_tb), select_user_range_entry, 0, 1, 6, 7); + gtk_tooltips_set_tip (tooltips,select_user_range_entry, + ("Specify a range of packet numbers : \nExample : 1-10,18,25-100,332-"), NULL); + SIGNAL_CONNECT(select_user_range_entry,"changed", range_entry, range_tb); + SIGNAL_CONNECT(select_user_range_entry,"activate", range_entry_in_event, range_tb); + + + gtk_widget_show_all(range_tb); + + + OBJECT_SET_DATA(range_tb, RANGE_VALUES_KEY, range); + OBJECT_SET_DATA(range_tb, RANGE_CAPTURED_BT_KEY, captured_bt); + OBJECT_SET_DATA(range_tb, RANGE_DISPLAYED_BT_KEY, displayed_bt); + + OBJECT_SET_DATA(range_tb, RANGE_SELECT_ALL_C_KEY, select_all_c_lb); + OBJECT_SET_DATA(range_tb, RANGE_SELECT_ALL_D_KEY, select_all_d_lb); + + OBJECT_SET_DATA(range_tb, RANGE_SELECT_CURR_KEY, select_curr_rb); + OBJECT_SET_DATA(range_tb, RANGE_SELECT_CURR_C_KEY, select_curr_c_lb); + OBJECT_SET_DATA(range_tb, RANGE_SELECT_CURR_D_KEY, select_curr_d_lb); + OBJECT_SET_DATA(range_tb, RANGE_SELECT_CURR_D_KEY, select_curr_d_lb); + OBJECT_SET_DATA(range_tb, RANGE_SELECT_MARKED_KEY, select_marked_only_rb); + OBJECT_SET_DATA(range_tb, RANGE_SELECT_MARKED_C_KEY, select_marked_only_c_lb); + OBJECT_SET_DATA(range_tb, RANGE_SELECT_MARKED_D_KEY, select_marked_only_d_lb); + OBJECT_SET_DATA(range_tb, RANGE_SELECT_MARKED_RANGE_KEY, select_marked_range_rb); + OBJECT_SET_DATA(range_tb, RANGE_SELECT_MARKED_RANGE_C_KEY,select_marked_range_c_lb); + OBJECT_SET_DATA(range_tb, RANGE_SELECT_MARKED_RANGE_D_KEY,select_marked_range_d_lb); + OBJECT_SET_DATA(range_tb, RANGE_SELECT_USER_KEY, select_user_range_rb); + OBJECT_SET_DATA(range_tb, RANGE_SELECT_USER_C_KEY, select_user_range_c_lb); + OBJECT_SET_DATA(range_tb, RANGE_SELECT_USER_D_KEY, select_user_range_d_lb); + OBJECT_SET_DATA(range_tb, RANGE_SELECT_USER_ENTRY_KEY, select_user_range_entry); + + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(captured_bt), TRUE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(displayed_bt), FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(select_all_rb), TRUE); + + return range_tb; +} diff --git a/gtk/range_utils.h b/gtk/range_utils.h new file mode 100644 index 0000000000..75a1e2c6da --- /dev/null +++ b/gtk/range_utils.h @@ -0,0 +1,46 @@ +/* range_utils.h + * Declarations of utilities to with range_utils.c (packet range dialog) + * + * $Id: range_utils.h,v 1.1 2004/04/22 21:29:34 ulfl Exp $ + * + * Ulf Lamping <ulf.lamping@web.de> + * + * Ethereal - Network traffic analyzer + * By Gerald Combs <gerald@ethereal.com> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __RANGE_UTILS_H__ +#define __RANGE_UTILS_H__ + +/* create a new range "widget" */ +extern GtkWidget *range_new(packet_range_t *range +#if GTK_MAJOR_VERSION < 2 +, GtkAccelGroup *accel_group +#endif +); + +/* update all "dynamic" things */ +extern void range_update_dynamics(gpointer data); + +/* set the "Process only marked packets" toggle button as appropriate */ +extern void range_set_marked_sensitive(gpointer data, gboolean marked_valid); + +/* set the "displayed" button as appropriate */ +extern void range_set_displayed_sensitive(gpointer data, gboolean displayed_valid); + +#endif |