gnucash stable: Multiple changes pushed

John Ralls jralls at code.gnucash.org
Sun Jul 16 12:49:57 EDT 2023


Updated	 via  https://github.com/Gnucash/gnucash/commit/583446ad (commit)
	 via  https://github.com/Gnucash/gnucash/commit/52e8524e (commit)
	 via  https://github.com/Gnucash/gnucash/commit/d30fdd80 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/9713683e (commit)
	from  https://github.com/Gnucash/gnucash/commit/bf7803c0 (commit)



commit 583446ade585642c3ffe3457e2645e081b7d6d2f
Merge: bf7803c054 52e8524ec5
Author: John Ralls <jralls at ceridwen.us>
Date:   Sun Jul 16 09:48:22 2023 -0700

    Merge Richard Cohen's 'declare-type-app-utils' into stable.


commit 52e8524ec55374e71c5fda3cfc6431fd00cc480a
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Wed Jun 28 13:43:27 2023 +0100

    Refactor: hide implementation of GncSxInstanceModel (move from .h -> .c)

diff --git a/libgnucash/app-utils/gnc-sx-instance-model.c b/libgnucash/app-utils/gnc-sx-instance-model.c
index c0ba5c90ac..27e19ae582 100644
--- a/libgnucash/app-utils/gnc-sx-instance-model.c
+++ b/libgnucash/app-utils/gnc-sx-instance-model.c
@@ -72,6 +72,18 @@ typedef struct _SxTxnCreationData
     GList **creation_errors;
 } SxTxnCreationData;
 
+struct _GncSxInstanceModel
+{
+    GObject parent;
+    gboolean disposed;
+
+    gint qof_event_handler_id;
+
+    GDate range_end;
+    gboolean include_disabled;
+    GList *sx_instance_list; /* <GncSxInstances*> */
+};
+
 static GncSxInstanceModel* gnc_sx_instance_model_new(void);
 
 static GncSxInstance* gnc_sx_instance_new(GncSxInstances *parent, GncSxInstanceState state, GDate *date, void *temporal_state, gint sequence_num);
diff --git a/libgnucash/app-utils/gnc-sx-instance-model.h b/libgnucash/app-utils/gnc-sx-instance-model.h
index fc1b5fca3f..6d2c6da3c4 100644
--- a/libgnucash/app-utils/gnc-sx-instance-model.h
+++ b/libgnucash/app-utils/gnc-sx-instance-model.h
@@ -37,24 +37,6 @@ G_BEGIN_DECLS
 #define GNC_TYPE_SX_INSTANCE_MODEL	      (gnc_sx_instance_model_get_type ())
 G_DECLARE_FINAL_TYPE (GncSxInstanceModel, gnc_sx_instance_model, GNC, SX_INSTANCE_MODEL, GObject)
 
-typedef struct _GncSxInstanceModel
-{
-    GObject parent;
-    gboolean disposed;
-
-    /* private */
-    gint qof_event_handler_id;
-
-    /* signals */
-    /* void (*added)(SchedXaction *sx); // gpointer user_data */
-    /* void (*updated)(SchedXaction *sx); // gpointer user_data */
-    /* void (*removing)(SchedXaction *sx); // gpointer user_data */
-
-    GDate range_end;
-    gboolean include_disabled;
-    GList *sx_instance_list; /* <GncSxInstances*> */
-} GncSxInstanceModel;
-
 typedef struct _GncSxInstances
 {
     SchedXaction *sx;

commit d30fdd8071390cb22ec5fe655760a5dbc2582f07
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Wed Jun 28 13:26:09 2023 +0100

    Refactor: DECLARE_FINAL GncSxInstanceModel < GObject

diff --git a/libgnucash/app-utils/gnc-sx-instance-model.c b/libgnucash/app-utils/gnc-sx-instance-model.c
index 5628c8a9be..c0ba5c90ac 100644
--- a/libgnucash/app-utils/gnc-sx-instance-model.c
+++ b/libgnucash/app-utils/gnc-sx-instance-model.c
@@ -90,6 +90,14 @@ typedef struct
     gnc_numeric amount;
 } ScrubItem;
 
