diff options
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/file_dlg.c | 170 | ||||
-rw-r--r-- | gtk/print_dlg.c | 467 |
2 files changed, 419 insertions, 218 deletions
diff --git a/gtk/file_dlg.c b/gtk/file_dlg.c index d88f1efab4..beb0dc92ee 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.78 2004/01/09 14:05:20 ulfl Exp $ + * $Id: file_dlg.c,v 1.79 2004/01/09 18:11:21 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -480,7 +480,7 @@ 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 *range_specs; +static GtkWidget *select_user_range_entry; static GtkWidget *cfmark_cb; static GtkWidget *ft_om; @@ -503,37 +503,6 @@ file_set_save_dynamics(void) { filtered_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(displayed_bt)); -#if 0 - /* "Displayed" button is only sensitive, if at least one filtered packet is available and - * the count is different to the captured one */ - switch(range.process) { - case(range_process_all): - filtered_sensitive = (guint32) cfile.count != range.displayed_cnt; - break; - case(range_process_curr): - filtered_sensitive = FALSE; - break; - case(range_process_marked): - filtered_sensitive = range.displayed_marked_cnt && (guint32) cfile.marked_count != range.displayed_marked_cnt; - break; - case(range_process_marked_range): - filtered_sensitive = range.displayed_mark_range && (guint32) range.mark_range != range.displayed_mark_range; - break; - case(range_process_user_range): - filtered_sensitive = TRUE; - break; - default: - g_assert(0); - } - filtered_sensitive = TRUE; - - gtk_widget_set_sensitive(displayed_bt, filtered_sensitive && can_save_with_wiretap(filetype)); - - /* if the displayed button is active, but the selection doesn't support it, go back to "captured active" */ - if (filtered_active && !filtered_sensitive) { - toggle_captured_cb(captured_bt, NULL); - } -#endif gtk_widget_set_sensitive(displayed_bt, can_save_with_wiretap(filetype)); gtk_widget_set_sensitive(select_all_c_lb, !filtered_active); @@ -564,19 +533,19 @@ file_set_save_dynamics(void) { 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); - g_snprintf(label_text, sizeof(label_text), "%u", range.mark_range); + 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 && !filtered_active); - g_snprintf(label_text, sizeof(label_text), "%u", range.displayed_mark_range); + 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 && filtered_active); + 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); + 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); + 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); } @@ -736,11 +705,11 @@ toggle_select_user_range(GtkWidget *widget, gpointer data _U_) } /* Make the entry widget sensitive or insensitive */ - gtk_widget_set_sensitive(range_specs, range.process == range_process_user_range); + 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(range_specs); + gtk_widget_grab_focus(select_user_range_entry); } @@ -754,6 +723,40 @@ range_entry(GtkWidget *entry) file_set_save_dynamics(); } +/* + * Set the "Save only marked packets" toggle button as appropriate for + * the current output file type and count of marked packets. + * + * Called when the "Save As..." dialog box is created and when either + * the file type or the marked count changes. + */ +void +file_set_save_marked_sensitive(void) +{ + if (file_save_as_w == NULL) { + /* We don't currently have a "Save As..." dialog box up. */ + return; + } + + /* 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); + } + 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); + } +} + void file_save_as_cmd_cb(GtkWidget *w _U_, gpointer data _U_) { @@ -826,7 +829,7 @@ file_save_as_cmd_cb(GtkWidget *w _U_, gpointer data _U_) #endif 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,("Save all the below chosen packets"), NULL); + gtk_tooltips_set_tip (tooltips,captured_bt,("Process all the below chosen packets"), NULL); gtk_widget_show(captured_bt); /* displayed button */ @@ -837,20 +840,11 @@ file_save_as_cmd_cb(GtkWidget *w _U_, gpointer data _U_) #endif 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,("Save only the below chosen packets, which also passes the current display filter"), 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); - /* - * The argument above could, I guess, be applied to the marked packets, - * except that you can't easily tell whether there are any marked - * packets, so I could imagine users doing "Save only marked packets" - * when there aren't any marked packets, not knowing that they'd - * failed to mark them, so I'm more inclined to have the "Save only - * marked packets" toggle button enabled only if there are marked - * packets to save. - */ - /* Save all packets */ + /* Process all packets */ g_snprintf(label_text, sizeof(label_text), "_All packets"); #if GTK_MAJOR_VERSION < 2 select_all_rb = dlg_radio_button_new_with_label_with_mnemonic(NULL, label_text ,accel_group); @@ -858,7 +852,7 @@ file_save_as_cmd_cb(GtkWidget *w _U_, gpointer data _U_) select_all_rb = gtk_radio_button_new_with_mnemonic(NULL, label_text); #endif gtk_table_attach_defaults(GTK_TABLE(range_tb), select_all_rb, 0, 1, 1, 2); - gtk_tooltips_set_tip (tooltips,select_all_rb,("Save all packets"), NULL); + 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); @@ -870,7 +864,7 @@ file_save_as_cmd_cb(GtkWidget *w _U_, gpointer data _U_) gtk_widget_show(select_all_d_lb); - /* Save currently selected */ + /* Process currently selected */ g_snprintf(label_text, sizeof(label_text), "_Selected packet only"); #if GTK_MAJOR_VERSION < 2 select_curr_rb = dlg_radio_button_new_with_label_with_mnemonic(gtk_radio_button_group (GTK_RADIO_BUTTON (select_all_rb)), @@ -880,7 +874,7 @@ file_save_as_cmd_cb(GtkWidget *w _U_, gpointer data _U_) label_text); #endif gtk_table_attach_defaults(GTK_TABLE(range_tb), select_curr_rb, 0, 1, 2, 3); - gtk_tooltips_set_tip (tooltips,select_curr_rb,("Save the currently selected packet only"), NULL); + 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); @@ -892,7 +886,7 @@ file_save_as_cmd_cb(GtkWidget *w _U_, gpointer data _U_) gtk_widget_show(select_curr_d_lb); - /* Save marked packets */ + /* Process marked packets */ g_snprintf(label_text, sizeof(label_text), "_Marked packets only"); #if GTK_MAJOR_VERSION < 2 select_marked_only_rb = dlg_radio_button_new_with_label_with_mnemonic(gtk_radio_button_group (GTK_RADIO_BUTTON (select_all_rb)), @@ -902,7 +896,7 @@ file_save_as_cmd_cb(GtkWidget *w _U_, gpointer data _U_) label_text); #endif 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,("Save marked packets only"), NULL); + 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); @@ -914,7 +908,7 @@ file_save_as_cmd_cb(GtkWidget *w _U_, gpointer data _U_) gtk_widget_show(select_marked_only_d_lb); - /* Save packet range between first and last packet */ + /* Process packet range between first and last packet */ g_snprintf(label_text, sizeof(label_text), "From first _to last marked packet"); #if GTK_MAJOR_VERSION < 2 select_marked_range_rb = dlg_radio_button_new_with_label_with_mnemonic(gtk_radio_button_group (GTK_RADIO_BUTTON (select_all_rb)), @@ -924,7 +918,7 @@ file_save_as_cmd_cb(GtkWidget *w _U_, gpointer data _U_) label_text); #endif 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,("Save all packets between the first and last marker"), NULL); + 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); @@ -936,8 +930,8 @@ file_save_as_cmd_cb(GtkWidget *w _U_, gpointer data _U_) gtk_widget_show(select_marked_range_d_lb); - /* Save a user specified provided packet range : -10,30,40-70,80- */ - g_snprintf(label_text, sizeof(label_text), "Specify a packet _range :"); + /* Process a user specified provided packet range : -10,30,40-70,80- */ + g_snprintf(label_text, sizeof(label_text), "Specify a packet _range:"); #if GTK_MAJOR_VERSION < 2 select_user_range_rb = dlg_radio_button_new_with_label_with_mnemonic(gtk_radio_button_group (GTK_RADIO_BUTTON (select_all_rb)), label_text,accel_group); @@ -946,7 +940,7 @@ file_save_as_cmd_cb(GtkWidget *w _U_, gpointer data _U_) label_text); #endif 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,("Save a specified packet range"), NULL); + 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); @@ -959,14 +953,14 @@ file_save_as_cmd_cb(GtkWidget *w _U_, gpointer data _U_) /* The entry part */ - range_specs = gtk_entry_new(); - gtk_entry_set_max_length (GTK_ENTRY (range_specs), 254); - gtk_table_attach_defaults(GTK_TABLE(range_tb), range_specs, 0, 1, 6, 7); - gtk_tooltips_set_tip (tooltips,range_specs, + 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(range_specs,"changed", range_entry, range_specs); - gtk_widget_set_sensitive(range_specs, FALSE); - gtk_widget_show(range_specs); + 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); @@ -1015,40 +1009,6 @@ file_save_as_cmd_cb(GtkWidget *w _U_, gpointer data _U_) gtk_widget_show(file_save_as_w); } -/* - * Set the "Save only marked packets" toggle button as appropriate for - * the current output file type and count of marked packets. - * - * Called when the "Save As..." dialog box is created and when either - * the file type or the marked count changes. - */ -void -file_set_save_marked_sensitive(void) -{ - if (file_save_as_w == NULL) { - /* We don't currently have a "Save As..." dialog box up. */ - return; - } - - /* 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); - } - 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); - } -} - static void file_save_as_ok_cb(GtkWidget *w _U_, GtkFileSelection *fs) { gchar *cf_name; diff --git a/gtk/print_dlg.c b/gtk/print_dlg.c index a222ecd257..e61ee3d7c3 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.51 2003/12/23 00:32:45 guy Exp $ + * $Id: print_dlg.c,v 1.52 2004/01/09 18:11:21 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -88,9 +88,26 @@ static gchar * print_cmd; #define PRINT_AS_DISPLAYED_RB_KEY "printer_as_displayed_radio_button" #define PRINT_EXPAND_ALL_RB_KEY "printer_expand_all_radio_button" -#define PRINT_ONLY_SELECTED_RB_KEY "printer_print_only_selected_radio_button" -#define PRINT_ONLY_MARKED_RB_KEY "printer_print_only_marked_radio_button" -#define PRINT_ONLY_DISPLAYED_RB_KEY "printer_print_only_displayed_radio_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 @@ -99,6 +116,195 @@ static gchar * print_cmd; */ static GtkWidget *print_w; +static void +file_set_print_dynamics(void) { + gboolean filtered_active; +/* gboolean filtered_sensitive;*/ + 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 (widget)->active) { + /* 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 (widget)->active) { + 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 (widget)->active) { + 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 (widget)->active) { + 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 (widget)->active) { + 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 (widget)->active) { + 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 (widget)->active) { + 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; + + 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 */ void file_print_cmd_cb(GtkWidget *widget _U_, gpointer data _U_) @@ -117,9 +323,7 @@ file_print_cmd_cb(GtkWidget *widget _U_, gpointer data _U_) #endif GtkWidget *file_bt, *file_te; - GtkWidget *range_fr, *range_vb; - GtkWidget *all_captured_rb, *all_displayed_rb, *selected_rb, *marked_rb; - GtkWidget *range_rb; + GtkWidget *range_fr, *range_tb; GtkWidget *packet_fr, *packet_vb; GtkWidget *details_cb, *details_fr, *details_vb; @@ -129,9 +333,7 @@ file_print_cmd_cb(GtkWidget *widget _U_, gpointer data _U_) GtkTooltips *tooltips; gchar label_text[100]; - frame_data *packet; - int selected_count; - int displayed_count; + if (print_w != NULL) { /* There's already a "Print" dialog box; reactivate it. */ @@ -139,17 +341,8 @@ file_print_cmd_cb(GtkWidget *widget _U_, gpointer data _U_) return; } - /* count packets */ - selected_count = (cfile.current_frame != NULL) ? 1 : 0; - /* XXX: this counter should be a in cfile, so we don't have to do this here */ - displayed_count = 0; - packet = cfile.plist; - while(packet != NULL) { - if (packet->flags.passed_dfilter) { - displayed_count++; - } - packet = packet->next; - } + /* init the packet range */ + packet_range_init(&range); /* get settings from preferences only once */ if(print_prefs_init == FALSE) { @@ -160,6 +353,7 @@ file_print_cmd_cb(GtkWidget *widget _U_, gpointer data _U_) print_file = prefs.pr_file; } + /* Enable tooltips */ tooltips = gtk_tooltips_new(); /* dialog window */ @@ -290,104 +484,167 @@ file_print_cmd_cb(GtkWidget *widget _U_, gpointer data _U_) /*****************************************************/ - /*** print range frame ***/ - range_fr = gtk_frame_new("Print Range"); + /*** packet range frame ***/ + range_fr = gtk_frame_new("Packet Range"); gtk_box_pack_start(GTK_BOX(main_vb), range_fr, FALSE, FALSE, 0); gtk_widget_show(range_fr); - range_vb = gtk_vbox_new(FALSE, 5); - gtk_container_border_width(GTK_CONTAINER(range_vb), 5); - gtk_container_add(GTK_CONTAINER(range_fr), range_vb); - gtk_widget_show(range_vb); - - /* "Selected packet only" */ - /* "Marked packets only" */ - /* "All packets displayed" */ - /* "All packets captured" */ - /* "Packets from x to y" */ + /* range table */ + range_tb = gtk_table_new(7, 3, FALSE); + gtk_container_border_width(GTK_CONTAINER(range_tb), 5); + gtk_container_add(GTK_CONTAINER(range_fr), range_tb); + gtk_widget_show(range_tb); - /* there will be a selected packet, if at least one packet is displayed */ - g_snprintf(label_text, sizeof(label_text), "_Selected packets only, %u %s", - selected_count, plurality(selected_count, "packet", "packets")); + /* captured button */ #if GTK_MAJOR_VERSION < 2 - selected_rb = dlg_radio_button_new_with_label_with_mnemonic( - NULL, - label_text, accel_group); + captured_bt = dlg_toggle_button_new_with_label_with_mnemonic("_Captured" ,accel_group); #else - selected_rb = gtk_radio_button_new_with_mnemonic( - NULL, label_text); + captured_bt = gtk_toggle_button_new_with_mnemonic("_Captured"); #endif - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(selected_rb), TRUE); - gtk_tooltips_set_tip (tooltips, selected_rb, ("Print the currently selected packet only"), NULL); - gtk_container_add(GTK_CONTAINER(range_vb), selected_rb); - /* set sensitive only, if we have a selected packet */ - gtk_widget_set_sensitive(selected_rb, selected_count); - gtk_widget_show(selected_rb); - - g_snprintf(label_text, sizeof(label_text), "_Marked packets only, %u %s", - cfile.marked_count, plurality(cfile.marked_count, "packet", "packets")); + 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 */ #if GTK_MAJOR_VERSION < 2 - marked_rb = dlg_radio_button_new_with_label_with_mnemonic( - gtk_radio_button_group(GTK_RADIO_BUTTON(selected_rb)), - label_text, accel_group); + displayed_bt = dlg_toggle_button_new_with_label_with_mnemonic("_Displayed" ,accel_group); #else - marked_rb = gtk_radio_button_new_with_mnemonic_from_widget( - GTK_RADIO_BUTTON(selected_rb), label_text); + displayed_bt = gtk_toggle_button_new_with_mnemonic("_Displayed"); #endif - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(marked_rb), FALSE); - gtk_tooltips_set_tip (tooltips, marked_rb, ("Print marked packets only"), NULL); - gtk_container_add(GTK_CONTAINER(range_vb), marked_rb); - gtk_widget_set_sensitive(marked_rb, cfile.marked_count); - gtk_widget_show(marked_rb); - - g_snprintf(label_text, sizeof(label_text), "All packets _displayed, %u %s", - displayed_count, plurality(displayed_count, "packet", "packets")); + 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 */ + g_snprintf(label_text, sizeof(label_text), "_All packets"); #if GTK_MAJOR_VERSION < 2 - all_displayed_rb = dlg_radio_button_new_with_label_with_mnemonic( - gtk_radio_button_group(GTK_RADIO_BUTTON(selected_rb)), + select_all_rb = dlg_radio_button_new_with_label_with_mnemonic( + NULL, label_text, accel_group); #else - all_displayed_rb = gtk_radio_button_new_with_mnemonic_from_widget( - GTK_RADIO_BUTTON(selected_rb), label_text); + select_all_rb = gtk_radio_button_new_with_mnemonic(NULL, label_text); #endif - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(all_displayed_rb), FALSE); - gtk_tooltips_set_tip (tooltips, all_displayed_rb, - ("Print all packets currently displayed"), NULL); - gtk_container_add(GTK_CONTAINER(range_vb), all_displayed_rb); - /* set sensitive only, if we are displaying any packets and a display filter showed any effect */ - gtk_widget_set_sensitive(all_displayed_rb, displayed_count && displayed_count != cfile.count); - gtk_widget_show(all_displayed_rb); - - g_snprintf(label_text, sizeof(label_text), "All packets _captured, %u %s", - cfile.count, plurality(cfile.count, "packet", "packets")); + 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 */ + g_snprintf(label_text, sizeof(label_text), "_Selected packet only"); #if GTK_MAJOR_VERSION < 2 - all_captured_rb = dlg_radio_button_new_with_label_with_mnemonic( - gtk_radio_button_group(GTK_RADIO_BUTTON(selected_rb)), + select_curr_rb = dlg_radio_button_new_with_label_with_mnemonic( + gtk_radio_button_group(GTK_RADIO_BUTTON(select_all_rb)), label_text, accel_group); #else - all_captured_rb = gtk_radio_button_new_with_mnemonic_from_widget( - GTK_RADIO_BUTTON(selected_rb), label_text); + select_curr_rb = gtk_radio_button_new_with_mnemonic_from_widget( + GTK_RADIO_BUTTON(select_all_rb), label_text); #endif - /* set this button active, only when no packets selected */ - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(all_captured_rb), selected_count == 0); - gtk_tooltips_set_tip (tooltips, all_captured_rb, - ("Print all packets captured"), NULL); - gtk_container_add(GTK_CONTAINER(range_vb), all_captured_rb); - gtk_widget_show(all_captured_rb); + 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 */ + g_snprintf(label_text, sizeof(label_text), "_Marked packets only"); #if GTK_MAJOR_VERSION < 2 - range_rb = dlg_radio_button_new_with_label_with_mnemonic( - gtk_radio_button_group(GTK_RADIO_BUTTON(selected_rb)), - "XXX: Packets f_rom X to Y", accel_group); + select_marked_only_rb = dlg_radio_button_new_with_label_with_mnemonic( + gtk_radio_button_group(GTK_RADIO_BUTTON(select_all_rb)), + label_text, accel_group); #else - range_rb = gtk_radio_button_new_with_mnemonic_from_widget( - GTK_RADIO_BUTTON(selected_rb), "XXX: Packets f_rom X to Y"); + select_marked_only_rb = gtk_radio_button_new_with_mnemonic_from_widget( + GTK_RADIO_BUTTON(select_all_rb), label_text); #endif - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(range_rb), FALSE); - gtk_tooltips_set_tip (tooltips, range_rb, ("Print packets from number X to Y only"), NULL); - gtk_container_add(GTK_CONTAINER(range_vb), range_rb); - /*gtk_widget_show(range_rb);*/ + 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 */ + g_snprintf(label_text, sizeof(label_text), "From first _to last marked packet"); +#if GTK_MAJOR_VERSION < 2 + select_marked_range_rb = dlg_radio_button_new_with_label_with_mnemonic(gtk_radio_button_group (GTK_RADIO_BUTTON (select_all_rb)), + label_text,accel_group); +#else + select_marked_range_rb = gtk_radio_button_new_with_mnemonic(gtk_radio_button_group (GTK_RADIO_BUTTON (select_all_rb)), + label_text); +#endif + 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- */ + g_snprintf(label_text, sizeof(label_text), "Specify a packet _range:"); +#if GTK_MAJOR_VERSION < 2 + select_user_range_rb = dlg_radio_button_new_with_label_with_mnemonic(gtk_radio_button_group (GTK_RADIO_BUTTON (select_all_rb)), + label_text,accel_group); +#else + select_user_range_rb = gtk_radio_button_new_with_mnemonic(gtk_radio_button_group (GTK_RADIO_BUTTON (select_all_rb)), + label_text); +#endif + 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); + /*****************************************************/ @@ -508,9 +765,6 @@ file_print_cmd_cb(GtkWidget *widget _U_, gpointer data _U_) OBJECT_SET_DATA(ok_bt, PRINT_HEX_CB_KEY, hex_cb); OBJECT_SET_DATA(ok_bt, PRINT_AS_DISPLAYED_RB_KEY, as_displayed_rb); OBJECT_SET_DATA(ok_bt, PRINT_EXPAND_ALL_RB_KEY, expand_all_rb); - OBJECT_SET_DATA(ok_bt, PRINT_ONLY_SELECTED_RB_KEY, selected_rb); - OBJECT_SET_DATA(ok_bt, PRINT_ONLY_MARKED_RB_KEY, marked_rb); - OBJECT_SET_DATA(ok_bt, PRINT_ONLY_DISPLAYED_RB_KEY, all_displayed_rb); SIGNAL_CONNECT(ok_bt, "clicked", print_ok_cb, print_w); GTK_WIDGET_SET_FLAGS(ok_bt, GTK_CAN_DEFAULT); gtk_tooltips_set_tip (tooltips, ok_bt, ("Perform printing"), NULL); @@ -685,20 +939,7 @@ print_ok_cb(GtkWidget *ok_bt, gpointer parent_w) print_args.print_dissections = print_dissections_expanded; } - print_args.print_range = print_range_all_captured; - - button = (GtkWidget *)OBJECT_GET_DATA(ok_bt, PRINT_ONLY_SELECTED_RB_KEY); - if (GTK_TOGGLE_BUTTON (button)->active) { - print_args.print_range = print_range_selected_only; - } - button = (GtkWidget *)OBJECT_GET_DATA(ok_bt, PRINT_ONLY_MARKED_RB_KEY); - if (GTK_TOGGLE_BUTTON (button)->active) { - print_args.print_range = print_range_marked_only; - } - button = (GtkWidget *)OBJECT_GET_DATA(ok_bt, PRINT_ONLY_DISPLAYED_RB_KEY); - if (GTK_TOGGLE_BUTTON (button)->active) { - print_args.print_range = print_range_all_displayed; - } + print_args.range = range; gtk_widget_destroy(GTK_WIDGET(parent_w)); |