[Gnucash-changes] r11971 - gnucash/trunk/src/engine - Provide QofClass registration for GncBudget.

Chris Shoemaker chris at cvs.gnucash.org
Thu Nov 17 23:37:26 EST 2005


Author: chris
Date: 2005-11-17 23:37:26 -0500 (Thu, 17 Nov 2005)
New Revision: 11971
Trac: http://svn.gnucash.org/trac/changeset/11971

Modified:
   gnucash/trunk/src/engine/gnc-budget.c
Log:
Provide QofClass registration for GncBudget.
Remove obsolete fixme.


Modified: gnucash/trunk/src/engine/gnc-budget.c
===================================================================
--- gnucash/trunk/src/engine/gnc-budget.c	2005-11-18 04:32:20 UTC (rev 11970)
+++ gnucash/trunk/src/engine/gnc-budget.c	2005-11-18 04:37:26 UTC (rev 11971)
@@ -251,10 +251,7 @@
 #endif
 
 
-/* In order to distinguish between a value of zero and an unset value,
-   this function can return a gnc_numeric with GNC_ERROR_ARG set.
-   Currently, it only does so for placeholder accounts with
-   mixed-commodity subaccounts. */
+/* Does not distinguish between unset and zero - returns zero either way. */
 gnc_numeric
 gnc_budget_get_account_period_value(GncBudget *budget, Account *account,
                                     guint period_num)
@@ -262,19 +259,16 @@
     gnc_numeric numeric;
     gchar path[BUF_SIZE];
     gchar *bufend;
-    const GUID *guid;
     KvpFrame *frame;
 
     numeric = gnc_numeric_zero();
     g_return_val_if_fail(GNC_IS_BUDGET(budget), numeric);
     g_return_val_if_fail(account, numeric);
 
-    /* FIXME? check for unset?  Right now, returns zero on unset. */
     frame = qof_instance_get_slots(QOF_INSTANCE(budget));
-    guid = xaccAccountGetGUID(account);
-    bufend = guid_to_string_buff(guid, path);
+    bufend = guid_to_string_buff(xaccAccountGetGUID(account), path);
     g_sprintf(bufend, "/%d", period_num);
-    numeric = kvp_frame_get_numeric(frame, path);
+    numeric = kvp_frame_get_numeric(frame, path); /* Zero if unset */
     return numeric;
 }
 
@@ -365,25 +359,61 @@
 }
 
 /* Define the QofObject. */
-/* TODO: Eventually, I'm think I'm going to have to check if this struct is
-   complete.  Also, do we need one of those QofParam thingys? */
 static QofObject budget_object_def =
 {
     interface_version: QOF_OBJECT_VERSION,
     e_type:            GNC_ID_BUDGET,
-    type_label:        "BUDGET",
-    create:            (gpointer (*)(QofBook *)) gnc_budget_new,
+    type_label:        "Budget",
+    create:            (gpointer)gnc_budget_new,
     book_begin:        NULL,
     book_end:          NULL,
-    is_dirty:          NULL,
-    mark_clean:        NULL,
+    is_dirty:          qof_collection_is_dirty,
+    mark_clean:        qof_collection_mark_clean,
     foreach:           qof_collection_foreach,
-    printable:         NULL,
+    printable:         (const char* (*)(gpointer)) gnc_budget_get_name,
     version_cmp:       (int (*)(gpointer, gpointer)) qof_instance_version_cmp,
 };
 
+
+/* Static wrapper getters for the recurrence params */
+static PeriodType gnc_budget_get_rec_pt(const GncBudget *bgt) 
+{ return recurrenceGetPeriodType(&(bgt->recurrence)); }
+static guint gnc_budget_get_rec_mult(const GncBudget *bgt) 
+{ return recurrenceGetMultiplier(&(bgt->recurrence)); }
+static GDate gnc_budget_get_rec_date(const GncBudget *bgt) 
+{ return recurrenceGetDate(&(bgt->recurrence)); }
+
 /* Register ourselves with the engine. */
 gboolean gnc_budget_register (void)
 {
-    return qof_object_register (&budget_object_def);
+    static QofParam params[] = {
+        { "name", QOF_TYPE_STRING,
+          (QofAccessFunc) gnc_budget_get_name,
+          (QofSetterFunc) gnc_budget_set_name },
+        { "description", QOF_TYPE_STRING, 
+          (QofAccessFunc) gnc_budget_get_description, 
+          (QofSetterFunc) gnc_budget_set_description },
+        { "recurrence_period_type", QOF_TYPE_INT32,
+          (QofAccessFunc) gnc_budget_get_rec_pt, NULL },
+        /* Signedness problem: Should be unsigned. */
+        { "recurrence_multiplier", QOF_TYPE_INT32,
+          (QofAccessFunc) gnc_budget_get_rec_mult, NULL },
+        /* This is the same way that SchedXaction.c uses QOF_TYPE_DATE
+           but I don't think QOF actually supports a GDate, so I think
+           this is wrong. */
+        { "recurrence_date", QOF_TYPE_DATE,
+          (QofAccessFunc) gnc_budget_get_rec_date, NULL },
+        /* Signedness problem: Should be unsigned. */
+        { "num_periods", QOF_TYPE_INT32, 
+          (QofAccessFunc) gnc_budget_get_num_periods,
+          (QofSetterFunc) gnc_budget_set_num_periods },        
+        { QOF_PARAM_BOOK, QOF_ID_BOOK, 
+          (QofAccessFunc) qof_instance_get_book, NULL },
+        { QOF_PARAM_GUID, QOF_TYPE_GUID, 
+          (QofAccessFunc) qof_instance_get_guid, NULL },
+        { NULL },
+    };
+
+    qof_class_register(GNC_ID_BUDGET, (QofSortFunc) NULL, params);
+    return qof_object_register(&budget_object_def);
 }



More information about the gnucash-changes mailing list