/* color_dlg.c
* Definitions for dialog boxes for color filters
*
- * $Id: color_dlg.c,v 1.4 2000/07/05 02:45:38 guy Exp $
+ * $Id: color_dlg.c,v 1.12 2002/01/21 07:37:41 guy Exp $
*
* Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@zing.org>
+ * 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
#include <string.h>
#include <errno.h>
+
+#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
+#endif
#include "gtk/main.h"
-#include "packet.h"
+#include <epan/packet.h>
#include "colors.h"
#include "color_dlg.h"
#include "file.h"
-#include "dfilter.h"
+#include <epan/dfilter/dfilter.h>
#include "simple_dialog.h"
#include "dlg_utils.h"
#include "ui_util.h"
-
+#include "dfilter_expr_dlg.h"
+
+
static GtkWidget* colorize_dialog_new(colfilter *filter);
static void add_filter_to_clist(gpointer filter_arg, gpointer clist_arg);
static void color_filter_up_cb(GtkButton *button, gpointer user_data);
#define COLOR_SELECTION_BG "color_selection_bg"
#define COLOR_SELECTION_PARENT "color_selection_parent"
+static void
+filter_expr_cb(GtkWidget *w, gpointer filter_te)
+{
+
+ dfilter_expr_dlg_new(GTK_WIDGET(filter_te));
+}
+
+
/* Callback for the "Display:Colorize Display" menu item. */
void
color_display_cb(GtkWidget *w, gpointer d)
GtkWidget *vbox1;
GtkWidget *hbox1;
GtkWidget *vbox2;
+ GtkWidget *vbox4;
GtkWidget *color_filter_up;
GtkWidget *label4;
GtkWidget *color_filter_down;
GtkWidget *scrolledwindow1;
GtkWidget *color_filters;
- GtkWidget *hbox2;
GtkWidget *color_new;
GtkWidget *color_edit;
GtkWidget *color_delete;
filter->row_selected = -1; /* no row selected */
tooltips = gtk_tooltips_new ();
- color_win = dlg_window_new ();
+ color_win = dlg_window_new ("Add color to protocols");
gtk_object_set_data (GTK_OBJECT (color_win), "color_win", color_win);
- gtk_window_set_title (GTK_WINDOW (color_win), ("Add color to protocols"));
vbox1 = gtk_vbox_new (FALSE, 0);
gtk_widget_ref (vbox1);
gtk_widget_show (hbox1);
gtk_box_pack_start (GTK_BOX (vbox1), hbox1, TRUE, TRUE, 0);
+ /* vbox2 holds the Up and Down Buttons and label */
vbox2 = gtk_vbox_new (TRUE, 0);
gtk_widget_ref (vbox2);
gtk_object_set_data_full (GTK_OBJECT (color_win), "vbox2", vbox2,
gtk_widget_show (color_filter_down);
gtk_box_pack_start (GTK_BOX (vbox2), color_filter_down, FALSE, FALSE, 0);
gtk_tooltips_set_tip (tooltips, color_filter_down, ("Move filter lower in list"), NULL);
+ /* End vbox2 */
+ /* create the list of filters */
scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
gtk_widget_ref (scrolledwindow1);
gtk_object_set_data_full (GTK_OBJECT (color_win), "scrolledwindow1", scrolledwindow1,
color_filters = gtk_clist_new_with_titles(2, titles);
-#if 0
- /* I don't seem to need this, but just in case, I'll if0 it */
- gtk_object_set_data_full (GTK_OBJECT (color_win), "color_filters",
- color_filters,
- (GtkDestroyNotify) gtk_widget_unref);
-#endif
g_slist_foreach(filter_list, add_filter_to_clist, color_filters);
gtk_widget_show (color_filters);
gtk_clist_set_column_width (GTK_CLIST (color_filters), 0, 80);
gtk_clist_set_column_width (GTK_CLIST (color_filters), 1, 80);
gtk_clist_column_titles_show (GTK_CLIST (color_filters));
+ /* end list of filters */
- hbox2 = gtk_hbox_new (FALSE, 0);
- gtk_widget_ref (hbox2);
- gtk_object_set_data_full (GTK_OBJECT (color_win), "hbox2", hbox2,
+ /* vbox4 is first button column */
+ vbox4 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_ref (vbox4);
+ gtk_object_set_data_full (GTK_OBJECT (color_win), "vbox4", vbox4,
(GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (hbox2);
- gtk_box_pack_start (GTK_BOX (vbox1), hbox2, TRUE, FALSE, 5);
- gtk_widget_set_usize (hbox2, -2, 40);
+ gtk_widget_show (vbox4);
+ gtk_box_pack_start (GTK_BOX (hbox1), vbox4, TRUE, FALSE, 5);
+#if 0
+ gtk_widget_set_usize (vbox4, -2, 30);
+#endif
color_new = gtk_button_new_with_label (("New"));
gtk_widget_ref (color_new);
gtk_object_set_data_full (GTK_OBJECT (color_win), "color_new", color_new,
(GtkDestroyNotify) gtk_widget_unref);
gtk_widget_show (color_new);
- gtk_box_pack_start (GTK_BOX (hbox2), color_new, TRUE, FALSE, 5);
- gtk_widget_set_usize (color_new, 50, 30);
+ gtk_box_pack_start (GTK_BOX (vbox4), color_new, FALSE, FALSE, 5);
+ gtk_widget_set_usize (color_new, 50, 20);
gtk_tooltips_set_tip (tooltips, color_new, ("Create a new colorization filter after selected filter"), NULL);
color_edit = gtk_button_new_with_label (("Edit"));
gtk_object_set_data_full (GTK_OBJECT (color_win), "color_edit", color_edit,
(GtkDestroyNotify) gtk_widget_unref);
gtk_widget_show (color_edit);
- gtk_widget_set_usize(color_edit, 50, 30);
- gtk_box_pack_start (GTK_BOX (hbox2), color_edit, TRUE, FALSE, 5);
+ gtk_widget_set_usize(color_edit, 50, 20);
+ gtk_box_pack_start (GTK_BOX (vbox4), color_edit, FALSE, FALSE, 5);
gtk_tooltips_set_tip (tooltips, color_edit, ("Change color of selected filter"), NULL);
gtk_widget_set_sensitive (color_edit,
(filter->num_of_filters != 0));
gtk_object_set_data_full (GTK_OBJECT (color_win), "color_delete", color_delete,
(GtkDestroyNotify) gtk_widget_unref);
gtk_widget_show (color_delete);
- gtk_box_pack_start (GTK_BOX (hbox2), color_delete, TRUE, FALSE, 5);
- gtk_widget_set_usize (color_delete, 50, 30);
+ gtk_box_pack_start (GTK_BOX (vbox4), color_delete, FALSE, FALSE, 5);
+ gtk_widget_set_usize (color_delete, 50, 20);
gtk_tooltips_set_tip (tooltips, color_delete, ("Delete selected colorization filter"), NULL);
color_save = gtk_button_new_with_label (("Save"));
gtk_object_set_data_full (GTK_OBJECT (color_win), "color_save", color_save,
(GtkDestroyNotify) gtk_widget_unref);
gtk_widget_show (color_save);
- gtk_box_pack_start (GTK_BOX (hbox2), color_save, TRUE, FALSE, 5);
- gtk_widget_set_usize (color_save, 50, 30);
+ gtk_box_pack_start (GTK_BOX (vbox4), color_save, FALSE, FALSE, 5);
+ gtk_widget_set_usize (color_save, 50, 20);
gtk_tooltips_set_tip (tooltips, color_save, ("Save all filters to disk"), NULL);
+ /* hbox3 is bottom button row */
hbox3 = gtk_hbox_new (FALSE, 0);
gtk_widget_ref (hbox3);
gtk_object_set_data_full (GTK_OBJECT (color_win), "hbox3", hbox3,
(GtkDestroyNotify) gtk_widget_unref);
gtk_widget_show (hbox3);
gtk_box_pack_start (GTK_BOX (vbox1), hbox3, TRUE, FALSE, 5);
- gtk_widget_set_usize (hbox3, 177, 40);
+ gtk_widget_set_usize (hbox3, 177, 30);
color_ok = gtk_button_new_with_label (("OK"));
gtk_widget_ref (color_ok);
(GtkDestroyNotify) gtk_widget_unref);
gtk_widget_show (color_ok);
gtk_box_pack_start (GTK_BOX (hbox3), color_ok, TRUE, FALSE, 0);
- gtk_widget_set_usize (color_ok, 50, 30);
+ gtk_widget_set_usize (color_ok, 50, 20);
gtk_tooltips_set_tip (tooltips, color_ok, ("Accept filter list; apply changes"), NULL);
color_apply = gtk_button_new_with_label (("Apply"));
(GtkDestroyNotify) gtk_widget_unref);
gtk_widget_show (color_apply);
gtk_box_pack_start (GTK_BOX (hbox3), color_apply, TRUE, FALSE, 0);
- gtk_widget_set_usize (color_apply, 50, 30);
+ gtk_widget_set_usize (color_apply, 50, 20);
gtk_tooltips_set_tip (tooltips, color_apply, ("Apply filters in list"), NULL);
color_cancel = gtk_button_new_with_label (("Cancel"));
(GtkDestroyNotify) gtk_widget_unref);
gtk_widget_show (color_cancel);
gtk_box_pack_start (GTK_BOX (hbox3), color_cancel, TRUE, FALSE, 0);
- gtk_widget_set_usize (color_cancel, 50, 30);
+ gtk_widget_set_usize (color_cancel, 50, 20);
gtk_tooltips_set_tip (tooltips, color_cancel, ("No more filter changes; don't apply"), NULL);
gtk_signal_connect (GTK_OBJECT (color_win), "destroy",
gtk_object_set_data (GTK_OBJECT (color_win), "tooltips", tooltips);
gtk_widget_show (color_win);
+ dlg_set_cancel(color_win, color_cancel);
+
return color_win;
}
}
/* Called when the dialog box is being destroyed; destroy any edit
- dialogs opened from this dialog, and null out the pointer to this
- dialog. */
+ * dialogs opened from this dialog, and null out the pointer to this
+ * dialog.
+ jjj*/
static void
color_destroy_cb (GtkButton *button,
gpointer user_data)
colfilter *filter = (colfilter *)user_data;
if (!write_filters(filter))
- simple_dialog(ESD_TYPE_WARN, NULL, "Could not open filter file: %s",
+ simple_dialog(ESD_TYPE_CRIT, NULL, "Could not open filter file: %s",
strerror(errno));
}
GtkWidget *hbox6;
GtkWidget *color_filter_name;
GtkWidget *hbox7;
+ GtkWidget *add_expression_bt;
GtkWidget *color_filter_text;
GtkWidget *hbox5;
GtkWidget *colorize_filter_fg;
tooltips = gtk_tooltips_new ();
- edit_dialog = dlg_window_new ();
+ edit_dialog = dlg_window_new ("Edit color filter");
gtk_object_set_data (GTK_OBJECT (edit_dialog), "edit_dialog", edit_dialog);
- gtk_window_set_title (GTK_WINDOW (edit_dialog), ("Edit color filter"));
colorf->edit_dialog = edit_dialog;
vbox3 = gtk_vbox_new (FALSE, 0);
gtk_object_set_data_full (GTK_OBJECT (edit_dialog), "*colorize_filter_text", *colorize_filter_text,
(GtkDestroyNotify) gtk_widget_unref);
gtk_entry_set_text(GTK_ENTRY(*colorize_filter_text), colorf->filter_text);
+
+
#if 0
style = gtk_style_copy(gtk_widget_get_style(*colorize_filter_text));
style->base[GTK_STATE_NORMAL] = colorf->bg_color;
gtk_box_pack_start (GTK_BOX (hbox7), *colorize_filter_text, TRUE, TRUE, 0);
gtk_tooltips_set_tip (tooltips, *colorize_filter_text, ("This is the editable text of the filter"), NULL);
+ /* Create the "Add Expression..." button, to pop up a dialog
+ for constructing filter comparison expressions. */
+ add_expression_bt = gtk_button_new_with_label("Add Expression...");
+ gtk_signal_connect(GTK_OBJECT(add_expression_bt), "clicked",
+ GTK_SIGNAL_FUNC(filter_expr_cb), *colorize_filter_text);
+ gtk_box_pack_start (GTK_BOX(hbox7), add_expression_bt, FALSE, FALSE, 3);
+ gtk_widget_show(add_expression_bt);
+
hbox5 = gtk_hbox_new (FALSE, 0);
gtk_widget_ref (hbox5);
gtk_object_set_data_full (GTK_OBJECT (edit_dialog), "hbox5", hbox5,
(GtkDestroyNotify) gtk_widget_unref);
gtk_widget_show (hbox4);
gtk_box_pack_start (GTK_BOX (vbox3), hbox4, TRUE, FALSE, 5);
- gtk_widget_set_usize (hbox4, -2, 40);
+ gtk_widget_set_usize (hbox4, -2, 30);
edit_color_filter_ok = gtk_button_new_with_label (("OK"));
gtk_widget_ref (edit_color_filter_ok);
gtk_object_set_data_full (GTK_OBJECT (edit_dialog), "edit_color_filter_ok", edit_color_filter_ok,
(GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_set_usize (edit_color_filter_ok, 50, 30);
+ gtk_widget_set_usize (edit_color_filter_ok, 50, 20);
gtk_widget_show (edit_color_filter_ok);
gtk_box_pack_start (GTK_BOX (hbox4), edit_color_filter_ok, TRUE, FALSE, 0);
gtk_tooltips_set_tip (tooltips, edit_color_filter_ok, ("Accept filter color change"), NULL);
gtk_widget_ref (edit_color_filter_cancel);
gtk_object_set_data_full (GTK_OBJECT (edit_dialog), "edit_color_filter_cancel", edit_color_filter_cancel,
(GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_set_usize (edit_color_filter_cancel, 50, 30);
+ gtk_widget_set_usize (edit_color_filter_cancel, 50, 20);
gtk_widget_show (edit_color_filter_cancel);
gtk_box_pack_start (GTK_BOX (hbox4), edit_color_filter_cancel, TRUE, FALSE, 0);
gtk_tooltips_set_tip (tooltips, edit_color_filter_cancel, ("Reject filter color change"), NULL);
edit_dialog);
gtk_object_set_data (GTK_OBJECT (edit_dialog), "tooltips", tooltips);
+
+ dlg_set_cancel(edit_dialog, edit_color_filter_cancel);
+
gtk_widget_show (edit_dialog);
}
gchar *filter_name;
gchar *filter_text;
color_filter_t *colorf;
- dfilter *compiled_filter;
+ dfilter_t *compiled_filter;
GtkWidget *color_filters;
dialog = (GtkWidget *)user_data;
filter_text = g_strdup(gtk_entry_get_text(GTK_ENTRY(filt_text_entry)));
if(strchr(filter_name,'@') || strchr(filter_text,'@')){
- simple_dialog(ESD_TYPE_WARN,NULL, "Filter names and strings must not"
+ simple_dialog(ESD_TYPE_CRIT, NULL, "Filter names and strings must not"
" use the '@' character. Filter unchanged.");
g_free(filter_name);
g_free(filter_text);
return;
}
- if(dfilter_compile(filter_text, &compiled_filter) != 0 ){
- simple_dialog(ESD_TYPE_WARN, NULL, "Filter \"%s\" did not compile correctly.\n"
+ if(!dfilter_compile(filter_text, &compiled_filter)) {
+ simple_dialog(ESD_TYPE_CRIT, NULL, "Filter \"%s\" did not compile correctly.\n"
" Please try again. Filter unchanged.\n%s\n", filter_name,
dfilter_error_msg);
} else {
gtk_clist_set_background(GTK_CLIST(color_filters),
cfile.colors->row_selected, &new_bg_color);
if(colorf->c_colorfilter != NULL)
- dfilter_destroy(colorf->c_colorfilter);
+ dfilter_free(colorf->c_colorfilter);
colorf->c_colorfilter = compiled_filter;
/* gtk_clist_set_text frees old text (if any) and allocates new space */
gtk_clist_set_text(GTK_CLIST(color_filters),
new_color.blue = (guint16)(new_colors[2]*65535.0);
if ( ! get_color(&new_color) ){
- simple_dialog(ESD_TYPE_WARN, NULL, "Could not allocate color. Try again.");
+ simple_dialog(ESD_TYPE_CRIT, NULL, "Could not allocate color. Try again.");
} else {
/* Find the "Edit color filter" dialog box with which this is
associated. */