Add begin/commit edit blocks to budget setters. Change to using the

"destroy" method for budget deletion.


git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13954 57a11ea4-9604-0410-9ed3-97b8803252fd
zzzoldfeatures/register-rewrite
Chris Shoemaker 20 years ago
parent 9593088a56
commit 681577f889

@ -212,7 +212,7 @@ dom_tree_to_budget (xmlNodePtr node, QofBook *book)
bgt = gnc_budget_new(book);
if (!dom_tree_generic_parse (node, budget_handlers, bgt)) {
PERR ("failed to parse budget tree");
gnc_budget_free(bgt);
gnc_budget_destroy(bgt);
bgt = NULL;
}
return bgt;

@ -46,6 +46,48 @@ struct gnc_budget_private{
guint num_periods;
};
static inline void commit_err (QofInstance *inst, QofBackendError errcode)
{
PERR ("Failed to commit: %d", errcode);
}
static void
gnc_budget_free(QofInstance *inst)
{
GncBudget *budget = GNC_BUDGET(inst);
if (budget == NULL)
return;
g_return_if_fail(GNC_IS_BUDGET(budget));
/* We first send the message that this object is about to be
* destroyed so that any GUI elements can remove it before it is
* actually gone. */
qof_event_gen( &budget->inst.entity, QOF_EVENT_DESTROY, NULL);
CACHE_REMOVE(budget->name);
CACHE_REMOVE(budget->description);
qof_instance_release (&budget->inst);
g_free(budget);
}
static inline void noop (QofInstance *inst) {}
static void
gnc_budget_begin_edit(GncBudget *bgt)
{
qof_begin_edit(QOF_INSTANCE(bgt));
}
static void
gnc_budget_commit_edit(GncBudget *bgt)
{
if (!qof_commit_edit(QOF_INSTANCE(bgt))) return;
qof_commit_edit_part2(QOF_INSTANCE(bgt), commit_err,
noop, gnc_budget_free);
}
GncBudget*
gnc_budget_new(QofBook *book)
{
@ -72,24 +114,13 @@ gnc_budget_new(QofBook *book)
}
void
gnc_budget_free(GncBudget* budget)
gnc_budget_destroy(GncBudget *budget)
{
if (budget == NULL)
return;
g_return_if_fail(GNC_IS_BUDGET(budget));
gnc_budget_begin_edit(budget);
qof_instance_set_dirty(&budget->inst);
/* We first send the message that this object is about to be
* destroyed so that any GUI elements can remove it before it is
* actually gone. */
qof_event_gen( &budget->inst.entity, QOF_EVENT_DESTROY, NULL);
CACHE_REMOVE(budget->name);
CACHE_REMOVE(budget->description);
qof_instance_release (&budget->inst);
g_free(budget);
budget->inst.do_free = TRUE;
gnc_budget_commit_edit(budget);
}
void
@ -97,8 +128,10 @@ gnc_budget_set_name(GncBudget* budget, const gchar* name)
{
g_return_if_fail(GNC_IS_BUDGET(budget) && name);
gnc_budget_begin_edit(budget);
CACHE_REPLACE(budget->name, name);
qof_instance_set_dirty(&budget->inst);
gnc_budget_commit_edit(budget);
qof_event_gen( &budget->inst.entity, QOF_EVENT_MODIFY, NULL);
}
@ -116,8 +149,10 @@ gnc_budget_set_description(GncBudget* budget, const gchar* description)
g_return_if_fail(GNC_IS_BUDGET(budget));
g_return_if_fail(description);
gnc_budget_begin_edit(budget);
CACHE_REPLACE(budget->description, description);
qof_instance_set_dirty(&budget->inst);
gnc_budget_commit_edit(budget);
qof_event_gen( &budget->inst.entity, QOF_EVENT_MODIFY, NULL);
}
@ -133,8 +168,10 @@ void
gnc_budget_set_recurrence(GncBudget *budget, const Recurrence *r)
{
g_return_if_fail(budget && r);
gnc_budget_begin_edit(budget);
budget->recurrence = *r;
qof_instance_set_dirty(&budget->inst);
gnc_budget_commit_edit(budget);
qof_event_gen(&budget->inst.entity, QOF_EVENT_MODIFY, NULL);
}
@ -158,8 +195,11 @@ void
gnc_budget_set_num_periods(GncBudget* budget, guint num_periods)
{
g_return_if_fail(GNC_IS_BUDGET(budget));
gnc_budget_begin_edit(budget);
budget->num_periods = num_periods;
qof_instance_set_dirty(&budget->inst);
gnc_budget_commit_edit(budget);
qof_event_gen( &budget->inst.entity, QOF_EVENT_MODIFY, NULL);
}
@ -185,6 +225,7 @@ gnc_budget_set_account_period_value(GncBudget *budget, Account *account,
gchar path[BUF_SIZE];
gchar *bufend;
gnc_budget_begin_edit(budget);
frame = qof_instance_get_slots(QOF_INSTANCE(budget));
guid = xaccAccountGetGUID(account);
bufend = guid_to_string_buff(guid, path);
@ -192,6 +233,7 @@ gnc_budget_set_account_period_value(GncBudget *budget, Account *account,
kvp_frame_set_numeric(frame, path, val);
qof_instance_set_dirty(&budget->inst);
gnc_budget_commit_edit(budget);
qof_event_gen( &budget->inst.entity, QOF_EVENT_MODIFY, NULL);

@ -86,7 +86,7 @@ gboolean gnc_budget_register(void);
GncBudget *gnc_budget_new(QofBook *book);
/** Deletes the given budget object.*/
void gnc_budget_free(GncBudget* budget);
void gnc_budget_destroy(GncBudget* budget);
const GUID* gnc_budget_get_guid(GncBudget* budget);
#define gnc_budget_return_guid(X) \

@ -391,7 +391,7 @@ gnc_plugin_page_budget_create_widget (GncPluginPage *plugin_page)
tree_view = gnc_tree_view_account_new(FALSE);
g_object_set(G_OBJECT(tree_view), "gconf-section", GCONF_SECTION, NULL);
gnc_tree_view_configure_columns(GNC_TREE_VIEW(tree_view), "Name", NULL);
gnc_tree_view_configure_columns(GNC_TREE_VIEW(tree_view), NULL);
priv->tree_view = tree_view;
selection = gtk_tree_view_get_selection(tree_view);
gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);
@ -852,7 +852,7 @@ gnc_budget_gui_delete_budget(GncBudget *budget)
if (gnc_verify_dialog (NULL, FALSE, _("Delete %s?"), name)) {
gnc_suspend_gui_refresh ();
gnc_budget_free(budget);
gnc_budget_destroy(budget);
// Views should close themselves because the CM will notify them.
gnc_resume_gui_refresh ();
}

Loading…
Cancel
Save