forked from osmocom/wireshark
GtkList to GtkTreeView conversion.
svn path=/trunk/; revision=6217
This commit is contained in:
parent
d3202fcc7d
commit
1cfc7d562c
|
@ -6,7 +6,7 @@ GtkList and GtkCList ==> GtkTreeView conversion :
|
||||||
- column_prefs.c
|
- column_prefs.c
|
||||||
- decode_as_dlg.c : done
|
- decode_as_dlg.c : done
|
||||||
- dfilter_expr_dialog.c
|
- dfilter_expr_dialog.c
|
||||||
- filter_prefs.c
|
- filter_prefs.c : done
|
||||||
- main.c
|
- main.c
|
||||||
- plugins_dlg.c : done
|
- plugins_dlg.c : done
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* (This used to be a notebook page under "Preferences", hence the
|
* (This used to be a notebook page under "Preferences", hence the
|
||||||
* "prefs" in the file name.)
|
* "prefs" in the file name.)
|
||||||
*
|
*
|
||||||
* $Id: filter_prefs.c,v 1.1 2002/08/31 09:55:21 oabad Exp $
|
* $Id: filter_prefs.c,v 1.2 2002/09/07 10:48:07 oabad Exp $
|
||||||
*
|
*
|
||||||
* Ethereal - Network traffic analyzer
|
* Ethereal - Network traffic analyzer
|
||||||
* By Gerald Combs <gerald@ethereal.com>
|
* By Gerald Combs <gerald@ethereal.com>
|
||||||
|
@ -62,7 +62,8 @@ typedef struct _filter_cb_data {
|
||||||
} filter_cb_data;
|
} filter_cb_data;
|
||||||
|
|
||||||
static GtkWidget *filter_dialog_new(GtkWidget *caller, GtkWidget *filter_te,
|
static GtkWidget *filter_dialog_new(GtkWidget *caller, GtkWidget *filter_te,
|
||||||
filter_list_type_t list, construct_args_t *construct_args);
|
filter_list_type_t list,
|
||||||
|
construct_args_t *construct_args);
|
||||||
static void filter_dlg_dclick(GtkWidget *dummy, gpointer main_w_arg,
|
static void filter_dlg_dclick(GtkWidget *dummy, gpointer main_w_arg,
|
||||||
gpointer activate);
|
gpointer activate);
|
||||||
static void filter_dlg_ok_cb(GtkWidget *ok_bt, gpointer dummy);
|
static void filter_dlg_ok_cb(GtkWidget *ok_bt, gpointer dummy);
|
||||||
|
@ -74,7 +75,7 @@ static void filter_dlg_destroy(GtkWidget *win, gpointer data);
|
||||||
|
|
||||||
static gint filter_sel_list_button_cb(GtkWidget *, GdkEventButton *,
|
static gint filter_sel_list_button_cb(GtkWidget *, GdkEventButton *,
|
||||||
gpointer);
|
gpointer);
|
||||||
static void filter_sel_list_cb(GtkWidget *, gpointer);
|
static void filter_sel_list_cb(GtkTreeSelection *, gpointer);
|
||||||
static void filter_list_destroy_cb(GtkWidget *, gpointer);
|
static void filter_list_destroy_cb(GtkWidget *, gpointer);
|
||||||
static void filter_new_bt_clicked_cb(GtkWidget *, gpointer);
|
static void filter_new_bt_clicked_cb(GtkWidget *, gpointer);
|
||||||
static void filter_chg_bt_clicked_cb(GtkWidget *, gpointer);
|
static void filter_chg_bt_clicked_cb(GtkWidget *, gpointer);
|
||||||
|
@ -327,8 +328,6 @@ filter_dialog_new(GtkWidget *caller _U_, GtkWidget *parent_filter_te,
|
||||||
*del_bt,
|
*del_bt,
|
||||||
*filter_sc,
|
*filter_sc,
|
||||||
*filter_l,
|
*filter_l,
|
||||||
*nl_item,
|
|
||||||
*nl_lb,
|
|
||||||
*middle_hb,
|
*middle_hb,
|
||||||
*name_lb,
|
*name_lb,
|
||||||
*name_te,
|
*name_te,
|
||||||
|
@ -336,7 +335,7 @@ filter_dialog_new(GtkWidget *caller _U_, GtkWidget *parent_filter_te,
|
||||||
*filter_lb,
|
*filter_lb,
|
||||||
*filter_te,
|
*filter_te,
|
||||||
*add_expression_bt;
|
*add_expression_bt;
|
||||||
GtkWidget *l_select = NULL;
|
gboolean l_select = FALSE;
|
||||||
GList *fl_entry;
|
GList *fl_entry;
|
||||||
filter_def *filt;
|
filter_def *filt;
|
||||||
const gchar *filter_te_str = NULL;
|
const gchar *filter_te_str = NULL;
|
||||||
|
@ -344,6 +343,11 @@ filter_dialog_new(GtkWidget *caller _U_, GtkWidget *parent_filter_te,
|
||||||
static filter_list_type_t cfilter_list = CFILTER_LIST;
|
static filter_list_type_t cfilter_list = CFILTER_LIST;
|
||||||
static filter_list_type_t dfilter_list = DFILTER_LIST;
|
static filter_list_type_t dfilter_list = DFILTER_LIST;
|
||||||
filter_list_type_t *filter_list_p;
|
filter_list_type_t *filter_list_p;
|
||||||
|
GtkListStore *store;
|
||||||
|
GtkCellRenderer *renderer;
|
||||||
|
GtkTreeViewColumn *column;
|
||||||
|
GtkTreeSelection *sel;
|
||||||
|
GtkTreeIter iter;
|
||||||
|
|
||||||
/* Get a pointer to a static variable holding the type of filter on
|
/* Get a pointer to a static variable holding the type of filter on
|
||||||
which we're working, so we can pass that pointer to callback
|
which we're working, so we can pass that pointer to callback
|
||||||
|
@ -453,18 +457,30 @@ filter_dialog_new(GtkWidget *caller _U_, GtkWidget *parent_filter_te,
|
||||||
gtk_container_add(GTK_CONTAINER(top_hb), filter_sc);
|
gtk_container_add(GTK_CONTAINER(top_hb), filter_sc);
|
||||||
gtk_widget_show(filter_sc);
|
gtk_widget_show(filter_sc);
|
||||||
|
|
||||||
filter_l = gtk_list_new();
|
store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_POINTER);
|
||||||
gtk_list_set_selection_mode(GTK_LIST(filter_l), GTK_SELECTION_SINGLE);
|
filter_l = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
|
||||||
g_signal_connect(G_OBJECT(filter_l), "selection_changed",
|
gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(filter_l), TRUE);
|
||||||
|
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(filter_l), FALSE);
|
||||||
|
renderer = gtk_cell_renderer_text_new();
|
||||||
|
column = gtk_tree_view_column_new_with_attributes("", renderer, "text",
|
||||||
|
0, NULL);
|
||||||
|
gtk_tree_view_column_set_sort_column_id(column, 0);
|
||||||
|
gtk_tree_view_append_column(GTK_TREE_VIEW(filter_l), column);
|
||||||
|
sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(filter_l));
|
||||||
|
gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE);
|
||||||
|
g_signal_connect(G_OBJECT(sel), "changed",
|
||||||
G_CALLBACK(filter_sel_list_cb), filter_pg);
|
G_CALLBACK(filter_sel_list_cb), filter_pg);
|
||||||
gtk_object_set_data(GTK_OBJECT(main_w), E_FILT_FILTER_L_KEY, filter_l);
|
gtk_object_set_data(GTK_OBJECT(main_w), E_FILT_FILTER_L_KEY, filter_l);
|
||||||
g_signal_connect(G_OBJECT(filter_l), "destroy",
|
g_signal_connect(G_OBJECT(filter_l), "destroy",
|
||||||
G_CALLBACK(filter_list_destroy_cb), NULL);
|
G_CALLBACK(filter_list_destroy_cb), NULL);
|
||||||
|
g_signal_connect(G_OBJECT(filter_l), "button_press_event",
|
||||||
|
G_CALLBACK(filter_sel_list_button_cb), NULL);
|
||||||
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(filter_sc),
|
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(filter_sc),
|
||||||
filter_l);
|
filter_l);
|
||||||
gtk_widget_show(filter_l);
|
gtk_widget_show(filter_l);
|
||||||
|
|
||||||
gtk_object_set_data(GTK_OBJECT(filter_l), E_FILT_DBLFUNC_KEY, filter_dlg_dclick);
|
gtk_object_set_data(GTK_OBJECT(filter_l), E_FILT_DBLFUNC_KEY,
|
||||||
|
filter_dlg_dclick);
|
||||||
gtk_object_set_data(GTK_OBJECT(filter_l), E_FILT_DBLARG_KEY, main_w);
|
gtk_object_set_data(GTK_OBJECT(filter_l), E_FILT_DBLARG_KEY, main_w);
|
||||||
/* This is a Boolean, but we make it a non-null pointer for TRUE
|
/* This is a Boolean, but we make it a non-null pointer for TRUE
|
||||||
and a null pointer for FALSE, as object data is a pointer. */
|
and a null pointer for FALSE, as object data is a pointer. */
|
||||||
|
@ -474,29 +490,20 @@ filter_dialog_new(GtkWidget *caller _U_, GtkWidget *parent_filter_te,
|
||||||
fl_entry = get_filter_list_first(list);
|
fl_entry = get_filter_list_first(list);
|
||||||
while (fl_entry != NULL) {
|
while (fl_entry != NULL) {
|
||||||
filt = (filter_def *) fl_entry->data;
|
filt = (filter_def *) fl_entry->data;
|
||||||
nl_lb = gtk_label_new(filt->name);
|
gtk_list_store_append(store, &iter);
|
||||||
nl_item = gtk_list_item_new();
|
gtk_list_store_set(store, &iter, 0, filt->name,
|
||||||
|
1, fl_entry, -1);
|
||||||
g_signal_connect(G_OBJECT(nl_item), "button_press_event",
|
|
||||||
G_CALLBACK(filter_sel_list_button_cb),
|
|
||||||
filter_l);
|
|
||||||
|
|
||||||
gtk_misc_set_alignment (GTK_MISC (nl_lb), 0.0, 0.5);
|
|
||||||
gtk_container_add(GTK_CONTAINER(nl_item), nl_lb);
|
|
||||||
gtk_widget_show(nl_lb);
|
|
||||||
gtk_container_add(GTK_CONTAINER(filter_l), nl_item);
|
|
||||||
gtk_widget_show(nl_item);
|
|
||||||
gtk_object_set_data(GTK_OBJECT(nl_item), E_FILT_LBL_KEY, nl_lb);
|
|
||||||
gtk_object_set_data(GTK_OBJECT(nl_item), E_FILT_LIST_ITEM_MODEL_KEY,
|
|
||||||
fl_entry);
|
|
||||||
|
|
||||||
if (filter_te_str && filt->strval) {
|
if (filter_te_str && filt->strval) {
|
||||||
if (strcmp(filter_te_str, filt->strval) == 0)
|
if (strcmp(filter_te_str, filt->strval) == 0)
|
||||||
l_select = nl_item;
|
{
|
||||||
|
gtk_tree_selection_select_iter(sel, &iter);
|
||||||
|
l_select = TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fl_entry = fl_entry->next;
|
fl_entry = fl_entry->next;
|
||||||
}
|
}
|
||||||
|
g_object_unref(G_OBJECT(store));
|
||||||
|
|
||||||
/* Middle row: Filter name entry */
|
/* Middle row: Filter name entry */
|
||||||
middle_hb = gtk_hbox_new(FALSE, 5);
|
middle_hb = gtk_hbox_new(FALSE, 5);
|
||||||
|
@ -531,9 +538,7 @@ filter_dialog_new(GtkWidget *caller _U_, GtkWidget *parent_filter_te,
|
||||||
G_CALLBACK(filter_filter_te_destroy_cb), NULL);
|
G_CALLBACK(filter_filter_te_destroy_cb), NULL);
|
||||||
gtk_widget_show(filter_te);
|
gtk_widget_show(filter_te);
|
||||||
|
|
||||||
if (l_select) {
|
if (!l_select && filter_te_str && filter_te_str[0]) {
|
||||||
gtk_list_select_child(GTK_LIST(filter_l), l_select);
|
|
||||||
} else if (filter_te_str && filter_te_str[0]) {
|
|
||||||
gtk_entry_set_text(GTK_ENTRY(name_te), "New filter");
|
gtk_entry_set_text(GTK_ENTRY(name_te), "New filter");
|
||||||
gtk_entry_set_text(GTK_ENTRY(filter_te), filter_te_str);
|
gtk_entry_set_text(GTK_ENTRY(filter_te), filter_te_str);
|
||||||
}
|
}
|
||||||
|
@ -613,22 +618,26 @@ filter_dlg_dclick(GtkWidget *filter_l, gpointer main_w_arg, gpointer activate)
|
||||||
GtkWidget *main_w = GTK_WIDGET(main_w_arg);
|
GtkWidget *main_w = GTK_WIDGET(main_w_arg);
|
||||||
GtkWidget *parent_filter_te =
|
GtkWidget *parent_filter_te =
|
||||||
gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_PARENT_FILTER_TE_KEY);
|
gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_PARENT_FILTER_TE_KEY);
|
||||||
GList *flp, *sl;
|
GList *flp;
|
||||||
GtkObject *l_item;
|
|
||||||
filter_def *filt;
|
filter_def *filt;
|
||||||
|
GtkTreeSelection *sel;
|
||||||
|
GtkTreeModel *model;
|
||||||
|
GtkTreeIter iter;
|
||||||
|
|
||||||
|
sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(filter_l));
|
||||||
|
|
||||||
if (parent_filter_te != NULL) {
|
if (parent_filter_te != NULL) {
|
||||||
/*
|
/*
|
||||||
* We have a text entry widget associated with this dialog
|
* We have a text entry widget associated with this dialog
|
||||||
* box; is one of the filters in the list selected?
|
* box; is one of the filters in the list selected?
|
||||||
*/
|
*/
|
||||||
sl = GTK_LIST(filter_l)->selection;
|
|
||||||
if (sl != NULL) {
|
/* if something was selected */
|
||||||
|
if (gtk_tree_selection_get_selected(sel, &model, &iter)) {
|
||||||
/*
|
/*
|
||||||
* Yes. Is there a filter definition for that filter?
|
* Yes. Is there a filter definition for that filter?
|
||||||
*/
|
*/
|
||||||
l_item = GTK_OBJECT(sl->data);
|
gtk_tree_model_get(model, &iter, 1, &flp, -1);
|
||||||
flp = (GList *) gtk_object_get_data(l_item, E_FILT_LIST_ITEM_MODEL_KEY);
|
|
||||||
if (flp) {
|
if (flp) {
|
||||||
/*
|
/*
|
||||||
* Yes - put it in the text entry widget.
|
* Yes - put it in the text entry widget.
|
||||||
|
@ -827,49 +836,51 @@ filter_dlg_destroy(GtkWidget *win, gpointer data)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gint
|
static gint
|
||||||
filter_sel_list_button_cb (GtkWidget *widget, GdkEventButton *event,
|
filter_sel_list_button_cb(GtkWidget *list, GdkEventButton *event,
|
||||||
gpointer func_data)
|
gpointer data _U_)
|
||||||
{
|
{
|
||||||
GtkWidget *parent = func_data;
|
|
||||||
void (* func)(GtkWidget *, gpointer, gpointer);
|
void (* func)(GtkWidget *, gpointer, gpointer);
|
||||||
gpointer func_arg;
|
gpointer func_arg;
|
||||||
gpointer func_activate;
|
gpointer func_activate;
|
||||||
|
|
||||||
if (GTK_IS_LIST_ITEM(widget) && event->type == GDK_2BUTTON_PRESS) {
|
if (event->type == GDK_2BUTTON_PRESS) {
|
||||||
func = gtk_object_get_data(GTK_OBJECT(parent), E_FILT_DBLFUNC_KEY);
|
func = gtk_object_get_data(GTK_OBJECT(list), E_FILT_DBLFUNC_KEY);
|
||||||
func_arg = gtk_object_get_data(GTK_OBJECT(parent), E_FILT_DBLARG_KEY);
|
func_arg = gtk_object_get_data(GTK_OBJECT(list), E_FILT_DBLARG_KEY);
|
||||||
func_activate = gtk_object_get_data(GTK_OBJECT(parent), E_FILT_DBLACTIVATE_KEY);
|
func_activate = gtk_object_get_data(GTK_OBJECT(list),
|
||||||
|
E_FILT_DBLACTIVATE_KEY);
|
||||||
|
|
||||||
if (func)
|
if (func)
|
||||||
(*func)(func_data, func_arg, func_activate);
|
(*func)(list, func_arg, func_activate);
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
filter_sel_list_cb(GtkWidget *l, gpointer data _U_)
|
filter_sel_list_cb(GtkTreeSelection *sel, gpointer data _U_)
|
||||||
{
|
{
|
||||||
GtkWidget *main_w = gtk_widget_get_toplevel(l);
|
GtkWidget *filter_l = GTK_WIDGET(gtk_tree_selection_get_tree_view(sel));
|
||||||
GtkWidget *name_te = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_NAME_TE_KEY);
|
GtkWidget *main_w = gtk_widget_get_toplevel(filter_l);
|
||||||
GtkWidget *filter_te = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_FILTER_TE_KEY);
|
GtkWidget *name_te = gtk_object_get_data(GTK_OBJECT(main_w),
|
||||||
GtkWidget *chg_bt = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_CHG_BT_KEY);
|
E_FILT_NAME_TE_KEY);
|
||||||
GtkWidget *copy_bt = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_COPY_BT_KEY);
|
GtkWidget *filter_te = gtk_object_get_data(GTK_OBJECT(main_w),
|
||||||
GtkWidget *del_bt = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_DEL_BT_KEY);
|
E_FILT_FILTER_TE_KEY);
|
||||||
|
GtkWidget *chg_bt = gtk_object_get_data(GTK_OBJECT(main_w),
|
||||||
|
E_FILT_CHG_BT_KEY);
|
||||||
|
GtkWidget *copy_bt = gtk_object_get_data(GTK_OBJECT(main_w),
|
||||||
|
E_FILT_COPY_BT_KEY);
|
||||||
|
GtkWidget *del_bt = gtk_object_get_data(GTK_OBJECT(main_w),
|
||||||
|
E_FILT_DEL_BT_KEY);
|
||||||
filter_def *filt;
|
filter_def *filt;
|
||||||
gchar *name = "", *strval = "";
|
gchar *name = "", *strval = "";
|
||||||
GList *sl, *flp;
|
GList *flp;
|
||||||
GtkObject *l_item;
|
|
||||||
gint sensitivity = FALSE;
|
gint sensitivity = FALSE;
|
||||||
|
GtkTreeModel *model;
|
||||||
|
GtkTreeIter iter;
|
||||||
|
|
||||||
if (l)
|
/* if something was selected */
|
||||||
sl = GTK_LIST(l)->selection;
|
if (gtk_tree_selection_get_selected(sel, &model, &iter)) {
|
||||||
else
|
gtk_tree_model_get(model, &iter, 1, &flp, -1);
|
||||||
sl = NULL;
|
|
||||||
|
|
||||||
if (sl) { /* Something was selected */
|
|
||||||
l_item = GTK_OBJECT(sl->data);
|
|
||||||
flp = (GList *) gtk_object_get_data(l_item, E_FILT_LIST_ITEM_MODEL_KEY);
|
|
||||||
if (flp) {
|
if (flp) {
|
||||||
filt = (filter_def *) flp->data;
|
filt = (filter_def *) flp->data;
|
||||||
name = filt->name;
|
name = filt->name;
|
||||||
|
@ -935,24 +946,21 @@ static void
|
||||||
new_filter_cb(gpointer data, gpointer user_data)
|
new_filter_cb(gpointer data, gpointer user_data)
|
||||||
{
|
{
|
||||||
GtkWidget *main_w = data;
|
GtkWidget *main_w = data;
|
||||||
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_FILTER_L_KEY);
|
GtkTreeView *filter_l;
|
||||||
new_filter_cb_args_t *args = user_data;
|
new_filter_cb_args_t *args = user_data;
|
||||||
filter_def *nfilt = args->nflp->data;
|
filter_def *nfilt = args->nflp->data;
|
||||||
GtkWidget *nl_lb, *nl_item;
|
GtkListStore *store;
|
||||||
|
GtkTreeIter iter;
|
||||||
|
|
||||||
nl_lb = gtk_label_new(nfilt->name);
|
filter_l = GTK_TREE_VIEW(gtk_object_get_data(GTK_OBJECT(main_w),
|
||||||
nl_item = gtk_list_item_new();
|
E_FILT_FILTER_L_KEY));
|
||||||
gtk_misc_set_alignment(GTK_MISC(nl_lb), 0.0, 0.5);
|
store = GTK_LIST_STORE(gtk_tree_view_get_model(filter_l));
|
||||||
gtk_container_add(GTK_CONTAINER(nl_item), nl_lb);
|
gtk_list_store_append(store, &iter);
|
||||||
gtk_widget_show(nl_lb);
|
gtk_list_store_set(store, &iter, 0, nfilt->name, 1, args->nflp, -1);
|
||||||
gtk_container_add(GTK_CONTAINER(filter_l), nl_item);
|
if (GTK_WIDGET(filter_l) == args->active_filter_l) {
|
||||||
gtk_widget_show(nl_item);
|
|
||||||
gtk_object_set_data(GTK_OBJECT(nl_item), E_FILT_LBL_KEY, nl_lb);
|
|
||||||
gtk_object_set_data(GTK_OBJECT(nl_item), E_FILT_LIST_ITEM_MODEL_KEY,
|
|
||||||
args->nflp);
|
|
||||||
if (filter_l == args->active_filter_l) {
|
|
||||||
/* Select the item. */
|
/* Select the item. */
|
||||||
gtk_list_select_child(GTK_LIST(filter_l), nl_item);
|
gtk_tree_selection_select_iter(gtk_tree_view_get_selection(filter_l),
|
||||||
|
&iter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -960,9 +968,12 @@ static void
|
||||||
filter_new_bt_clicked_cb(GtkWidget *w, gpointer data)
|
filter_new_bt_clicked_cb(GtkWidget *w, gpointer data)
|
||||||
{
|
{
|
||||||
GtkWidget *main_w = gtk_widget_get_toplevel(w);
|
GtkWidget *main_w = gtk_widget_get_toplevel(w);
|
||||||
GtkWidget *name_te = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_NAME_TE_KEY);
|
GtkWidget *name_te = gtk_object_get_data(GTK_OBJECT(main_w),
|
||||||
GtkWidget *filter_te = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_FILTER_TE_KEY);
|
E_FILT_NAME_TE_KEY);
|
||||||
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_FILTER_L_KEY);
|
GtkWidget *filter_te = gtk_object_get_data(GTK_OBJECT(main_w),
|
||||||
|
E_FILT_FILTER_TE_KEY);
|
||||||
|
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w),
|
||||||
|
E_FILT_FILTER_L_KEY);
|
||||||
filter_list_type_t list = *(filter_list_type_t *)data;
|
filter_list_type_t list = *(filter_list_type_t *)data;
|
||||||
GList *fl_entry;
|
GList *fl_entry;
|
||||||
const gchar *name, *strval;
|
const gchar *name, *strval;
|
||||||
|
@ -973,7 +984,7 @@ filter_new_bt_clicked_cb(GtkWidget *w, gpointer data)
|
||||||
|
|
||||||
if (strlen(name) > 0 && strlen(strval) > 0) {
|
if (strlen(name) > 0 && strlen(strval) > 0) {
|
||||||
/* Add a new entry to the filter list. */
|
/* Add a new entry to the filter list. */
|
||||||
fl_entry = add_to_filter_list(list, name, strval);
|
fl_entry = add_to_filter_list(list, (char *)name, (char *)strval);
|
||||||
|
|
||||||
/* Update all the filter list widgets, not just the one in
|
/* Update all the filter list widgets, not just the one in
|
||||||
the dialog box in which we clicked on "Copy". */
|
the dialog box in which we clicked on "Copy". */
|
||||||
|
@ -990,56 +1001,63 @@ filter_new_bt_clicked_cb(GtkWidget *w, gpointer data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static gboolean
|
||||||
chg_list_item_cb(GtkWidget *nl_item, gpointer data)
|
chg_list_item_cb(GtkTreeModel *model, GtkTreePath *path _U_, GtkTreeIter *iter,
|
||||||
|
gpointer data)
|
||||||
{
|
{
|
||||||
GList *flp = data;
|
GList *flp = data;
|
||||||
filter_def *filt = flp->data;
|
filter_def *filt = flp->data;
|
||||||
GtkLabel *nl_lb =
|
GList *nl_model;
|
||||||
GTK_LABEL(gtk_object_get_data(GTK_OBJECT(nl_item), E_FILT_LBL_KEY));
|
|
||||||
GList *nl_model =
|
|
||||||
gtk_object_get_data(GTK_OBJECT(nl_item), E_FILT_LIST_ITEM_MODEL_KEY);
|
|
||||||
|
|
||||||
/* Is this the GtkList item corresponding to the filter list item in
|
gtk_tree_model_get(model, iter, 1, &nl_model, -1);
|
||||||
question? */
|
/* Is this the item corresponding to the filter list item in question? */
|
||||||
if (flp == nl_model) {
|
if (flp == nl_model) {
|
||||||
/* Yes - change the label to correspond to the new name for the filter. */
|
/* Yes - change the label to correspond to the new name for the
|
||||||
gtk_label_set(nl_lb, filt->name);
|
* filter. */
|
||||||
|
gtk_list_store_set(GTK_LIST_STORE(model), iter, 0, filt->name, -1);
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
chg_filter_cb(gpointer data, gpointer user_data)
|
chg_filter_cb(gpointer data, gpointer user_data)
|
||||||
{
|
{
|
||||||
GtkWidget *main_w = data;
|
GtkWidget *main_w = data;
|
||||||
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_FILTER_L_KEY);
|
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w),
|
||||||
|
E_FILT_FILTER_L_KEY);
|
||||||
|
|
||||||
gtk_container_foreach(GTK_CONTAINER(filter_l), chg_list_item_cb, user_data);
|
gtk_tree_model_foreach(gtk_tree_view_get_model(GTK_TREE_VIEW(filter_l)),
|
||||||
|
chg_list_item_cb, user_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
filter_chg_bt_clicked_cb(GtkWidget *w, gpointer data)
|
filter_chg_bt_clicked_cb(GtkWidget *w, gpointer data)
|
||||||
{
|
{
|
||||||
GtkWidget *main_w = gtk_widget_get_toplevel(w);
|
GtkWidget *main_w = gtk_widget_get_toplevel(w);
|
||||||
GtkWidget *name_te = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_NAME_TE_KEY);
|
GtkWidget *name_te = gtk_object_get_data(GTK_OBJECT(main_w),
|
||||||
GtkWidget *filter_te = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_FILTER_TE_KEY);
|
E_FILT_NAME_TE_KEY);
|
||||||
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_FILTER_L_KEY);
|
GtkWidget *filter_te = gtk_object_get_data(GTK_OBJECT(main_w),
|
||||||
|
E_FILT_FILTER_TE_KEY);
|
||||||
|
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w),
|
||||||
|
E_FILT_FILTER_L_KEY);
|
||||||
filter_def *filt;
|
filter_def *filt;
|
||||||
const gchar *name, *strval;
|
const gchar *name, *strval;
|
||||||
GList *sl, *fl_entry;
|
GList *fl_entry;
|
||||||
GtkObject *l_item;
|
|
||||||
GtkLabel *nl_lb;
|
|
||||||
filter_list_type_t list = *(filter_list_type_t *)data;
|
filter_list_type_t list = *(filter_list_type_t *)data;
|
||||||
|
GtkTreeSelection *sel;
|
||||||
|
GtkTreeModel *model;
|
||||||
|
GtkTreeIter iter;
|
||||||
|
|
||||||
sl = GTK_LIST(filter_l)->selection;
|
|
||||||
name = gtk_entry_get_text(GTK_ENTRY(name_te));
|
name = gtk_entry_get_text(GTK_ENTRY(name_te));
|
||||||
strval = gtk_entry_get_text(GTK_ENTRY(filter_te));
|
strval = gtk_entry_get_text(GTK_ENTRY(filter_te));
|
||||||
|
|
||||||
if (sl) { /* Something was selected */
|
sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(filter_l));
|
||||||
l_item = GTK_OBJECT(sl->data);
|
|
||||||
fl_entry = (GList *) gtk_object_get_data(l_item, E_FILT_LIST_ITEM_MODEL_KEY);
|
/* if something was selected */
|
||||||
nl_lb = (GtkLabel *) gtk_object_get_data(l_item, E_FILT_LBL_KEY);
|
if (gtk_tree_selection_get_selected(sel, &model, &iter)) {
|
||||||
if (fl_entry != NULL && nl_lb != NULL) {
|
gtk_tree_model_get(model, &iter, 1, &fl_entry, -1);
|
||||||
|
if (fl_entry != NULL) {
|
||||||
filt = (filter_def *) fl_entry->data;
|
filt = (filter_def *) fl_entry->data;
|
||||||
|
|
||||||
if (strlen(name) > 0 && strlen(strval) > 0 && filt) {
|
if (strlen(name) > 0 && strlen(strval) > 0 && filt) {
|
||||||
|
@ -1050,7 +1068,8 @@ filter_chg_bt_clicked_cb(GtkWidget *w, gpointer data)
|
||||||
|
|
||||||
/* Update all the filter list widgets, not just the one in
|
/* Update all the filter list widgets, not just the one in
|
||||||
the dialog box in which we clicked on "Copy". */
|
the dialog box in which we clicked on "Copy". */
|
||||||
g_list_foreach(get_filter_dialog_list(list), chg_filter_cb, fl_entry);
|
g_list_foreach(get_filter_dialog_list(list), chg_filter_cb,
|
||||||
|
fl_entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1068,20 +1087,25 @@ static void
|
||||||
filter_copy_bt_clicked_cb(GtkWidget *w, gpointer data)
|
filter_copy_bt_clicked_cb(GtkWidget *w, gpointer data)
|
||||||
{
|
{
|
||||||
GtkWidget *main_w = gtk_widget_get_toplevel(w);
|
GtkWidget *main_w = gtk_widget_get_toplevel(w);
|
||||||
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_FILTER_L_KEY);
|
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w),
|
||||||
GList *sl, *fl_entry, *nfl_entry;
|
E_FILT_FILTER_L_KEY);
|
||||||
|
GList *fl_entry, *nfl_entry;
|
||||||
gchar *prefix = "Copy of ", *name;
|
gchar *prefix = "Copy of ", *name;
|
||||||
GtkObject *l_item;
|
|
||||||
filter_def *filt;
|
filter_def *filt;
|
||||||
filter_list_type_t list = *(filter_list_type_t *)data;
|
filter_list_type_t list = *(filter_list_type_t *)data;
|
||||||
new_filter_cb_args_t args;
|
new_filter_cb_args_t args;
|
||||||
|
GtkTreeSelection *sel;
|
||||||
|
GtkTreeModel *model;
|
||||||
|
GtkTreeIter iter;
|
||||||
|
|
||||||
sl = GTK_LIST(filter_l)->selection;
|
sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(filter_l));
|
||||||
if (sl) { /* Something was selected */
|
|
||||||
l_item = GTK_OBJECT(sl->data);
|
/* if something was selected */
|
||||||
fl_entry = (GList *) gtk_object_get_data(l_item, E_FILT_LIST_ITEM_MODEL_KEY);
|
if (gtk_tree_selection_get_selected(sel, &model, &iter)) {
|
||||||
|
gtk_tree_model_get(model, &iter, 1, &fl_entry, -1);
|
||||||
if (fl_entry != NULL) {
|
if (fl_entry != NULL) {
|
||||||
/* Add a new entry, copying the existing entry, to the filter list. */
|
/* Add a new entry, copying the existing entry, to the
|
||||||
|
* filter list. */
|
||||||
filt = (filter_def *) fl_entry->data;
|
filt = (filter_def *) fl_entry->data;
|
||||||
name = g_malloc(strlen(prefix) + strlen(filt->name) + 1);
|
name = g_malloc(strlen(prefix) + strlen(filt->name) + 1);
|
||||||
sprintf(name, "%s%s", prefix, filt->name);
|
sprintf(name, "%s%s", prefix, filt->name);
|
||||||
|
@ -1109,36 +1133,43 @@ static void
|
||||||
delete_filter_cb(gpointer data, gpointer user_data)
|
delete_filter_cb(gpointer data, gpointer user_data)
|
||||||
{
|
{
|
||||||
GtkWidget *main_w = data;
|
GtkWidget *main_w = data;
|
||||||
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_FILTER_L_KEY);
|
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w),
|
||||||
gint pos = *(gint *)user_data;
|
E_FILT_FILTER_L_KEY);
|
||||||
|
gchar *pos = (gchar *)user_data;
|
||||||
|
GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(filter_l));
|
||||||
|
GtkTreeIter iter;
|
||||||
|
|
||||||
gtk_list_clear_items(GTK_LIST(filter_l), pos, pos + 1);
|
gtk_tree_model_get_iter_from_string(model, &iter, pos);
|
||||||
|
gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
filter_del_bt_clicked_cb(GtkWidget *w, gpointer data)
|
filter_del_bt_clicked_cb(GtkWidget *w, gpointer data)
|
||||||
{
|
{
|
||||||
GtkWidget *main_w = gtk_widget_get_toplevel(w);
|
GtkWidget *main_w = gtk_widget_get_toplevel(w);
|
||||||
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_FILTER_L_KEY);
|
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w),
|
||||||
|
E_FILT_FILTER_L_KEY);
|
||||||
filter_list_type_t list = *(filter_list_type_t *)data;
|
filter_list_type_t list = *(filter_list_type_t *)data;
|
||||||
GList *sl, *fl_entry;
|
GList *fl_entry;
|
||||||
GtkObject *l_item;
|
gchar *pos;
|
||||||
gint pos;
|
GtkTreeSelection *sel;
|
||||||
|
GtkTreeModel *model;
|
||||||
|
GtkTreeIter iter;
|
||||||
|
|
||||||
sl = GTK_LIST(filter_l)->selection;
|
sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(filter_l));
|
||||||
if (sl) { /* Something was selected */
|
/* If something was selected */
|
||||||
l_item = GTK_OBJECT(sl->data);
|
if (gtk_tree_selection_get_selected(sel, &model, &iter)) {
|
||||||
pos = gtk_list_child_position(GTK_LIST(filter_l),
|
gtk_tree_model_get(model, &iter, 1, &fl_entry, -1);
|
||||||
GTK_WIDGET(l_item));
|
pos = gtk_tree_path_to_string(gtk_tree_model_get_path(model, &iter));
|
||||||
fl_entry = (GList *) gtk_object_get_data(l_item, E_FILT_LIST_ITEM_MODEL_KEY);
|
|
||||||
if (fl_entry != NULL) {
|
if (fl_entry != NULL) {
|
||||||
/* Remove the entry from the filter list. */
|
/* Remove the entry from the filter list. */
|
||||||
remove_from_filter_list(list, fl_entry);
|
remove_from_filter_list(list, fl_entry);
|
||||||
|
|
||||||
/* Update all the filter list widgets, not just the one in
|
/* Update all the filter list widgets, not just the one in
|
||||||
the dialog box in which we clicked on "Delete". */
|
the dialog box in which we clicked on "Delete". */
|
||||||
g_list_foreach(get_filter_dialog_list(list), delete_filter_cb, &pos);
|
g_list_foreach(get_filter_dialog_list(list), delete_filter_cb, pos);
|
||||||
}
|
}
|
||||||
|
g_free(pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue