35 #include "gnc-sx-instance-dense-cal-adapter.h"
36 #include "gnc-dense-cal.h"
39 #define G_LOG_DOMAIN "gnc.gui.sx.adapter.sx-dense-cal"
41 static void gnc_sx_instance_dense_cal_adapter_dispose(GObject *obj);
42 static void gnc_sx_instance_dense_cal_adapter_finalize(GObject *obj);
44 static GList* gsidca_get_contained(GncDenseCalModel *model);
45 static gchar* gsidca_get_name(GncDenseCalModel *model, guint tag);
46 static gchar* gsidca_get_info(GncDenseCalModel *model, guint tag);
47 static gint gsidca_get_instance_count(GncDenseCalModel *model, guint tag);
48 static void gsidca_get_instance(GncDenseCalModel *model, guint tag, gint instance_index, GDate *date);
50 static GObjectClass *parent_class = NULL;
67 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
69 obj_class->dispose = gnc_sx_instance_dense_cal_adapter_dispose;
70 obj_class->finalize = gnc_sx_instance_dense_cal_adapter_finalize;
72 parent_class = g_type_class_peek_parent(klass);
76 gnc_sx_instance_dense_cal_adapter_init(GTypeInstance *instance, gpointer klass)
83 gnc_sx_instance_dense_cal_adapter_interface_init(gpointer g_iface, gpointer iface_data)
86 iface->get_contained = gsidca_get_contained;
87 iface->get_name = gsidca_get_name;
88 iface->get_info = gsidca_get_info;
89 iface->get_instance_count = gsidca_get_instance_count;
90 iface->get_instance = gsidca_get_instance;
97 g_debug(
"instance added\n");
98 if (xaccSchedXactionGetEnabled(sx_added))
100 g_signal_emit_by_name(adapter,
"added", GPOINTER_TO_UINT(sx_added));
109 g_debug(
"instances updated\n");
110 if (xaccSchedXactionGetEnabled(sx_updated))
112 g_signal_emit_by_name(adapter,
"update", GPOINTER_TO_UINT((gpointer)sx_updated));
116 g_signal_emit_by_name(adapter,
"removing", GPOINTER_TO_UINT((gpointer)sx_updated));
124 g_debug(
"removing instance...\n");
125 g_signal_emit_by_name(adapter,
"removing", GPOINTER_TO_UINT(sx_to_be_removed));
126 gnc_sx_instance_model_remove_sx_instances(model, sx_to_be_removed);
133 adapter->instances = instances;
134 g_object_ref(G_OBJECT(adapter->instances));
136 g_signal_connect(instances,
"added", (GCallback)gsidca_instances_added_cb, adapter);
137 g_signal_connect(instances,
"updated", (GCallback)gsidca_instances_updated_cb, adapter);
138 g_signal_connect(instances,
"removing", (GCallback)gsidca_instances_removing_cb, adapter);
143 gnc_sx_instance_dense_cal_adapter_get_type(
void)
145 static GType type = 0;
148 static const GTypeInfo info =
153 (GClassInitFunc)gnc_sx_instance_dense_cal_adapter_class_init,
158 (GInstanceInitFunc)gnc_sx_instance_dense_cal_adapter_init
160 static const GInterfaceInfo iDenseCalModelInfo =
162 (GInterfaceInitFunc)gnc_sx_instance_dense_cal_adapter_interface_init,
167 type = g_type_register_static (G_TYPE_OBJECT,
168 "GncSxInstanceDenseCalAdapterType",
170 g_type_add_interface_static(type,
171 GNC_TYPE_DENSE_CAL_MODEL,
172 &iDenseCalModelInfo);
178 gsidca_find_sx_with_tag(gconstpointer list_data,
182 return (GUINT_TO_POINTER(GPOINTER_TO_UINT(sx_instances->sx)) == find_data ? 0 : 1);
186 gsidca_get_contained(GncDenseCalModel *model)
190 GList *list = NULL, *sxes;
191 for (sxes = adapter->instances->sx_instance_list; sxes != NULL; sxes = sxes->next)
194 if (xaccSchedXactionGetEnabled(sx_instances->sx))
196 list = g_list_append(list, GUINT_TO_POINTER(GPOINTER_TO_UINT(sx_instances->sx)));
203 gsidca_get_name(GncDenseCalModel *model, guint tag)
207 = (
GncSxInstances*)g_list_find_custom(adapter->instances->sx_instance_list, GUINT_TO_POINTER(tag), gsidca_find_sx_with_tag)->data;
210 return xaccSchedXactionGetName(insts->sx);
214 gsidca_get_info(GncDenseCalModel *model, guint tag)
221 = (
GncSxInstances*)g_list_find_custom(adapter->instances->sx_instance_list, GUINT_TO_POINTER(tag), gsidca_find_sx_with_tag)->data;
225 schedule_str = recurrenceListToCompactString(schedule);
230 gsidca_get_instance_count(GncDenseCalModel *model, guint tag)
235 = (
GncSxInstances*)g_list_find_custom(adapter->instances->sx_instance_list, GUINT_TO_POINTER(tag), gsidca_find_sx_with_tag)->data;
242 gsidca_get_instance(GncDenseCalModel *model, guint tag, gint instance_index, GDate *date)
247 = (
GncSxInstances*)g_list_find_custom(adapter->instances->sx_instance_list, GUINT_TO_POINTER(tag), gsidca_find_sx_with_tag)->data;
251 g_date_valid(&inst->
date);
257 gnc_sx_instance_dense_cal_adapter_dispose(GObject *obj)
260 g_return_if_fail(obj != NULL);
261 adapter = GNC_SX_INSTANCE_DENSE_CAL_ADAPTER(obj);
263 if (adapter->disposed)
return;
264 adapter->disposed = TRUE;
266 g_object_unref(G_OBJECT(adapter->instances));
267 adapter->instances = NULL;
269 G_OBJECT_CLASS(parent_class)->dispose(obj);
272 static void gnc_sx_instance_dense_cal_adapter_finalize(GObject *obj)
274 g_return_if_fail(obj != NULL);
276 G_OBJECT_CLASS(parent_class)->finalize(obj);
GList * gnc_sx_get_schedule(const SchedXaction *sx)
void gnc_sx_instance_model_update_sx_instances(GncSxInstanceModel *model, SchedXaction *sx)