r15606 - gnucash/trunk/src/gnome-utils - Add support for populating a dense-cal store from Recurrence lists.

Josh Sled jsled at cvs.gnucash.org
Sun Feb 18 15:25:28 EST 2007


Author: jsled
Date: 2007-02-18 15:25:27 -0500 (Sun, 18 Feb 2007)
New Revision: 15606
Trac: http://svn.gnucash.org/trac/changeset/15606

Modified:
   gnucash/trunk/src/gnome-utils/gnc-dense-cal-store.c
   gnucash/trunk/src/gnome-utils/gnc-dense-cal-store.h
Log:
Add support for populating a dense-cal store from Recurrence lists.

Modified: gnucash/trunk/src/gnome-utils/gnc-dense-cal-store.c
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-dense-cal-store.c	2007-02-18 20:23:11 UTC (rev 15605)
+++ gnucash/trunk/src/gnome-utils/gnc-dense-cal-store.c	2007-02-18 20:25:27 UTC (rev 15606)
@@ -27,6 +27,7 @@
 #include "gnc-dense-cal.h"
 #include "gnc-dense-cal-model.h"
 #include "gnc-dense-cal-store.h"
+#include "Recurrence.h"
 
 struct _GncDenseCalStore
 {
@@ -191,6 +192,36 @@
      g_signal_emit_by_name(trans, "update", GUINT_TO_POINTER(1));
 }
 
+static void
+gdcs_generic_update_recurrences(GncDenseCalStore *trans, GDate *start, GList *recurrences)
+{
+    int i;
+    GDate date, next;
+
+    date = *start;
+    /* go one day before what's in the box so we can get the correct start
+     * date. */
+    g_date_subtract_days(&date, 1);
+    recurrenceListNextInstance(recurrences, &date, &next);
+
+    i = 0;
+    while ((i < trans->num_marks)
+           && g_date_valid(&next)
+           /* Do checking against end restriction. */
+           && ((trans->end_type == NEVER_END)
+               || (trans->end_type == END_ON_DATE
+                   && g_date_compare(&next, &trans->end_date) <= 0)
+               || (trans->end_type == END_AFTER_N_OCCS
+                   && i < trans->n_occurrences)))
+    {
+        *trans->cal_marks[i++] = next;
+        date = next;
+        recurrenceListNextInstance(recurrences, &date, &next);
+    }
+    trans->num_real_marks = (i == 0 ? 0 : (i-1));
+    g_signal_emit_by_name(trans, "update", GUINT_TO_POINTER(1));
+}
+
 void
 gnc_dense_cal_store_update_no_end(GncDenseCalStore *model, GDate *start, FreqSpec *fs)
 {
@@ -214,6 +245,29 @@
      gdcs_generic_update(model, start, fs);
 }
 
+void
+gnc_dense_cal_store_update_recurrences_no_end(GncDenseCalStore *model, GDate *start, GList *recurrences)
+{
+    model->end_type = NEVER_END;
+    gdcs_generic_update_recurrences(model, start, recurrences);
+}
+
+void
+gnc_dense_cal_store_update_recurrences_count_end(GncDenseCalStore *model, GDate *start, GList *recurrences, int num_occur)
+{
+    model->end_type = END_AFTER_N_OCCS;
+    model->n_occurrences = num_occur;
+    gdcs_generic_update_recurrences(model, start, recurrences);
+}
+
+void
+gnc_dense_cal_store_update_recurrences_date_end(GncDenseCalStore *model, GDate *start, GList *recurrences, GDate *end_date)
+{
+     model->end_type = END_ON_DATE;
+     model->end_date = *end_date;
+     gdcs_generic_update_recurrences(model, start, recurrences);
+}
+
 static GList*
 gdcs_get_contained(GncDenseCalModel *model)
 {

Modified: gnucash/trunk/src/gnome-utils/gnc-dense-cal-store.h
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-dense-cal-store.h	2007-02-18 20:23:11 UTC (rev 15605)
+++ gnucash/trunk/src/gnome-utils/gnc-dense-cal-store.h	2007-02-18 20:25:27 UTC (rev 15606)
@@ -48,10 +48,15 @@
 void gnc_dense_cal_store_clear(GncDenseCalStore *model);
 void gnc_dense_cal_store_update_name(GncDenseCalStore *model, gchar* name);
 void gnc_dense_cal_store_update_info(GncDenseCalStore *model, gchar* info);
+
 void gnc_dense_cal_store_update_no_end(GncDenseCalStore *model, GDate *start, FreqSpec *fs);
 void gnc_dense_cal_store_update_count_end(GncDenseCalStore *model, GDate *start, FreqSpec *fs, int num_occur);
 void gnc_dense_cal_store_update_date_end(GncDenseCalStore *model, GDate *start, FreqSpec *fs, GDate *end_date);
 
+void gnc_dense_cal_store_update_recurrences_no_end(GncDenseCalStore *model, GDate *start, GList *recurrences);
+void gnc_dense_cal_store_update_recurrences_count_end(GncDenseCalStore *model, GDate *start, GList *recurrences, int num_occur);
+void gnc_dense_cal_store_update_recurrences_date_end(GncDenseCalStore *model, GDate *start, GList *recurrences, GDate *end_date);
+
 G_END_DECLS
 
 #endif // _GNC_DENSE_CAL_STORE_H



More information about the gnucash-changes mailing list