From e18efa1191ae008fddb57523be5247989e75007f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20K=C3=B6hler?= Date: Tue, 26 Sep 2006 22:08:09 +0000 Subject: [PATCH] Add gnc_tree_model_account_types_set_mask and bind mask to the filter model instead using it as data of the filter function, because those can only be set once per filter. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@14895 57a11ea4-9604-0410-9ed3-97b8803252fd --- .../gnc-tree-model-account-types.c | 25 +++++++++++++++---- .../gnc-tree-model-account-types.h | 4 +++ 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/gnome-utils/gnc-tree-model-account-types.c b/src/gnome-utils/gnc-tree-model-account-types.c index 8e724eefae..f393c96d72 100644 --- a/src/gnome-utils/gnc-tree-model-account-types.c +++ b/src/gnome-utils/gnc-tree-model-account-types.c @@ -35,6 +35,8 @@ static QofLogModule log_module = GNC_MOD_GUI; static GtkTreeModel *account_types_tree_model = NULL; +#define TYPE_MASK "type-mask" + /* Functions for the type system */ static void gnc_tree_model_account_types_class_init (GncTreeModelAccountTypesClass *klass); @@ -153,13 +155,15 @@ gnc_tree_model_account_types_master(void) static gboolean -gnc_tree_model_account_types_is_valid (GtkTreeModel *model, +gnc_tree_model_account_types_is_valid (GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { GNCAccountType type; - guint32 valid_types = GPOINTER_TO_UINT (data); + GObject *f_model = G_OBJECT (data); + guint32 valid_types = GPOINTER_TO_UINT (g_object_get_data ( + f_model, TYPE_MASK)); - gtk_tree_model_get (model, iter, + gtk_tree_model_get (model, iter, GNC_TREE_MODEL_ACCOUNT_TYPES_COL_TYPE, &type, -1); return (valid_types & (1 << type)) ? TRUE : FALSE; } @@ -176,15 +180,26 @@ gnc_tree_model_account_types_filter_using_mask (guint32 types) { GtkTreeModel *f_model; - f_model = gtk_tree_model_filter_new(gnc_tree_model_account_types_master(), + f_model = gtk_tree_model_filter_new (gnc_tree_model_account_types_master (), NULL); + g_object_set_data (G_OBJECT (f_model), TYPE_MASK, GUINT_TO_POINTER (types)); gtk_tree_model_filter_set_visible_func ( GTK_TREE_MODEL_FILTER (f_model), gnc_tree_model_account_types_is_valid, - GUINT_TO_POINTER (types), NULL); + f_model, NULL); return f_model; } +void +gnc_tree_model_account_types_set_mask (GtkTreeModel *f_model, + guint32 types) +{ + g_return_if_fail (f_model); + + g_object_set_data (G_OBJECT (f_model), TYPE_MASK, GUINT_TO_POINTER (types)); + gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (f_model)); +} + guint32 gnc_tree_model_account_types_get_selected (GncTreeModelAccountTypes * model) { diff --git a/src/gnome-utils/gnc-tree-model-account-types.h b/src/gnome-utils/gnc-tree-model-account-types.h index 997f75beb6..350735d701 100644 --- a/src/gnome-utils/gnc-tree-model-account-types.h +++ b/src/gnome-utils/gnc-tree-model-account-types.h @@ -113,6 +113,10 @@ GtkTreeModel * gnc_tree_model_account_types_valid (void); Caller is responsible for ref/unref. */ GtkTreeModel * gnc_tree_model_account_types_filter_using_mask (guint32 types); +/* Update the set of the visibible account types in 'model' to 'types'. */ +void gnc_tree_model_account_types_set_mask (GtkTreeModel *f_model, + guint32 types); + /* Return the bitmask of the account type enums reflecting the state of the tree selection. If your view allows the selection of multiple account types, use must use this function to get the