+enum
+{
+    REMOVING, UPDATED, ADDED,
+    LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
 static void
 scrub_sx_split_numeric (Split* split, gboolean is_credit, GList **changes)
 {
@@ -670,7 +678,7 @@ gnc_sx_instance_model_class_init (GncSxInstanceModelClass *klass)
     object_class->dispose = gnc_sx_instance_model_dispose;
     object_class->finalize = gnc_sx_instance_model_finalize;
 
-    klass->removing_signal_id =
+    signals[REMOVING] =
         g_signal_new("removing",
                      GNC_TYPE_SX_INSTANCE_MODEL,
                      G_SIGNAL_RUN_FIRST,
@@ -682,7 +690,7 @@ gnc_sx_instance_model_class_init (GncSxInstanceModelClass *klass)
                      1,
                      G_TYPE_POINTER);
 
-    klass->updated_signal_id =
+    signals[UPDATED] =
         g_signal_new("updated",
                      GNC_TYPE_SX_INSTANCE_MODEL,
                      G_SIGNAL_RUN_FIRST,
@@ -694,7 +702,7 @@ gnc_sx_instance_model_class_init (GncSxInstanceModelClass *klass)
                      1,
                      G_TYPE_POINTER);
 
-    klass->added_signal_id =
+    signals[ADDED] =
         g_signal_new("added",
                      GNC_TYPE_SX_INSTANCE_MODEL,
                      G_SIGNAL_RUN_FIRST,
diff --git a/libgnucash/app-utils/gnc-sx-instance-model.h b/libgnucash/app-utils/gnc-sx-instance-model.h
index c51739cc8b..fc1b5fca3f 100644
--- a/libgnucash/app-utils/gnc-sx-instance-model.h
+++ b/libgnucash/app-utils/gnc-sx-instance-model.h
@@ -35,11 +35,7 @@
 G_BEGIN_DECLS
 
 #define GNC_TYPE_SX_INSTANCE_MODEL	      (gnc_sx_instance_model_get_type ())
-#define GNC_SX_INSTANCE_MODEL(obj)	      (G_TYPE_CHECK_INSTANCE_CAST ((obj), GNC_TYPE_SX_INSTANCE_MODEL, GncSxInstanceModel))
-#define GNC_SX_INSTANCE_MODEL_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GNC_TYPE_SX_INSTANCE_MODEL, GncSxInstanceModelClass))
-#define GNC_IS_SX_INSTANCE_MODEL(obj)	      (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GNC_TYPE_SX_INSTANCE_MODEL))
-#define GNC_IS_SX_INSTANCE_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GNC_TYPE_SX_INSTANCE_MODEL))
-#define GNC_SX_INSTANCE_MODEL_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GNC_TYPE_SX_INSTANCE_MODEL, GncSxInstanceModelClass))
+G_DECLARE_FINAL_TYPE (GncSxInstanceModel, gnc_sx_instance_model, GNC, SX_INSTANCE_MODEL, GObject)
 
 typedef struct _GncSxInstanceModel
 {
@@ -59,15 +55,6 @@ typedef struct _GncSxInstanceModel
     GList *sx_instance_list; /* <GncSxInstances*> */
 } GncSxInstanceModel;
 
-typedef struct _GncSxInstanceModelClass
-{
-    GObjectClass parent;
-
-    guint removing_signal_id;
-    guint updated_signal_id;
-    guint added_signal_id;
-} GncSxInstanceModelClass;
-
 typedef struct _GncSxInstances
 {
     SchedXaction *sx;
@@ -113,8 +100,6 @@ typedef struct _GncSxVariableNeeded
     GncSxVariable *variable;
 } GncSxVariableNeeded;
 
-GType gnc_sx_instance_model_get_type(void);
-
 /** Shorthand for get_instances(now, FALSE); */
 GncSxInstanceModel* gnc_sx_get_current_instances(void);
 

commit 9713683ee35097d78ff670bedd24b51a8278b779
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Fri Jun 23 16:44:41 2023 +0100

    Refactor: define and use api for GncSxInstanceModel

diff --git a/gnucash/gnome-utils/gnc-sx-instance-dense-cal-adapter.c b/gnucash/gnome-utils/gnc-sx-instance-dense-cal-adapter.c
index a0ee9b5afc..dc7c9da416 100644
--- a/gnucash/gnome-utils/gnc-sx-instance-dense-cal-adapter.c
+++ b/gnucash/gnome-utils/gnc-sx-instance-dense-cal-adapter.c
@@ -154,7 +154,7 @@ gsidca_get_contained(GncDenseCalModel *model)
     GncSxInstanceDenseCalAdapter *adapter = GNC_SX_INSTANCE_DENSE_CAL_ADAPTER(model);
     //"removing return gnc_g_list_map(instances->sxes, sx_to_tag, null);
     GList *list = NULL, *sxes;
-    for (sxes = adapter->instances->sx_instance_list; sxes != NULL; sxes = sxes->next)
+    for (sxes = gnc_sx_instance_model_get_sx_instances_list (adapter->instances); sxes != NULL; sxes = sxes->next)
     {
         GncSxInstances *sx_instances = (GncSxInstances*)sxes->data;
         if (xaccSchedXactionGetEnabled(sx_instances->sx))
@@ -169,7 +169,7 @@ gsidca_get_name(GncDenseCalModel *model, guint tag)
 {
     GncSxInstanceDenseCalAdapter *adapter = GNC_SX_INSTANCE_DENSE_CAL_ADAPTER(model);
     GncSxInstances *insts
-    = (GncSxInstances*)g_list_find_custom(adapter->instances->sx_instance_list, GUINT_TO_POINTER(tag), gsidca_find_sx_with_tag)->data;
+    = (GncSxInstances*)g_list_find_custom(gnc_sx_instance_model_get_sx_instances_list (adapter->instances), GUINT_TO_POINTER(tag), gsidca_find_sx_with_tag)->data;
     if (insts == NULL)
         return NULL;
     return xaccSchedXactionGetName(insts->sx);
@@ -183,7 +183,7 @@ gsidca_get_info(GncDenseCalModel *model, guint tag)
     GList *schedule;
     gchar *schedule_str;
     GncSxInstances *insts
-    = (GncSxInstances*)g_list_find_custom(adapter->instances->sx_instance_list, GUINT_TO_POINTER(tag), gsidca_find_sx_with_tag)->data;
+    = (GncSxInstances*)g_list_find_custom(gnc_sx_instance_model_get_sx_instances_list(adapter->instances), GUINT_TO_POINTER(tag), gsidca_find_sx_with_tag)->data;
     if (insts == NULL)
         return NULL;
     schedule = gnc_sx_get_schedule(insts->sx);
@@ -197,7 +197,7 @@ gsidca_get_instance_count(GncDenseCalModel *model, guint tag)
     GncSxInstanceDenseCalAdapter *adapter = GNC_SX_INSTANCE_DENSE_CAL_ADAPTER(model);
     // g_list_find(instances->sxes, {sx_to_tag, tag}).length();
     GncSxInstances *insts
-    = (GncSxInstances*)g_list_find_custom(adapter->instances->sx_instance_list, GUINT_TO_POINTER(tag), gsidca_find_sx_with_tag)->data;
+    = (GncSxInstances*)g_list_find_custom(gnc_sx_instance_model_get_sx_instances_list(adapter->instances), GUINT_TO_POINTER(tag), gsidca_find_sx_with_tag)->data;
     if (insts == NULL)
         return 0;
     return g_list_length(insts->instance_list);
@@ -209,7 +209,7 @@ gsidca_get_instance(GncDenseCalModel *model, guint tag, gint instance_index, GDa
     GncSxInstanceDenseCalAdapter *adapter = GNC_SX_INSTANCE_DENSE_CAL_ADAPTER(model);
     GncSxInstance *inst;
     GncSxInstances *insts
-    = (GncSxInstances*)g_list_find_custom(adapter->instances->sx_instance_list, GUINT_TO_POINTER(tag), gsidca_find_sx_with_tag)->data;
+    = (GncSxInstances*)g_list_find_custom(gnc_sx_instance_model_get_sx_instances_list(adapter->instances), GUINT_TO_POINTER(tag), gsidca_find_sx_with_tag)->data;
     if (insts == NULL)
         return;
     inst = (GncSxInstance*)g_list_nth_data(insts->instance_list, instance_index);
diff --git a/gnucash/gnome-utils/gnc-sx-list-tree-model-adapter.c b/gnucash/gnome-utils/gnc-sx-list-tree-model-adapter.c
index 14c689d45c..71541c2544 100644
--- a/gnucash/gnome-utils/gnc-sx-list-tree-model-adapter.c
+++ b/gnucash/gnome-utils/gnc-sx-list-tree-model-adapter.c
@@ -475,7 +475,7 @@ gsltma_populate_tree_store (GncSxListTreeModelAdapter *model)
     GtkTreeIter iter;
     GList *list;
 
-    for (list = model->instances->sx_instance_list; list != NULL; list = list->next)
+    for (list = gnc_sx_instance_model_get_sx_instances_list (model->instances); list != NULL; list = list->next)
     {
         GncSxInstances *instances = (GncSxInstances*)list->data;
         gchar *frequency_str;
@@ -563,7 +563,7 @@ gsltma_get_sx_instances_from_orig_iter (GncSxListTreeModelAdapter *model, GtkTre
     index = indices[0];
 
     gtk_tree_path_free (path);
-    return (GncSxInstances*)g_list_nth_data (model->instances->sx_instance_list, index);
+    return (GncSxInstances*)g_list_nth_data (gnc_sx_instance_model_get_sx_instances_list (model->instances), index);
 }
 
 GncSxInstances*
diff --git a/gnucash/gnome/dialog-sx-since-last-run.c b/gnucash/gnome/dialog-sx-since-last-run.c
index be82415924..676aa9685d 100644
--- a/gnucash/gnome/dialog-sx-since-last-run.c
+++ b/gnucash/gnome/dialog-sx-since-last-run.c
@@ -411,7 +411,7 @@ gsslrtma_populate_tree_store (GncSxSlrTreeModelAdapter *model)
     GList *sx_iter;
     int instances_index = -1;
 
-    for (sx_iter = model->instances->sx_instance_list; sx_iter != NULL; sx_iter = sx_iter->next)
+    for (sx_iter = gnc_sx_instance_model_get_sx_instances_list (model->instances); sx_iter != NULL; sx_iter = sx_iter->next)
     {
         GncSxInstances *instances = (GncSxInstances*)sx_iter->data;
         char last_occur_date_buf[MAX_DATE_LENGTH+1];
@@ -549,7 +549,7 @@ _gnc_sx_slr_tree_model_adapter_get_sx_instances (GncSxSlrTreeModelAdapter *model
     index = indices[0];
     gtk_tree_path_free (path);
 
-    return (GncSxInstances*)g_list_nth_data (model->instances->sx_instance_list, index);
+    return (GncSxInstances*)g_list_nth_data (gnc_sx_instance_model_get_sx_instances_list (model->instances), index);
 }
 
 GncSxInstance*
@@ -575,7 +575,7 @@ _gnc_sx_slr_model_get_instance (GncSxSlrTreeModelAdapter *model, GtkTreeIter *it
     instance_index = indices[1];
     gtk_tree_path_free (path);
 
-    instances = (GncSxInstances*)g_list_nth_data (model->instances->sx_instance_list, instances_index);
+    instances = (GncSxInstances*)g_list_nth_data (gnc_sx_instance_model_get_sx_instances_list (model->instances), instances_index);
     if (instance_index < 0 || instance_index >= g_list_length (instances->instance_list))
     {
         return NULL;
@@ -667,7 +667,7 @@ _get_path_for_variable (GncSxSlrTreeModelAdapter *model, GncSxInstance *instance
     int indices[3];
     GtkTreePath *path;
 
-    indices[0] = g_list_index (model->instances->sx_instance_list, instance->parent);
+    indices[0] = g_list_index (gnc_sx_instance_model_get_sx_instances_list (model->instances), instance->parent);
     if (indices[0] == -1)
         return NULL;
     indices[1] = g_list_index (instance->parent->instance_list, instance);
@@ -706,7 +706,7 @@ gsslrtma_removing_cb (GncSxInstanceModel *instances, SchedXaction *to_remove_sx,
     GList *iter;
     int index = 0;
     // get index, create path, remove
-    for (iter = instances->sx_instance_list; iter != NULL; iter = iter->next, index++)
+    for (iter = gnc_sx_instance_model_get_sx_instances_list (instances); iter != NULL; iter = iter->next, index++)
     {
         GncSxInstances *instances = (GncSxInstances*)iter->data;
         if (instances->sx == to_remove_sx)
diff --git a/libgnucash/app-utils/gnc-sx-instance-model.c b/libgnucash/app-utils/gnc-sx-instance-model.c
index d23659c538..5628c8a9be 100644
--- a/libgnucash/app-utils/gnc-sx-instance-model.c
+++ b/libgnucash/app-utils/gnc-sx-instance-model.c
@@ -1898,3 +1898,8 @@ GHashTable* gnc_sx_all_instantiate_cashflow_all(GDate range_start, GDate range_e
                                     result_map, NULL);
     return result_map;
 }
+
+GList *gnc_sx_instance_model_get_sx_instances_list (GncSxInstanceModel *model)
+{
+    return model->sx_instance_list;
+}
diff --git a/libgnucash/app-utils/gnc-sx-instance-model.h b/libgnucash/app-utils/gnc-sx-instance-model.h
index e3de13afe3..c51739cc8b 100644
--- a/libgnucash/app-utils/gnc-sx-instance-model.h
+++ b/libgnucash/app-utils/gnc-sx-instance-model.h
@@ -54,7 +54,6 @@ typedef struct _GncSxInstanceModel
     /* void (*updated)(SchedXaction *sx); // gpointer user_data */
     /* void (*removing)(SchedXaction *sx); // gpointer user_data */
 
-    /* public */
     GDate range_end;
     gboolean include_disabled;
     GList *sx_instance_list; /* <GncSxInstances*> */
@@ -256,6 +255,13 @@ void gnc_sx_all_instantiate_cashflow(GList *all_sxes,
  * g_hash_table_destroy. */
 GHashTable* gnc_sx_all_instantiate_cashflow_all(GDate range_start, GDate range_end);
 
+/** Returns the list of GncSxInstances in the model
+ * (Each element in the list has type GncSxInstances)
+ *
+ * The returned list is owned by the model
+ */
+GList *gnc_sx_instance_model_get_sx_instances_list (GncSxInstanceModel *model);
+
 G_END_DECLS
 
 
diff --git a/libgnucash/app-utils/test/test-sx.cpp b/libgnucash/app-utils/test/test-sx.cpp
index b38fc22e87..04b7468ed0 100644
--- a/libgnucash/app-utils/test/test-sx.cpp
+++ b/libgnucash/app-utils/test/test-sx.cpp
@@ -60,8 +60,8 @@ test_basic()
         GncSxInstances *insts;
         GList *iter;
 
-        do_test(g_list_length(model->sx_instance_list) == 1, "1 GncSxInstances");
-        insts = (GncSxInstances*)model->sx_instance_list->data;
+        do_test(g_list_length(gnc_sx_instance_model_get_sx_instances_list(model)) == 1, "1 GncSxInstances");
+        insts = (GncSxInstances*)gnc_sx_instance_model_get_sx_instances_list(model)->data;
         do_test(g_list_length(insts->instance_list) == 3, "yesterday, today and tomorrow");
         for (iter = insts->instance_list; iter != NULL; iter = iter->next)
         {
@@ -93,7 +93,7 @@ test_empty()
 
     end = g_date_new_dmy(31, (GDateMonth)12, way_in_the_future_year);
     model = gnc_sx_get_instances(end, TRUE);
-    do_test(g_list_length(model->sx_instance_list) == 0, "no instances");
+    do_test(g_list_length(gnc_sx_instance_model_get_sx_instances_list(model)) == 0, "no instances");
     g_object_unref(G_OBJECT(model));
     g_date_free(end);
     success("empty");
@@ -128,8 +128,8 @@ test_once()
 
     model = gnc_sx_get_instances(end, TRUE);
 
-    do_test(g_list_length(model->sx_instance_list) == 1, "1 instances");
-    instances = (GncSxInstances*)model->sx_instance_list->data;
+    do_test(g_list_length(gnc_sx_instance_model_get_sx_instances_list(model)) == 1, "1 instances");
+    instances = (GncSxInstances*)gnc_sx_instance_model_get_sx_instances_list(model)->data;
     do_test(g_list_length(instances->instance_list) == 1, "1 instance");
     instance = (GncSxInstance*)instances->instance_list->data;
     do_test(g_date_compare(when, &instances->next_instance_date) == 0, "next instance is expected");
@@ -165,8 +165,8 @@ test_state_changes()
     foo = add_daily_sx("foo", start, NULL, NULL);
     model = gnc_sx_get_instances(end, TRUE);
 
-    do_test(g_list_length(model->sx_instance_list) == 1, "one sx");
-    insts = (GncSxInstances*)g_list_nth_data(model->sx_instance_list, 0);
+    do_test(g_list_length(gnc_sx_instance_model_get_sx_instances_list(model)) == 1, "one sx");
+    insts = (GncSxInstances*)g_list_nth_data(gnc_sx_instance_model_get_sx_instances_list(model), 0);
     do_test(g_list_length(insts->instance_list) == 4, "4 instances");
 
     inst = _nth_instance(insts, 2);



Summary of changes:
 .../gnc-sx-instance-dense-cal-adapter.c            | 10 ++---
 .../gnome-utils/gnc-sx-list-tree-model-adapter.c   |  4 +-
 gnucash/gnome/dialog-sx-since-last-run.c           | 10 ++---
 libgnucash/app-utils/gnc-sx-instance-model.c       | 31 ++++++++++++++--
 libgnucash/app-utils/gnc-sx-instance-model.h       | 43 ++++------------------
 libgnucash/app-utils/test/test-sx.cpp              | 14 +++----
 6 files changed, 55 insertions(+), 57 deletions(-)



More information about the gnucash-changes mailing list