[Gnucash-changes] r13954 - gnucash/trunk/src - Add begin/commit edit blocks to budget setters. Change to using the

Chris Shoemaker chris at cvs.gnucash.org
Sun May 7 22:54:04 EDT 2006


Author: chris
Date: 2006-05-07 22:54:03 -0400 (Sun, 07 May 2006)
New Revision: 13954
Trac: http://svn.gnucash.org/trac/changeset/13954

Modified:
   gnucash/trunk/src/backend/file/gnc-budget-xml-v2.c
   gnucash/trunk/src/engine/gnc-budget.c
   gnucash/trunk/src/engine/gnc-budget.h
   gnucash/trunk/src/gnome/gnc-plugin-page-budget.c
Log:
   Add begin/commit edit blocks to budget setters.  Change to using the 
   "destroy" method for budget deletion.


Modified: gnucash/trunk/src/backend/file/gnc-budget-xml-v2.c
===================================================================
--- gnucash/trunk/src/backend/file/gnc-budget-xml-v2.c	2006-05-08 00:24:40 UTC (rev 13953)
+++ gnucash/trunk/src/backend/file/gnc-budget-xml-v2.c	2006-05-08 02:54:03 UTC (rev 13954)
@@ -212,7 +212,7 @@
     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;

Modified: gnucash/trunk/src/engine/gnc-budget.c
===================================================================
--- gnucash/trunk/src/engine/gnc-budget.c	2006-05-08 00:24:40 UTC (rev 13953)
+++ gnucash/trunk/src/engine/gnc-budget.c	2006-05-08 02:54:03 UTC (rev 13954)
@@ -46,6 +46,48 @@
     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 @@
 }
 
 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 @@
 {
     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 @@
     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 @@
 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 @@
 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 @@
     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 @@
 
     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);
 

Modified: gnucash/trunk/src/engine/gnc-budget.h
===================================================================
--- gnucash/trunk/src/engine/gnc-budget.h	2006-05-08 00:24:40 UTC (rev 13953)
+++ gnucash/trunk/src/engine/gnc-budget.h	2006-05-08 02:54:03 UTC (rev 13954)
@@ -86,7 +86,7 @@
 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) \

Modified: gnucash/trunk/src/gnome/gnc-plugin-page-budget.c
===================================================================
--- gnucash/trunk/src/gnome/gnc-plugin-page-budget.c	2006-05-08 00:24:40 UTC (rev 13953)
+++ gnucash/trunk/src/gnome/gnc-plugin-page-budget.c	2006-05-08 02:54:03 UTC (rev 13954)
@@ -391,7 +391,7 @@
     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 @@
 
     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 ();
     }



More information about the gnucash-changes mailing list