aboutsummaryrefslogtreecommitdiffstats
path: root/gtk
diff options
context:
space:
mode:
authorstig <stig@f5534014-38df-0310-8fa8-9805f1628bb7>2010-01-26 13:08:22 +0000
committerstig <stig@f5534014-38df-0310-8fa8-9805f1628bb7>2010-01-26 13:08:22 +0000
commitfe60f10c88bccba6edd672f3d522f5e8fe1d0579 (patch)
treea6220da363536f49b85df6693dc5599f5c663177 /gtk
parentedc7680599cac2f7a0aecdda11ee33f539948945 (diff)
Introduce "Remove Ignored packets" in Packet Range frames, which is used in
Save As, Export and Print dialogs. git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@31680 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'gtk')
-rw-r--r--gtk/range_utils.c157
1 files changed, 139 insertions, 18 deletions
diff --git a/gtk/range_utils.c b/gtk/range_utils.c
index ccd83ecac8..0a90710983 100644
--- a/gtk/range_utils.c
+++ b/gtk/range_utils.c
@@ -60,6 +60,10 @@
#define RANGE_SELECT_USER_D_KEY "range_select_user_range_d_lb"
#define RANGE_SELECT_USER_ENTRY_KEY "range_select_user_range_entry"
+#define RANGE_REMOVE_IGNORED_KEY "range_remove_ignored"
+#define RANGE_IGNORED_C_KEY "range_ignored_c_lb"
+#define RANGE_IGNORED_D_KEY "range_ignored_d_lb"
+
gboolean
range_check_validity(packet_range_t *range)
{
@@ -93,11 +97,11 @@ range_update_dynamics(gpointer data)
gboolean filtered_active;
gint selected_num;
gboolean can_select;
+ gboolean selected_packets;
gchar label_text[100];
-
+ guint32 ignored_cnt = 0, displayed_ignored_cnt = 0;
range = g_object_get_data(G_OBJECT(data), RANGE_VALUES_KEY);
-
range_displayed_bt = g_object_get_data(G_OBJECT(data), RANGE_DISPLAYED_BT_KEY);
filtered_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(range_displayed_bt));
@@ -115,10 +119,18 @@ range_update_dynamics(gpointer data)
}
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_ALL_C_KEY), !filtered_active);
- g_snprintf(label_text, sizeof(label_text), "%u", cfile.count);
+ if (range->remove_ignored) {
+ g_snprintf(label_text, sizeof(label_text), "%u", cfile.count - range->ignored_cnt);
+ } else {
+ g_snprintf(label_text, sizeof(label_text), "%u", cfile.count);
+ }
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_SELECT_ALL_C_KEY)), label_text);
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_ALL_D_KEY), filtered_active);
- g_snprintf(label_text, sizeof(label_text), "%u", range->displayed_cnt);
+ if (range->remove_ignored) {
+ g_snprintf(label_text, sizeof(label_text), "%u", range->displayed_cnt - range->displayed_ignored_cnt);
+ } else {
+ g_snprintf(label_text, sizeof(label_text), "%u", range->displayed_cnt);
+ }
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_SELECT_ALL_D_KEY)), label_text);
/* Enable saving the currently-selected packet only if there *is* a
@@ -142,18 +154,26 @@ range_update_dynamics(gpointer data)
/* 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);*/
- g_snprintf(label_text, sizeof(label_text), "%u", selected_num ? 1 : 0);
+ if (range->remove_ignored && can_select && cfile.current_frame->flags.ignored) {
+ g_snprintf(label_text, sizeof(label_text), "0");
+ } else {
+ g_snprintf(label_text, sizeof(label_text), "%u", selected_num ? 1 : 0);
+ }
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_SELECT_CURR_C_KEY)), label_text);
- g_snprintf(label_text, sizeof(label_text), "%u", selected_num ? 1 : 0);
+ if (range->remove_ignored && can_select && cfile.current_frame->flags.ignored) {
+ g_snprintf(label_text, sizeof(label_text), "0");
+ } else {
+ g_snprintf(label_text, sizeof(label_text), "%u", selected_num ? 1 : 0);
+ }
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_SELECT_CURR_D_KEY)), label_text);
/* Enable the buttons for saving marked packets only if there *are*
marked packets. */
if (filtered_active)
- can_select = (range->displayed_marked_cnt != 0);
+ selected_packets = (range->displayed_marked_cnt != 0);
else
- can_select = (cfile.marked_count > 0);
- if (can_select) {
+ selected_packets = (cfile.marked_count > 0);
+ if (selected_packets) {
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_MARKED_KEY), TRUE);
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_MARKED_C_KEY), !filtered_active);
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_MARKED_D_KEY), filtered_active);
@@ -168,18 +188,26 @@ range_update_dynamics(gpointer data)
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_MARKED_C_KEY), FALSE);
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_MARKED_D_KEY), FALSE);
}
- g_snprintf(label_text, sizeof(label_text), "%u", cfile.marked_count);
+ if (range->remove_ignored) {
+ g_snprintf(label_text, sizeof(label_text), "%u", cfile.marked_count - range->ignored_marked_cnt);
+ } else {
+ g_snprintf(label_text, sizeof(label_text), "%u", cfile.marked_count);
+ }
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_SELECT_MARKED_C_KEY)), label_text);
- g_snprintf(label_text, sizeof(label_text), "%u", range->displayed_marked_cnt);
+ if (range->remove_ignored) {
+ g_snprintf(label_text, sizeof(label_text), "%u", range->displayed_marked_cnt - range->displayed_ignored_marked_cnt);
+ } else {
+ g_snprintf(label_text, sizeof(label_text), "%u", range->displayed_marked_cnt);
+ }
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_SELECT_MARKED_D_KEY)), label_text);
/* Enable the buttons for saving the range of marked packets only if
there *is* a range of marked packets. */
if (filtered_active)
- can_select = (range->displayed_mark_range_cnt != 0);
+ selected_packets = (range->displayed_mark_range_cnt != 0);
else
- can_select = (range->mark_range_cnt != 0);
- if (can_select) {
+ selected_packets = (range->mark_range_cnt != 0);
+ if (selected_packets) {
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_MARKED_RANGE_KEY), TRUE);
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_MARKED_RANGE_C_KEY), !filtered_active);
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_MARKED_RANGE_D_KEY), filtered_active);
@@ -195,18 +223,78 @@ range_update_dynamics(gpointer data)
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_MARKED_RANGE_C_KEY), FALSE);
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_MARKED_RANGE_D_KEY), FALSE);
}
- g_snprintf(label_text, sizeof(label_text), "%u", range->mark_range_cnt);
+ if (range->remove_ignored) {
+ g_snprintf(label_text, sizeof(label_text), "%u", range->mark_range_cnt - range->ignored_mark_range_cnt);
+ } else {
+ g_snprintf(label_text, sizeof(label_text), "%u", range->mark_range_cnt);
+ }
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_SELECT_MARKED_RANGE_C_KEY)), label_text);
- g_snprintf(label_text, sizeof(label_text), "%u", range->displayed_mark_range_cnt);
+ if (range->remove_ignored) {
+ g_snprintf(label_text, sizeof(label_text), "%u", range->displayed_mark_range_cnt - range->displayed_ignored_mark_range_cnt);
+ } else {
+ g_snprintf(label_text, sizeof(label_text), "%u", range->displayed_mark_range_cnt);
+ }
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_SELECT_MARKED_RANGE_D_KEY)), label_text);
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_USER_KEY), TRUE);
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_USER_C_KEY), !filtered_active);
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_USER_D_KEY), filtered_active);
- g_snprintf(label_text, sizeof(label_text), "%u", range->user_range_cnt);
+ if (range->remove_ignored) {
+ g_snprintf(label_text, sizeof(label_text), "%u", range->user_range_cnt - range->ignored_user_range_cnt);
+ } else {
+ g_snprintf(label_text, sizeof(label_text), "%u", range->user_range_cnt);
+ }
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_SELECT_USER_C_KEY)), label_text);
- g_snprintf(label_text, sizeof(label_text), "%u", range->displayed_user_range_cnt);
+ if (range->remove_ignored) {
+ g_snprintf(label_text, sizeof(label_text), "%u", range->displayed_user_range_cnt - range->displayed_ignored_user_range_cnt);
+ } else {
+ g_snprintf(label_text, sizeof(label_text), "%u", range->displayed_user_range_cnt);
+ }
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_SELECT_USER_D_KEY)), label_text);
+
+ switch(range->process) {
+ case(range_process_all):
+ ignored_cnt = range->ignored_cnt;
+ displayed_ignored_cnt = range->displayed_ignored_cnt;
+ break;
+ case(range_process_selected):
+ ignored_cnt = (can_select && cfile.current_frame->flags.ignored) ? 1 : 0;
+ displayed_ignored_cnt = ignored_cnt;
+ break;
+ case(range_process_marked):
+ ignored_cnt = range->ignored_marked_cnt;
+ displayed_ignored_cnt = range->displayed_ignored_marked_cnt;
+ break;
+ case(range_process_marked_range):
+ ignored_cnt = range->ignored_mark_range_cnt;
+ displayed_ignored_cnt = range->displayed_ignored_mark_range_cnt;
+ break;
+ case(range_process_user_range):
+ ignored_cnt = range->ignored_user_range_cnt;
+ displayed_ignored_cnt = range->displayed_ignored_user_range_cnt;
+ break;
+ default:
+ g_assert_not_reached();
+ }
+
+ if (filtered_active)
+ selected_packets = (displayed_ignored_cnt != 0);
+ else
+ selected_packets = (ignored_cnt != 0);
+
+ if (selected_packets) {
+ gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_REMOVE_IGNORED_KEY), TRUE);
+ gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_IGNORED_C_KEY), !filtered_active);
+ gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_IGNORED_D_KEY), filtered_active);
+ } else {
+ gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_REMOVE_IGNORED_KEY), FALSE);
+ gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_IGNORED_C_KEY), FALSE);
+ gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_IGNORED_D_KEY), FALSE);
+ }
+
+ g_snprintf(label_text, sizeof(label_text), "%u", ignored_cnt);
+ gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_IGNORED_C_KEY)), label_text); g_snprintf(label_text, sizeof(label_text), "%u", displayed_ignored_cnt);
+ gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_IGNORED_D_KEY)), label_text);
}
@@ -337,6 +425,22 @@ toggle_select_user_range(GtkWidget *widget, gpointer data)
}
+static void
+toggle_remove_ignored(GtkWidget *widget, gpointer data)
+{
+ packet_range_t *range;
+
+ range = g_object_get_data(G_OBJECT(data), RANGE_VALUES_KEY);
+
+ /* is the button now active? */
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))) {
+ range->remove_ignored = TRUE;
+ } else {
+ range->remove_ignored = FALSE;
+ }
+
+ range_update_dynamics(data);
+}
static void
range_entry(GtkWidget *widget _U_, gpointer data)
@@ -398,6 +502,9 @@ GtkWidget *range_new(packet_range_t *range)
GtkWidget *select_user_range_c_lb;
GtkWidget *select_user_range_d_lb;
GtkWidget *select_user_range_entry;
+ GtkWidget *remove_ignored_cb;
+ GtkWidget *ignored_c_lb;
+ GtkWidget *ignored_d_lb;
GtkTooltips *tooltips;
@@ -492,6 +599,16 @@ GtkWidget *range_new(packet_range_t *range)
g_signal_connect(select_user_range_entry,"changed", G_CALLBACK(range_entry), range_tb);
g_signal_connect(select_user_range_entry,"activate", G_CALLBACK(range_entry_in_event), range_tb);
+ /* Remove ignored packets */
+ remove_ignored_cb = gtk_check_button_new_with_mnemonic("Remove _Ignored packets");
+ gtk_table_attach_defaults(GTK_TABLE(range_tb), remove_ignored_cb, 0, 1, 7, 8);
+ gtk_tooltips_set_tip (tooltips,remove_ignored_cb,("Remove all packets marked as Ignored"), NULL);
+ g_signal_connect(remove_ignored_cb, "toggled", G_CALLBACK(toggle_remove_ignored), range_tb);
+
+ ignored_c_lb = gtk_label_new("?");
+ gtk_table_attach_defaults(GTK_TABLE(range_tb), ignored_c_lb, 1, 2, 7, 8);
+ ignored_d_lb = gtk_label_new("?");
+ gtk_table_attach_defaults(GTK_TABLE(range_tb), ignored_d_lb, 2, 3, 7, 8);
gtk_widget_show_all(range_tb);
@@ -519,6 +636,10 @@ GtkWidget *range_new(packet_range_t *range)
g_object_set_data(G_OBJECT(range_tb), RANGE_SELECT_USER_D_KEY, select_user_range_d_lb);
g_object_set_data(G_OBJECT(range_tb), RANGE_SELECT_USER_ENTRY_KEY, select_user_range_entry);
+ g_object_set_data(G_OBJECT(range_tb), RANGE_REMOVE_IGNORED_KEY, remove_ignored_cb);
+ g_object_set_data(G_OBJECT(range_tb), RANGE_IGNORED_C_KEY, ignored_c_lb);
+ g_object_set_data(G_OBJECT(range_tb), RANGE_IGNORED_D_KEY, ignored_d_lb);
+
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(captured_bt), !range->process_filtered);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(displayed_bt), range->process_filtered);