reuse of filter by... for budgets
Chris Shoemaker
c.shoemaker at cox.net
Fri Dec 30 18:16:53 EST 2005
On Fri, Dec 30, 2005 at 04:42:23PM -0500, Chris Shoemaker wrote:
> David,
> I really like the filter by dialog for the accounts page. I
> want to use the same thing for the budget page.
>
> Here's my plan for factoring it out:
>
> * typedef and export the "fd" struct as something like "FilterDialog"
> * factor the middle chunk out of
> gnc_plugin_page_account_tree_cmd_view_filter_by(), leaving the arg
> checking at the beginning, the signal connection at the end, and a call
> to factored out chunk in the middle, taking at least &priv->fd and the
> page as arguments.
>
> Then there's the issue of the callbacks. I could copy them and change
> the PageAccountTree arguments to PageBudget argument. But, I think
> it's better to just change the callbacks to take the "fd" struct
> instead of the whole page. The only non-"fd" thing the callbacks use
> is for triggering the refilter. We'd have to use some other mechanism
> for that, like adding callback and user_data fields to the fd struct;
> then each page would register itself and its own refilter callback
> with the filter dialog.
>
> Hmm.. wait a sec. Both pages would be registering the same callback:
> gnc_tree_view_account_refilter. So maybe there's no need to register
> a callback, just the tree_view to use as an argument. That can just
> go into the fd struct.
>
> Yeah, that seems generic. So, the gppat_filter functions would become
> something like:
>
> void account_filter_...(..., FilterDialog *fd)
> {
> ...
> gnc_tree_view_account_refilter(GNC_TREE_VIEW_ACCOUNT(fd->tree_view));
> ...
> }
>
>
> and there'd be a:
>
> GtkWidget *
> // ^^^^^^ for returning the dialog
> account_filter_dialog_create(FilterDialog *fd, GncPluginPage *page);
>
> Then both the account page and the budget page can have a
> gnc_plugin_page_{foo}_cmd_view_filter_by_cmd() that calls
> account_filter_dialog_create(&priv->fd, page) after filling in their own
> tree view as the fd->tree_view field.
>
> I'll prototype this by copying functions into gnc-plugin-page-budget.c
> and then factoring it out just there. If it works there, maybe all
> these callbacks and the dialog creation should move to some
> "gnc_tree_view_account_types" home.
>
> Any thoughts?
Ok, this turned out to be easier that I thought, and it works great.
The only thing I didn't forsee is that I can also reuse the actual
account filter function. Even the signal autoconnect works.
I'll commit this in a few steps.
-chris
More information about the gnucash-devel
mailing list