35#include "gnc-sx-instance-dense-cal-adapter.h"
36#include "gnc-dense-cal.h"
40#define G_LOG_DOMAIN "gnc.gui.sx.adapter.sx-dense-cal"
41static const QofLogModule log_module = G_LOG_DOMAIN;
43static void gnc_sx_instance_dense_cal_adapter_interface_init(GncDenseCalModelInterface *iface);
44static void gnc_sx_instance_dense_cal_adapter_dispose(GObject *obj);
45static void gnc_sx_instance_dense_cal_adapter_finalize(GObject *obj);
47static GList* gsidca_get_contained(GncDenseCalModel *model);
48static gchar* gsidca_get_name(GncDenseCalModel *model, guint tag);
49static gchar* gsidca_get_info(GncDenseCalModel *model, guint tag);
50static gint gsidca_get_instance_count(GncDenseCalModel *model, guint tag);
51static void gsidca_get_instance(GncDenseCalModel *model, guint tag, gint instance_index, GDate *date);
57 GncSxInstanceModel *instances;
60G_DEFINE_TYPE_WITH_CODE (GncSxInstanceDenseCalAdapter, gnc_sx_instance_dense_cal_adapter, G_TYPE_OBJECT,
61 G_IMPLEMENT_INTERFACE (GNC_TYPE_DENSE_CAL_MODEL, gnc_sx_instance_dense_cal_adapter_interface_init))
64gnc_sx_instance_dense_cal_adapter_class_init(GncSxInstanceDenseCalAdapterClass *klass)
66 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
68 obj_class->dispose = gnc_sx_instance_dense_cal_adapter_dispose;
69 obj_class->finalize = gnc_sx_instance_dense_cal_adapter_finalize;
73gnc_sx_instance_dense_cal_adapter_init(GncSxInstanceDenseCalAdapter *instance)
80gnc_sx_instance_dense_cal_adapter_interface_init(GncDenseCalModelInterface *iface)
82 iface->get_contained = gsidca_get_contained;
83 iface->get_name = gsidca_get_name;
84 iface->get_info = gsidca_get_info;
85 iface->get_instance_count = gsidca_get_instance_count;
86 iface->get_instance = gsidca_get_instance;
90gsidca_instances_added_cb(GncSxInstanceModel *model, SchedXaction *sx_added, gpointer user_data)
92 GncSxInstanceDenseCalAdapter *adapter = GNC_SX_INSTANCE_DENSE_CAL_ADAPTER(user_data);
93 DEBUG(
"instance added\n");
94 if (xaccSchedXactionGetEnabled(sx_added))
96 g_signal_emit_by_name(adapter,
"added", GPOINTER_TO_UINT(sx_added));
101gsidca_instances_updated_cb(GncSxInstanceModel *model, SchedXaction *sx_updated, gpointer user_data)
103 GncSxInstanceDenseCalAdapter *adapter = GNC_SX_INSTANCE_DENSE_CAL_ADAPTER(user_data);
104 gnc_sx_instance_model_update_sx_instances(model, sx_updated);
105 DEBUG(
"instances updated\n");
106 if (xaccSchedXactionGetEnabled(sx_updated))
108 g_signal_emit_by_name(adapter,
"update", GPOINTER_TO_UINT((gpointer)sx_updated));
112 g_signal_emit_by_name(adapter,
"removing", GPOINTER_TO_UINT((gpointer)sx_updated));
117gsidca_instances_removing_cb(GncSxInstanceModel *model, SchedXaction *sx_to_be_removed, gpointer user_data)
119 GncSxInstanceDenseCalAdapter *adapter = GNC_SX_INSTANCE_DENSE_CAL_ADAPTER(user_data);
120 DEBUG(
"removing instance...\n");
121 g_signal_emit_by_name(adapter,
"removing", GPOINTER_TO_UINT(sx_to_be_removed));
122 gnc_sx_instance_model_remove_sx_instances(model, sx_to_be_removed);
125GncSxInstanceDenseCalAdapter*
126gnc_sx_instance_dense_cal_adapter_new(GncSxInstanceModel *instances)
128 GncSxInstanceDenseCalAdapter *adapter = g_object_new(GNC_TYPE_SX_INSTANCE_DENSE_CAL_ADAPTER, NULL);
129 adapter->instances = instances;
130 g_object_ref(G_OBJECT(adapter->instances));
132 g_signal_connect(instances,
"added", (GCallback)gsidca_instances_added_cb, adapter);
133 g_signal_connect(instances,
"updated", (GCallback)gsidca_instances_updated_cb, adapter);
134 g_signal_connect(instances,
"removing", (GCallback)gsidca_instances_removing_cb, adapter);
139gsidca_find_sx_with_tag(gconstpointer list_data,
143 return (GUINT_TO_POINTER(GPOINTER_TO_UINT(sx_instances->sx)) ==
find_data ? 0 : 1);
147gsidca_get_contained(GncDenseCalModel *model)
149 GncSxInstanceDenseCalAdapter *adapter = GNC_SX_INSTANCE_DENSE_CAL_ADAPTER(model);
151 GList *list = NULL, *sxes;
152 for (sxes = gnc_sx_instance_model_get_sx_instances_list (adapter->instances); sxes != NULL; sxes = sxes->next)
155 if (xaccSchedXactionGetEnabled(sx_instances->sx))
156 list = g_list_prepend (list, GUINT_TO_POINTER
157 (GPOINTER_TO_UINT (sx_instances->sx)));
159 return g_list_reverse (list);
163gsidca_get_name(GncDenseCalModel *model, guint tag)
165 GncSxInstanceDenseCalAdapter *adapter = GNC_SX_INSTANCE_DENSE_CAL_ADAPTER(model);
167 = (
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;
170 return xaccSchedXactionGetName(insts->sx);
174gsidca_get_info(GncDenseCalModel *model, guint tag)
176 GncSxInstanceDenseCalAdapter *adapter = GNC_SX_INSTANCE_DENSE_CAL_ADAPTER(model);
181 = (
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;
185 schedule_str = recurrenceListToCompactString(schedule);
190gsidca_get_instance_count(GncDenseCalModel *model, guint tag)
192 GncSxInstanceDenseCalAdapter *adapter = GNC_SX_INSTANCE_DENSE_CAL_ADAPTER(model);
195 = (
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;
202gsidca_get_instance(GncDenseCalModel *model, guint tag, gint instance_index, GDate *date)
204 GncSxInstanceDenseCalAdapter *adapter = GNC_SX_INSTANCE_DENSE_CAL_ADAPTER(model);
207 = (
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;
211 g_date_valid(&inst->
date);
217gnc_sx_instance_dense_cal_adapter_dispose(GObject *obj)
219 GncSxInstanceDenseCalAdapter *adapter;
220 g_return_if_fail(obj != NULL);
221 adapter = GNC_SX_INSTANCE_DENSE_CAL_ADAPTER(obj);
223 if (adapter->disposed)
return;
224 adapter->disposed = TRUE;
226 g_object_unref(G_OBJECT(adapter->instances));
227 adapter->instances = NULL;
229 G_OBJECT_CLASS(gnc_sx_instance_dense_cal_adapter_parent_class)->dispose(obj);
232static void gnc_sx_instance_dense_cal_adapter_finalize(GObject *obj)
234 g_return_if_fail(obj != NULL);
236 G_OBJECT_CLASS(gnc_sx_instance_dense_cal_adapter_parent_class)->finalize(obj);
#define DEBUG(format, args...)
Print a debugging message.
GList * gnc_sx_get_schedule(const SchedXaction *sx)
GDate date
the instance date.
GList * instance_list
GList<GncSxInstance*>