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 _______________________________________________ gnucash-devel mailing list gnucash-devel@gnucash.org https://lists.gnucash.org/mailman/listinfo/gnucash-devel