Clean up the data structures for the color filter code a bit. The old
"colfilter" structure contained items of use only when the colorizing dialog was up, so make the items in it private to "gtk/color_dlg.c". Make the "Edit" and "Delete" buttons sensitive only when a row is selected, and make the "Up" and "Down" buttons sensitive only when a row is selected *and* that row has somewhere to move in the specified direction. svn path=/trunk/; revision=5575
This commit is contained in:
parent
8f65a5b2e3
commit
7d85ca00df
3
file.h
3
file.h
|
@ -1,7 +1,7 @@
|
|||
/* file.h
|
||||
* Definitions for file structures and routines
|
||||
*
|
||||
* $Id: file.h,v 1.93 2002/05/23 07:46:58 guy Exp $
|
||||
* $Id: file.h,v 1.94 2002/05/27 22:00:35 guy Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -69,7 +69,6 @@ typedef struct _capture_file {
|
|||
wtap *wth; /* Wiretap session */
|
||||
dfilter_t *rfcode; /* Compiled read filter program */
|
||||
gchar *dfilter; /* Display filter string */
|
||||
struct _colfilter *colors; /* Colors for colorizing packet window */
|
||||
dfilter_t *dfcode; /* Compiled display filter program */
|
||||
#ifdef HAVE_LIBPCAP
|
||||
gchar *cfilter; /* Capture filter string */
|
||||
|
|
289
gtk/color_dlg.c
289
gtk/color_dlg.c
|
@ -1,7 +1,7 @@
|
|||
/* color_dlg.c
|
||||
* Definitions for dialog boxes for color filters
|
||||
*
|
||||
* $Id: color_dlg.c,v 1.13 2002/03/05 11:55:58 guy Exp $
|
||||
* $Id: color_dlg.c,v 1.14 2002/05/27 22:00:37 guy Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -49,12 +49,14 @@
|
|||
#include "dfilter_expr_dlg.h"
|
||||
|
||||
|
||||
static GtkWidget* colorize_dialog_new(colfilter *filter);
|
||||
static GtkWidget* colorize_dialog_new(void);
|
||||
static void add_filter_to_clist(gpointer filter_arg, gpointer clist_arg);
|
||||
static void color_filter_up_cb(GtkButton *button, gpointer user_data);
|
||||
static void color_filter_down_cb(GtkButton *button, gpointer user_data);
|
||||
static void remember_selected_row(GtkCList *clist, gint row, gint column,
|
||||
GdkEvent *event, gpointer user_data);
|
||||
static void unremember_selected_row(GtkCList *clist, gint row, gint column,
|
||||
GdkEvent *event, gpointer user_data);
|
||||
static void color_destroy_cb(GtkButton *button, gpointer user_data);
|
||||
static void destroy_edit_dialog_cb(gpointer filter_arg, gpointer dummy);
|
||||
static void color_new_cb(GtkButton *button, gpointer user_data);
|
||||
|
@ -65,8 +67,7 @@ static void color_ok_cb(GtkButton *button, gpointer user_data);
|
|||
static void color_cancel_cb(GtkWidget *widget, gpointer user_data);
|
||||
static void color_apply_cb(GtkButton *button, gpointer user_data);
|
||||
|
||||
static void edit_color_filter_dialog_new(colfilter *filter,
|
||||
GtkWidget *color_filters,
|
||||
static void edit_color_filter_dialog_new(GtkWidget *color_filters,
|
||||
GtkWidget **colorize_filter_name,
|
||||
GtkWidget **colorize_filter_text);
|
||||
static void edit_color_filter_destroy_cb(GtkObject *object,
|
||||
|
@ -81,10 +82,15 @@ static void color_sel_ok_cb(GtkButton *button, gpointer user_data);
|
|||
static void color_sel_cancel_cb(GtkObject *object, gpointer user_data);
|
||||
|
||||
static GtkWidget *colorize_win;
|
||||
static gint num_of_filters; /* number of filters being displayed */
|
||||
static gint row_selected; /* row in color_filters that is selected */
|
||||
|
||||
static gchar *titles[2] = { "Name", "Filter String" };
|
||||
|
||||
#define COLOR_UP_LB "color_up_lb"
|
||||
#define COLOR_DOWN_LB "color_down_lb"
|
||||
#define COLOR_EDIT_LB "color_edit_lb"
|
||||
#define COLOR_DELETE_LB "color_delete_lb"
|
||||
#define COLOR_FILTERS_CL "color_filters_cl"
|
||||
#define COLOR_FILTER "color_filter"
|
||||
#define COLOR_SELECTION_FG "color_selection_fg"
|
||||
|
@ -108,13 +114,13 @@ color_display_cb(GtkWidget *w _U_, gpointer d _U_)
|
|||
reactivate_window(colorize_win);
|
||||
} else {
|
||||
/* Create a new "Colorize Display" dialog. */
|
||||
colorize_win = colorize_dialog_new(cfile.colors);
|
||||
colorize_win = colorize_dialog_new();
|
||||
}
|
||||
}
|
||||
|
||||
/* Create the "Add color to protocols" dialog. */
|
||||
static GtkWidget*
|
||||
colorize_dialog_new (colfilter *filter)
|
||||
colorize_dialog_new (void)
|
||||
{
|
||||
GtkWidget *color_win;
|
||||
GtkWidget *vbox1;
|
||||
|
@ -136,7 +142,7 @@ colorize_dialog_new (colfilter *filter)
|
|||
GtkWidget *color_cancel;
|
||||
GtkTooltips *tooltips;
|
||||
|
||||
filter->row_selected = -1; /* no row selected */
|
||||
row_selected = -1; /* no row selected */
|
||||
tooltips = gtk_tooltips_new ();
|
||||
|
||||
color_win = dlg_window_new ("Add color to protocols");
|
||||
|
@ -172,6 +178,7 @@ colorize_dialog_new (colfilter *filter)
|
|||
gtk_widget_show (color_filter_up);
|
||||
gtk_box_pack_start (GTK_BOX (vbox2), color_filter_up, FALSE, FALSE, 0);
|
||||
gtk_tooltips_set_tip (tooltips, color_filter_up, ("Move filter higher in list"), NULL);
|
||||
gtk_widget_set_sensitive (color_filter_up, FALSE);
|
||||
|
||||
label4 = gtk_label_new (("Move filter\nup or down\n[List is processed \n"
|
||||
"in order until\nmatch is found]"));
|
||||
|
@ -188,6 +195,7 @@ colorize_dialog_new (colfilter *filter)
|
|||
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);
|
||||
gtk_widget_set_sensitive (color_filter_down, FALSE);
|
||||
/* End vbox2 */
|
||||
|
||||
/* create the list of filters */
|
||||
|
@ -200,6 +208,7 @@ colorize_dialog_new (colfilter *filter)
|
|||
|
||||
color_filters = gtk_clist_new_with_titles(2, titles);
|
||||
|
||||
num_of_filters = 0;
|
||||
g_slist_foreach(filter_list, add_filter_to_clist, color_filters);
|
||||
|
||||
gtk_widget_show (color_filters);
|
||||
|
@ -238,8 +247,7 @@ colorize_dialog_new (colfilter *filter)
|
|||
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_widget_set_sensitive (color_edit, FALSE);
|
||||
|
||||
color_delete = gtk_button_new_with_label (("Delete"));
|
||||
gtk_widget_ref (color_delete);
|
||||
|
@ -249,6 +257,7 @@ colorize_dialog_new (colfilter *filter)
|
|||
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);
|
||||
gtk_widget_set_sensitive (color_delete, FALSE);
|
||||
|
||||
color_save = gtk_button_new_with_label (("Save"));
|
||||
gtk_widget_ref (color_save);
|
||||
|
@ -302,43 +311,52 @@ colorize_dialog_new (colfilter *filter)
|
|||
color_filters);
|
||||
gtk_signal_connect (GTK_OBJECT (color_filter_up), "clicked",
|
||||
GTK_SIGNAL_FUNC (color_filter_up_cb),
|
||||
filter);
|
||||
NULL);
|
||||
gtk_object_set_data(GTK_OBJECT (color_filter_down), COLOR_FILTERS_CL,
|
||||
color_filters);
|
||||
gtk_signal_connect (GTK_OBJECT (color_filter_down), "clicked",
|
||||
GTK_SIGNAL_FUNC (color_filter_down_cb),
|
||||
filter);
|
||||
NULL);
|
||||
gtk_signal_connect (GTK_OBJECT (color_filters), "select_row",
|
||||
GTK_SIGNAL_FUNC (remember_selected_row),
|
||||
filter);
|
||||
gtk_object_set_data(GTK_OBJECT (color_new), COLOR_EDIT_LB,
|
||||
NULL);
|
||||
gtk_signal_connect (GTK_OBJECT (color_filters), "unselect_row",
|
||||
GTK_SIGNAL_FUNC (unremember_selected_row),
|
||||
NULL);
|
||||
gtk_object_set_data(GTK_OBJECT (color_filters), COLOR_UP_LB,
|
||||
color_filter_up);
|
||||
gtk_object_set_data(GTK_OBJECT (color_filters), COLOR_DOWN_LB,
|
||||
color_filter_down);
|
||||
gtk_object_set_data(GTK_OBJECT (color_filters), COLOR_EDIT_LB,
|
||||
color_edit);
|
||||
gtk_object_set_data(GTK_OBJECT (color_filters), COLOR_DELETE_LB,
|
||||
color_delete);
|
||||
gtk_object_set_data(GTK_OBJECT (color_new), COLOR_FILTERS_CL,
|
||||
color_filters);
|
||||
gtk_signal_connect (GTK_OBJECT (color_new), "clicked",
|
||||
GTK_SIGNAL_FUNC (color_new_cb),
|
||||
filter);
|
||||
NULL);
|
||||
gtk_object_set_data(GTK_OBJECT (color_edit), COLOR_FILTERS_CL,
|
||||
color_filters);
|
||||
gtk_signal_connect (GTK_OBJECT (color_edit), "clicked",
|
||||
GTK_SIGNAL_FUNC (color_edit_cb),
|
||||
filter);
|
||||
NULL);
|
||||
gtk_object_set_data(GTK_OBJECT (color_delete), COLOR_EDIT_LB,
|
||||
color_edit);
|
||||
gtk_object_set_data(GTK_OBJECT (color_delete), COLOR_FILTERS_CL,
|
||||
color_filters);
|
||||
gtk_signal_connect (GTK_OBJECT (color_delete), "clicked",
|
||||
GTK_SIGNAL_FUNC (color_delete_cb),
|
||||
filter);
|
||||
NULL);
|
||||
gtk_signal_connect (GTK_OBJECT (color_save), "clicked",
|
||||
GTK_SIGNAL_FUNC (color_save_cb),
|
||||
filter);
|
||||
NULL);
|
||||
gtk_signal_connect (GTK_OBJECT (color_ok), "clicked",
|
||||
GTK_SIGNAL_FUNC (color_ok_cb),
|
||||
NULL);
|
||||
gtk_signal_connect (GTK_OBJECT (color_apply), "clicked",
|
||||
GTK_SIGNAL_FUNC (color_apply_cb),
|
||||
filter);
|
||||
NULL);
|
||||
gtk_signal_connect (GTK_OBJECT (color_cancel), "clicked",
|
||||
GTK_SIGNAL_FUNC (color_cancel_cb),
|
||||
NULL);
|
||||
|
@ -366,80 +384,125 @@ add_filter_to_clist(gpointer filter_arg, gpointer clist_arg)
|
|||
gtk_clist_set_row_data(GTK_CLIST(color_filters), row, colorf);
|
||||
gtk_clist_set_foreground(GTK_CLIST(color_filters), row, &colorf->fg_color);
|
||||
gtk_clist_set_background(GTK_CLIST(color_filters), row, &colorf->bg_color);
|
||||
num_of_filters++;
|
||||
}
|
||||
|
||||
/* Move the selected filter up in the list */
|
||||
static void
|
||||
color_filter_up_cb (GtkButton *button,
|
||||
gpointer user_data)
|
||||
gpointer user_data _U_)
|
||||
{
|
||||
colfilter *filter;
|
||||
gint filter_number;
|
||||
GtkWidget *color_filters;
|
||||
color_filter_t *colorf;
|
||||
|
||||
filter = (colfilter *)user_data;
|
||||
filter_number = filter->row_selected;
|
||||
filter_number = row_selected;
|
||||
g_assert(filter_number > 0);
|
||||
|
||||
/* If it is filter number 0, it cannot be moved, as it's already
|
||||
at the top of the filter.
|
||||
If there's only one filter in the list, it cannot be moved,
|
||||
as there's no place to move it. */
|
||||
if (filter_number != 0 && filter->num_of_filters >= 2) {
|
||||
color_filters = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(button),
|
||||
color_filters = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(button),
|
||||
COLOR_FILTERS_CL);
|
||||
colorf = gtk_clist_get_row_data(GTK_CLIST(color_filters),
|
||||
filter_number);
|
||||
gtk_clist_swap_rows(GTK_CLIST(color_filters), filter_number,
|
||||
filter_number-1);
|
||||
filter_list = g_slist_remove(filter_list, colorf);
|
||||
filter_list = g_slist_insert(filter_list, colorf, filter_number-1);
|
||||
filter->row_selected--;
|
||||
}
|
||||
colorf = gtk_clist_get_row_data(GTK_CLIST(color_filters), filter_number);
|
||||
gtk_clist_swap_rows(GTK_CLIST(color_filters), filter_number, filter_number-1);
|
||||
|
||||
/*
|
||||
* That row is still selected, but it's now row N-1.
|
||||
*/
|
||||
remember_selected_row(GTK_CLIST(color_filters), filter_number-1, 0, NULL,
|
||||
NULL);
|
||||
|
||||
filter_list = g_slist_remove(filter_list, colorf);
|
||||
filter_list = g_slist_insert(filter_list, colorf, filter_number-1);
|
||||
}
|
||||
|
||||
/* Move the selected filter down in the list */
|
||||
static void
|
||||
color_filter_down_cb (GtkButton *button,
|
||||
gpointer user_data)
|
||||
gpointer user_data _U_)
|
||||
{
|
||||
colfilter *filter;
|
||||
gint filter_number;
|
||||
GtkWidget *color_filters;
|
||||
color_filter_t *colorf;
|
||||
|
||||
filter = (colfilter *)user_data;
|
||||
filter_number = filter->row_selected;
|
||||
filter_number = row_selected;
|
||||
g_assert(filter_number < num_of_filters - 1);
|
||||
|
||||
/* If it is the last filter in the list, it cannot be moved, as it's
|
||||
already at the bottom of the filter.
|
||||
If there's only one filter in the list, it cannot be moved,
|
||||
as there's no place to move it. */
|
||||
if (filter_number != filter->num_of_filters-1
|
||||
&& filter->num_of_filters >= 2) {
|
||||
color_filters = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(button),
|
||||
color_filters = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(button),
|
||||
COLOR_FILTERS_CL);
|
||||
colorf = gtk_clist_get_row_data(GTK_CLIST(color_filters),
|
||||
filter_number);
|
||||
gtk_clist_swap_rows(GTK_CLIST(color_filters), filter_number+1,
|
||||
filter_number);
|
||||
filter_list = g_slist_remove(filter_list, colorf);
|
||||
filter_list = g_slist_insert(filter_list, colorf, filter_number+1);
|
||||
filter->row_selected++;
|
||||
}
|
||||
colorf = gtk_clist_get_row_data(GTK_CLIST(color_filters), filter_number);
|
||||
gtk_clist_swap_rows(GTK_CLIST(color_filters), filter_number+1, filter_number);
|
||||
|
||||
/*
|
||||
* That row is still selected, but it's now row N+1.
|
||||
*/
|
||||
remember_selected_row(GTK_CLIST(color_filters), filter_number+1, 0, NULL,
|
||||
NULL);
|
||||
|
||||
filter_list = g_slist_remove(filter_list, colorf);
|
||||
filter_list = g_slist_insert(filter_list, colorf, filter_number+1);
|
||||
}
|
||||
|
||||
/* Set selected row in cf */
|
||||
/* A row was selected; remember its row number */
|
||||
static void
|
||||
remember_selected_row (GtkCList *clist _U_,
|
||||
remember_selected_row (GtkCList *clist,
|
||||
gint row,
|
||||
gint column _U_,
|
||||
GdkEvent *event _U_,
|
||||
gpointer user_data)
|
||||
gpointer user_data _U_)
|
||||
{
|
||||
colfilter *filter = (colfilter *)user_data;
|
||||
GtkWidget *button;
|
||||
|
||||
filter->row_selected = row;
|
||||
row_selected = row;
|
||||
|
||||
/*
|
||||
* A row is selected, so we can move it up *if* it's not at the top
|
||||
* and move it down *if* it's not at the bottom.
|
||||
*/
|
||||
button = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(clist),
|
||||
COLOR_UP_LB);
|
||||
gtk_widget_set_sensitive (button, row > 0);
|
||||
button = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(clist),
|
||||
COLOR_DOWN_LB);
|
||||
gtk_widget_set_sensitive (button, row < num_of_filters - 1);
|
||||
|
||||
/*
|
||||
* A row is selected, so we can operate on it.
|
||||
*/
|
||||
button = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(clist),
|
||||
COLOR_EDIT_LB);
|
||||
gtk_widget_set_sensitive (button, TRUE);
|
||||
button = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(clist),
|
||||
COLOR_DELETE_LB);
|
||||
gtk_widget_set_sensitive (button, TRUE);
|
||||
}
|
||||
|
||||
/* A row was unselected; un-remember its row number */
|
||||
static void
|
||||
unremember_selected_row (GtkCList *clist,
|
||||
gint row _U_,
|
||||
gint column _U_,
|
||||
GdkEvent *event _U_,
|
||||
gpointer user_data _U_)
|
||||
{
|
||||
GtkWidget *button;
|
||||
|
||||
row_selected = -1;
|
||||
|
||||
/*
|
||||
* No row is selected, so we can't do operations that affect the
|
||||
* selected row.
|
||||
*/
|
||||
button = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(clist),
|
||||
COLOR_UP_LB);
|
||||
gtk_widget_set_sensitive (button, FALSE);
|
||||
button = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(clist),
|
||||
COLOR_DOWN_LB);
|
||||
gtk_widget_set_sensitive (button, FALSE);
|
||||
button = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(clist),
|
||||
COLOR_EDIT_LB);
|
||||
gtk_widget_set_sensitive (button, FALSE);
|
||||
button = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(clist),
|
||||
COLOR_DELETE_LB);
|
||||
gtk_widget_set_sensitive (button, FALSE);
|
||||
}
|
||||
|
||||
/* Called when the dialog box is being destroyed; destroy any edit
|
||||
|
@ -474,17 +537,14 @@ static GtkWidget *filt_text_entry;
|
|||
dialog box to edit it. */
|
||||
static void
|
||||
color_new_cb (GtkButton *button,
|
||||
gpointer user_data)
|
||||
gpointer user_data _U_)
|
||||
{
|
||||
colfilter *filter;
|
||||
color_filter_t *colorf;
|
||||
GtkWidget *color_filters;
|
||||
gchar *data[2];
|
||||
gint row;
|
||||
GtkWidget *color_edit;
|
||||
|
||||
filter = (colfilter *)user_data;
|
||||
colorf = new_color_filter(filter, "name", "filter"); /* Adds at end! */
|
||||
colorf = new_color_filter("name", "filter"); /* Adds at end! */
|
||||
|
||||
color_filters = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(button),
|
||||
COLOR_FILTERS_CL);
|
||||
|
@ -492,60 +552,44 @@ color_new_cb (GtkButton *button,
|
|||
data[1] = colorf->filter_text;
|
||||
row = gtk_clist_append(GTK_CLIST(color_filters), data);
|
||||
gtk_clist_set_row_data(GTK_CLIST(color_filters), row, colorf);
|
||||
num_of_filters++;
|
||||
|
||||
/* A row has been added, so we can edit it. */
|
||||
color_edit = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(button),
|
||||
COLOR_EDIT_LB);
|
||||
gtk_widget_set_sensitive (color_edit, TRUE);
|
||||
|
||||
/* select the new (last) row */
|
||||
filter->row_selected = filter->num_of_filters;
|
||||
filter->num_of_filters++;
|
||||
gtk_clist_select_row(GTK_CLIST(color_filters), filter->row_selected, -1);
|
||||
edit_color_filter_dialog_new(filter, color_filters, &filt_name_entry,
|
||||
/* select the new row */
|
||||
gtk_clist_select_row(GTK_CLIST(color_filters), row, -1);
|
||||
edit_color_filter_dialog_new(color_filters, &filt_name_entry,
|
||||
&filt_text_entry);
|
||||
}
|
||||
|
||||
/* Pop up an "Edit color filter" dialog box to edit an existing filter. */
|
||||
static void
|
||||
color_edit_cb (GtkButton *button,
|
||||
gpointer user_data)
|
||||
gpointer user_data _U_)
|
||||
{
|
||||
colfilter *filter;
|
||||
GtkWidget *color_filters;
|
||||
|
||||
filter = (colfilter *)user_data;
|
||||
color_filters = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(button),
|
||||
COLOR_FILTERS_CL);
|
||||
if(filter->row_selected == -1){
|
||||
/* select the first row */
|
||||
filter->row_selected = 0;
|
||||
gtk_clist_select_row(GTK_CLIST(color_filters), filter->row_selected,
|
||||
-1);
|
||||
}
|
||||
edit_color_filter_dialog_new(filter, color_filters, &filt_name_entry,
|
||||
g_assert(row_selected != -1);
|
||||
edit_color_filter_dialog_new(color_filters, &filt_name_entry,
|
||||
&filt_text_entry);
|
||||
}
|
||||
|
||||
/* Delete a color from the list. */
|
||||
static void
|
||||
color_delete_cb(GtkWidget *widget, gpointer user_data)
|
||||
color_delete_cb(GtkWidget *widget, gpointer user_data _U_)
|
||||
{
|
||||
colfilter *filter;
|
||||
GtkWidget *color_filters;
|
||||
color_filter_t *colorf;
|
||||
GtkWidget *color_edit;
|
||||
|
||||
filter = (colfilter *)user_data;
|
||||
if(filter->row_selected != -1){
|
||||
if(row_selected != -1){
|
||||
color_filters = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(widget),
|
||||
COLOR_FILTERS_CL);
|
||||
colorf = gtk_clist_get_row_data(GTK_CLIST(color_filters),
|
||||
filter->row_selected);
|
||||
colorf = gtk_clist_get_row_data(GTK_CLIST(color_filters), row_selected);
|
||||
|
||||
/* Remove this color filter from the CList displaying the
|
||||
color filters. */
|
||||
gtk_clist_remove(GTK_CLIST(color_filters), filter->row_selected);
|
||||
gtk_clist_remove(GTK_CLIST(color_filters), row_selected);
|
||||
num_of_filters--;
|
||||
|
||||
/* Destroy any "Edit color filter" dialog boxes editing it. */
|
||||
if (colorf->edit_dialog != NULL)
|
||||
|
@ -553,22 +597,11 @@ color_delete_cb(GtkWidget *widget, gpointer user_data)
|
|||
|
||||
/* Remove the color filter from the list of color filters. */
|
||||
delete_color_filter(colorf);
|
||||
filter->num_of_filters--;
|
||||
if(!filter->num_of_filters){
|
||||
/* No filters any more, so none can be selected... */
|
||||
filter->row_selected = -1;
|
||||
color_edit =
|
||||
(GtkWidget *) gtk_object_get_data(GTK_OBJECT(widget),
|
||||
COLOR_EDIT_LB);
|
||||
|
||||
/* ...and none can be edited. */
|
||||
gtk_widget_set_sensitive (color_edit, FALSE);
|
||||
} else {
|
||||
filter->row_selected--;
|
||||
if(filter->row_selected < 0)
|
||||
filter->row_selected = 0;
|
||||
gtk_clist_select_row(GTK_CLIST(color_filters),
|
||||
filter->row_selected, 0);
|
||||
/* Select the previous row, if there is one. */
|
||||
if (row_selected > 0) {
|
||||
row_selected--;
|
||||
gtk_clist_select_row(GTK_CLIST(color_filters), row_selected, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -576,11 +609,9 @@ color_delete_cb(GtkWidget *widget, gpointer user_data)
|
|||
/* Save color filters to the color filter file. */
|
||||
static void
|
||||
color_save_cb (GtkButton *button _U_,
|
||||
gpointer user_data)
|
||||
gpointer user_data _U_)
|
||||
{
|
||||
colfilter *filter = (colfilter *)user_data;
|
||||
|
||||
if (!write_filters(filter))
|
||||
if (!write_filters())
|
||||
simple_dialog(ESD_TYPE_CRIT, NULL, "Could not open filter file: %s",
|
||||
strerror(errno));
|
||||
|
||||
|
@ -619,8 +650,7 @@ color_apply_cb (GtkButton *button _U_,
|
|||
/* Create an "Edit color filter" dialog for a given color filter, and
|
||||
associate it with that color filter. */
|
||||
static void
|
||||
edit_color_filter_dialog_new (colfilter *filter,
|
||||
GtkWidget *color_filters,
|
||||
edit_color_filter_dialog_new (GtkWidget *color_filters,
|
||||
GtkWidget **colorize_filter_name,
|
||||
GtkWidget **colorize_filter_text)
|
||||
{
|
||||
|
@ -641,8 +671,7 @@ edit_color_filter_dialog_new (colfilter *filter,
|
|||
GtkTooltips *tooltips;
|
||||
GtkStyle *style;
|
||||
|
||||
colorf = gtk_clist_get_row_data(GTK_CLIST(color_filters),
|
||||
filter->row_selected);
|
||||
colorf = gtk_clist_get_row_data(GTK_CLIST(color_filters), row_selected);
|
||||
if (colorf->edit_dialog != NULL) {
|
||||
/* There's already an edit box open for this filter; reactivate it. */
|
||||
reactivate_window(colorf->edit_dialog);
|
||||
|
@ -788,12 +817,12 @@ edit_color_filter_dialog_new (colfilter *filter,
|
|||
colorf);
|
||||
gtk_signal_connect (GTK_OBJECT (colorize_filter_fg), "clicked",
|
||||
GTK_SIGNAL_FUNC (edit_color_filter_fg_cb),
|
||||
filter);
|
||||
NULL);
|
||||
gtk_object_set_data(GTK_OBJECT (colorize_filter_bg), COLOR_FILTER,
|
||||
colorf);
|
||||
gtk_signal_connect (GTK_OBJECT (colorize_filter_bg), "clicked",
|
||||
GTK_SIGNAL_FUNC (edit_color_filter_bg_cb),
|
||||
filter);
|
||||
NULL);
|
||||
gtk_object_set_data(GTK_OBJECT (edit_color_filter_ok), COLOR_FILTERS_CL,
|
||||
color_filters);
|
||||
gtk_object_set_data(GTK_OBJECT (edit_color_filter_ok), COLOR_FILTER,
|
||||
|
@ -839,13 +868,11 @@ edit_color_filter_destroy_cb (GtkObject *object,
|
|||
/* Pop up a color selection box to choose the foreground color. */
|
||||
static void
|
||||
edit_color_filter_fg_cb (GtkButton *button,
|
||||
gpointer user_data)
|
||||
gpointer user_data _U_)
|
||||
{
|
||||
colfilter *filter;
|
||||
color_filter_t *colorf;
|
||||
GtkWidget *color_selection_fg;
|
||||
|
||||
filter = (colfilter *)user_data;
|
||||
colorf = (color_filter_t *) gtk_object_get_data(GTK_OBJECT(button),
|
||||
COLOR_FILTER);
|
||||
/* Do we already have one open for this dialog? */
|
||||
|
@ -868,13 +895,11 @@ edit_color_filter_fg_cb (GtkButton *button,
|
|||
/* Pop up a color selection box to choose the background color. */
|
||||
static void
|
||||
edit_color_filter_bg_cb (GtkButton *button,
|
||||
gpointer user_data)
|
||||
gpointer user_data _U_)
|
||||
{
|
||||
colfilter *filter;
|
||||
color_filter_t *colorf;
|
||||
GtkWidget *color_selection_bg;
|
||||
|
||||
filter = (colfilter *)user_data;
|
||||
colorf = (color_filter_t *) gtk_object_get_data(GTK_OBJECT(button),
|
||||
COLOR_FILTER);
|
||||
|
||||
|
@ -945,18 +970,18 @@ edit_color_filter_ok_cb (GtkButton *button,
|
|||
colorf->filter_text = filter_text;
|
||||
colorf->fg_color = new_fg_color;
|
||||
colorf->bg_color = new_bg_color;
|
||||
gtk_clist_set_foreground(GTK_CLIST(color_filters),
|
||||
cfile.colors->row_selected, &new_fg_color);
|
||||
gtk_clist_set_background(GTK_CLIST(color_filters),
|
||||
cfile.colors->row_selected, &new_bg_color);
|
||||
gtk_clist_set_foreground(GTK_CLIST(color_filters), row_selected,
|
||||
&new_fg_color);
|
||||
gtk_clist_set_background(GTK_CLIST(color_filters), row_selected,
|
||||
&new_bg_color);
|
||||
if(colorf->c_colorfilter != NULL)
|
||||
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),
|
||||
cfile.colors->row_selected, 0, filter_name);
|
||||
gtk_clist_set_text(GTK_CLIST(color_filters),
|
||||
cfile.colors->row_selected, 1, filter_text);
|
||||
gtk_clist_set_text(GTK_CLIST(color_filters), row_selected, 0,
|
||||
filter_name);
|
||||
gtk_clist_set_text(GTK_CLIST(color_filters), row_selected, 1,
|
||||
filter_text);
|
||||
|
||||
/* Destroy the dialog box. */
|
||||
gtk_widget_destroy(dialog);
|
||||
|
|
32
gtk/colors.c
32
gtk/colors.c
|
@ -1,7 +1,7 @@
|
|||
/* colors.c
|
||||
* Definitions for color structures and routines
|
||||
*
|
||||
* $Id: colors.c,v 1.19 2002/01/21 07:37:41 guy Exp $
|
||||
* $Id: colors.c,v 1.20 2002/05/27 22:00:37 guy Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -51,7 +51,7 @@
|
|||
|
||||
extern capture_file cf;
|
||||
|
||||
static gboolean read_filters(colfilter *filter);
|
||||
static gboolean read_filters(void);
|
||||
|
||||
GSList *filter_list;
|
||||
|
||||
|
@ -62,16 +62,11 @@ GdkColor WHITE = { 0, 65535, 65535, 65535 };
|
|||
GdkColor BLACK = { 0, 0, 0, 0 };
|
||||
|
||||
/* Initialize the filter structures (reading from file) */
|
||||
colfilter *
|
||||
colfilter_new(void)
|
||||
void
|
||||
colfilter_init(void)
|
||||
{
|
||||
colfilter *filter;
|
||||
gboolean got_white, got_black;
|
||||
|
||||
/* Create the filter header */
|
||||
filter = (colfilter *)g_malloc(sizeof(colfilter));
|
||||
filter->num_of_filters = 0;
|
||||
|
||||
sys_cmap = gdk_colormap_get_system();
|
||||
|
||||
/* Allocate "constant" colors. */
|
||||
|
@ -92,14 +87,12 @@ colfilter_new(void)
|
|||
"Could not allocate color black.");
|
||||
}
|
||||
|
||||
read_filters(filter);
|
||||
return filter;
|
||||
read_filters();
|
||||
}
|
||||
|
||||
/* Create a new filter */
|
||||
color_filter_t *
|
||||
new_color_filter(colfilter *filters, /* The filter list (unused) */
|
||||
gchar *name, /* The name of the filter to create */
|
||||
new_color_filter(gchar *name, /* The name of the filter to create */
|
||||
gchar *filter_string) /* The string representing the filter */
|
||||
{
|
||||
color_filter_t *colorf;
|
||||
|
@ -150,7 +143,7 @@ filter_list_prime_edt(epan_dissect_t *edt)
|
|||
|
||||
/* read filters from the file */
|
||||
static gboolean
|
||||
read_filters(colfilter *filter)
|
||||
read_filters(void)
|
||||
{
|
||||
/* TODO: Lots more syntax checking on the file */
|
||||
/* I hate these fixed length names! TODO: make more dynamic */
|
||||
|
@ -166,12 +159,6 @@ read_filters(colfilter *filter)
|
|||
dfilter_t *temp_dfilter;
|
||||
|
||||
/* decide what file to open (from dfilter code) */
|
||||
|
||||
/* should only be called by colors_init */
|
||||
if (filter == NULL)
|
||||
return FALSE;
|
||||
/* we have a clist */
|
||||
|
||||
path = get_persconffile_path("colorfilters", FALSE);
|
||||
if ((f = fopen(path, "r")) == NULL) {
|
||||
if (errno != ENOENT) {
|
||||
|
@ -223,9 +210,8 @@ read_filters(colfilter *filter)
|
|||
continue;
|
||||
}
|
||||
|
||||
colorf = new_color_filter(filter, name, filter_exp);
|
||||
colorf = new_color_filter(name, filter_exp);
|
||||
colorf->c_colorfilter = temp_dfilter;
|
||||
filter->num_of_filters++;
|
||||
fg_color.red = fg_r;
|
||||
fg_color.green = fg_g;
|
||||
fg_color.blue = fg_b;
|
||||
|
@ -259,7 +245,7 @@ write_filter(gpointer filter_arg, gpointer file_arg)
|
|||
|
||||
/* save filters in filter file */
|
||||
gboolean
|
||||
write_filters(colfilter *filter)
|
||||
write_filters(void)
|
||||
{
|
||||
gchar *pf_dir_path;
|
||||
const gchar *path;
|
||||
|
|
14
gtk/colors.h
14
gtk/colors.h
|
@ -1,7 +1,7 @@
|
|||
/* colors.h
|
||||
* Definitions for color structures and routines
|
||||
*
|
||||
* $Id: colors.h,v 1.6 2002/01/21 07:37:41 guy Exp $
|
||||
* $Id: colors.h,v 1.7 2002/05/27 22:00:37 guy Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -52,17 +52,11 @@ typedef struct _color_filter {
|
|||
/* List of all color filters. */
|
||||
extern GSList *filter_list;
|
||||
|
||||
typedef struct _colfilter {
|
||||
gint num_of_filters; /* first num_of_filters rows filled */
|
||||
gint row_selected; /* row in color_filters that is selected */
|
||||
} colfilter;
|
||||
void colfilter_init(void);
|
||||
|
||||
colfilter *colfilter_new(void);
|
||||
gboolean write_filters(void);
|
||||
|
||||
gboolean write_filters(colfilter *filter);
|
||||
|
||||
color_filter_t *new_color_filter(colfilter *filters, gchar *name,
|
||||
gchar *filter_string);
|
||||
color_filter_t *new_color_filter(gchar *name, gchar *filter_string);
|
||||
void delete_color_filter(color_filter_t *colorf);
|
||||
|
||||
gboolean get_color (GdkColor *new_color);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* main.c
|
||||
*
|
||||
* $Id: main.c,v 1.250 2002/05/22 23:22:56 guy Exp $
|
||||
* $Id: main.c,v 1.251 2002/05/27 22:00:37 guy Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -1876,7 +1876,7 @@ main(int argc, char *argv[])
|
|||
create_main_window(pl_size, tv_size, bv_size, prefs);
|
||||
set_menus_for_capture_file(FALSE);
|
||||
|
||||
cfile.colors = colfilter_new();
|
||||
colfilter_init();
|
||||
|
||||
/* If we were given the name of a capture file, read it in now;
|
||||
we defer it until now, so that, if we can't open it, and pop
|
||||
|
|
Loading…
Reference in New Issue