Change display filter entry widget to a GtkCombo.

Modify filter_packtes to return 1 on success, and 0 on failure.

svn path=/trunk/; revision=1106
This commit is contained in:
Gerald Combs 1999-11-25 18:02:25 +00:00
parent f90037ac8d
commit e479d316a7
4 changed files with 50 additions and 13 deletions

7
file.c
View File

@ -1,7 +1,7 @@
/* file.c
* File I/O routines
*
* $Id: file.c,v 1.122 1999/11/22 06:24:38 gram Exp $
* $Id: file.c,v 1.123 1999/11/25 18:02:05 gerald Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@ -1011,7 +1011,7 @@ wtap_dispatch_cb(u_char *user, const struct wtap_pkthdr *phdr, int offset,
g_free(fdata);
}
void
int
filter_packets(capture_file *cf, gchar *dftext)
{
dfilter *dfcode;
@ -1026,7 +1026,7 @@ filter_packets(capture_file *cf, gchar *dftext)
if (dfilter_compile(dftext, &dfcode) != 0) {
/* The attempt failed; report an error. */
simple_dialog(ESD_TYPE_WARN, NULL, dfilter_error_msg);
return;
return 0;
}
/* Was it empty? */
@ -1051,6 +1051,7 @@ filter_packets(capture_file *cf, gchar *dftext)
colored. (That's how we colorize the display - it's like filtering
the display, only we don't install a new filter.) */
colorize_packets(cf);
return 1;
}
void

4
file.h
View File

@ -1,7 +1,7 @@
/* file.h
* Definitions for file structures and routines
*
* $Id: file.h,v 1.53 1999/11/18 21:04:54 guy Exp $
* $Id: file.h,v 1.54 1999/11/25 18:02:07 gerald Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@ -124,7 +124,7 @@ int read_cap_file(capture_file *);
int tail_cap_file(char *, capture_file *);
/* size_t read_frame_header(capture_file *); */
void filter_packets(capture_file *cf, gchar *dfilter);
int filter_packets(capture_file *cf, gchar *dfilter);
void colorize_packets(capture_file *);
int print_packets(capture_file *cf, print_args_t *print_args);
void change_time_formats(capture_file *);

View File

@ -1,7 +1,7 @@
/* keys.h
* Key definitions for various objects
*
* $Id: keys.h,v 1.6 1999/09/29 22:19:24 guy Exp $
* $Id: keys.h,v 1.7 1999/11/25 18:02:24 gerald Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@ -28,7 +28,9 @@
/* Keys for gtk_object_set_data */
#define E_DFILTER_TE_KEY "display_filter_te"
#define E_DFILTER_TE_KEY "display_filter_entry"
#define E_DFILTER_CM_KEY "display_filter_combo"
#define E_DFILTER_FL_KEY "display_filter_list"
#define E_RFILTER_TE_KEY "read_filter_te"
#define PRINT_CMD_LB_KEY "printer_command_label"

View File

@ -1,6 +1,6 @@
/* main.c
*
* $Id: main.c,v 1.44 1999/11/23 04:43:44 gram Exp $
* $Id: main.c,v 1.45 1999/11/25 18:02:25 gerald Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@ -668,9 +668,35 @@ hfinfo_numeric_format(header_field_info *hfinfo)
static void
filter_activate_cb(GtkWidget *w, gpointer data)
{
GtkCombo *filter_cm = gtk_object_get_data(GTK_OBJECT(w), E_DFILTER_CM_KEY);
GList *filter_list = gtk_object_get_data(GTK_OBJECT(w), E_DFILTER_FL_KEY);
GList *li, *nl = NULL;
gboolean add_filter = TRUE;
char *s = gtk_entry_get_text(GTK_ENTRY(w));
/* GtkCombos don't let us get at their list contents easily, so we maintain
our own filter list, and feed it to gtk_combo_set_popdown_strings when
a new filter is added. */
if (filter_packets(&cf, g_strdup(s))) {
li = g_list_first(filter_list);
while (li) {
if (li->data && strcmp(s, li->data) == 0)
add_filter = FALSE;
li = li->next;
}
filter_packets(&cf, g_strdup(s));
if (add_filter) {
filter_list = g_list_append(filter_list, g_strdup(s));
li = g_list_first(filter_list);
while (li) {
nl = g_list_append(nl, strdup(li->data));
li = li->next;
}
gtk_combo_set_popdown_strings(filter_cm, nl);
gtk_entry_set_text(GTK_ENTRY(filter_cm->entry), g_list_last(filter_list)->data);
}
}
}
/* redisplay with no display filter */
@ -805,7 +831,9 @@ main(int argc, char *argv[])
#endif
GtkWidget *window, *main_vbox, *menubar, *u_pane, *l_pane,
*bv_table, *bv_hscroll, *bv_vscroll, *stat_hbox,
*tv_scrollw, *filter_bt, *filter_te, *filter_reset;
*tv_scrollw, *filter_bt, *filter_cm, *filter_te,
*filter_reset;
GList *filter_list = NULL;
GtkStyle *pl_style;
GtkAccelGroup *accel;
GtkWidget *packet_sw;
@ -1179,12 +1207,18 @@ main(int argc, char *argv[])
gtk_box_pack_start(GTK_BOX(stat_hbox), filter_bt, FALSE, TRUE, 0);
gtk_widget_show(filter_bt);
filter_te = gtk_entry_new();
filter_cm = gtk_combo_new();
filter_list = g_list_append (filter_list, "");
gtk_combo_set_popdown_strings(GTK_COMBO(filter_cm), filter_list);
gtk_combo_disable_activate(GTK_COMBO(filter_cm));
filter_te = GTK_COMBO(filter_cm)->entry;
gtk_object_set_data(GTK_OBJECT(filter_bt), E_FILT_TE_PTR_KEY, filter_te);
gtk_box_pack_start(GTK_BOX(stat_hbox), filter_te, TRUE, TRUE, 3);
gtk_object_set_data(GTK_OBJECT(filter_te), E_DFILTER_CM_KEY, filter_cm);
gtk_object_set_data(GTK_OBJECT(filter_te), E_DFILTER_FL_KEY, filter_list);
gtk_box_pack_start(GTK_BOX(stat_hbox), filter_cm, TRUE, TRUE, 3);
gtk_signal_connect(GTK_OBJECT(filter_te), "activate",
GTK_SIGNAL_FUNC(filter_activate_cb), (gpointer) NULL);
gtk_widget_show(filter_te);
gtk_widget_show(filter_cm);
filter_reset = gtk_button_new_with_label("Reset");
gtk_object_set_data(GTK_OBJECT(filter_reset), E_DFILTER_TE_KEY, filter_te);