31 #include "gnc-xml-helper.h"
33 #include "sixtp-utils.h"
34 #include "sixtp-parsers.h"
35 #include "sixtp-utils.h"
36 #include "sixtp-dom-parsers.h"
37 #include "sixtp-dom-generators.h"
40 #include "io-gncxml-gen.h"
45 const gchar *budget_version_string =
"2.0.0";
48 #define gnc_budget_string "gnc:budget"
49 #define bgt_id_string "bgt:id"
50 #define bgt_name_string "bgt:name"
51 #define bgt_description_string "bgt:description"
52 #define bgt_num_periods_string "bgt:num-periods"
53 #define bgt_recurrence_string "bgt:recurrence"
54 #define bgt_slots_string "bgt:slots"
57 gnc_budget_dom_tree_create(
GncBudget *bgt)
62 ENTER (
"(budget=%p)", bgt);
64 ret = xmlNewNode(NULL, BAD_CAST gnc_budget_string);
65 xmlSetProp(ret, BAD_CAST
"version", BAD_CAST budget_version_string);
68 xmlAddChild(ret, guid_to_dom_tree(bgt_id_string,
69 gnc_budget_get_guid(bgt)));
71 xmlAddChild(ret, text_to_dom_tree(bgt_name_string,
72 gnc_budget_get_name(bgt)));
74 xmlAddChild(ret, text_to_dom_tree(bgt_description_string,
75 gnc_budget_get_description(bgt)));
77 xmlAddChild(ret, guint_to_dom_tree(bgt_num_periods_string,
78 gnc_budget_get_num_periods(bgt)));
80 xmlAddChild(ret, recurrence_to_dom_tree(bgt_recurrence_string,
81 gnc_budget_get_recurrence(bgt)));
83 kf = qof_instance_get_slots(QOF_INSTANCE(bgt));
86 xmlNodePtr kvpnode = kvp_frame_to_dom_tree(bgt_slots_string, kf);
88 xmlAddChild(ret, kvpnode);
96 static inline gboolean
97 set_string(xmlNodePtr node,
GncBudget* bgt,
98 void (*func)(
GncBudget *bgt,
const gchar *txt))
100 gchar* txt = dom_tree_to_text(node);
101 g_return_val_if_fail(txt, FALSE);
109 budget_id_handler (xmlNodePtr node, gpointer bgt)
113 guid = dom_tree_to_guid(node);
114 g_return_val_if_fail(guid, FALSE);
115 qof_instance_set_guid(QOF_INSTANCE(bgt), guid);
121 budget_name_handler (xmlNodePtr node, gpointer bgt)
127 budget_description_handler (xmlNodePtr node, gpointer bgt)
133 budget_num_periods_handler (xmlNodePtr node, gpointer bgt)
137 if (dom_tree_to_guint(node, &num_periods))
147 budget_recurrence_handler (xmlNodePtr node, gpointer bgt)
151 if ((r = dom_tree_to_recurrence(node)) == NULL)
154 gnc_budget_set_recurrence(GNC_BUDGET(bgt), r);
160 budget_slots_handler (xmlNodePtr node, gpointer bgt)
162 return dom_tree_to_kvp_frame_given(
163 node, qof_instance_get_slots(QOF_INSTANCE(bgt)));
168 { bgt_id_string, budget_id_handler, 1, 0 },
169 { bgt_name_string, budget_name_handler, 0, 0 },
170 { bgt_description_string, budget_description_handler, 0, 0 },
171 { bgt_num_periods_string, budget_num_periods_handler, 1, 0 },
172 { bgt_recurrence_string, budget_recurrence_handler, 1, 0 },
173 { bgt_slots_string, budget_slots_handler, 0, 0},
178 gnc_budget_end_handler(gpointer data_for_children,
179 GSList* data_from_children, GSList* sibling_data,
180 gpointer parent_data, gpointer global_data,
181 gpointer *result,
const gchar *tag)
184 xmlNodePtr tree = (xmlNodePtr)data_for_children;
186 QofBook *book = gdata->bookdata;
200 g_return_val_if_fail(tree, FALSE);
202 bgt = dom_tree_to_budget(tree, book);
207 gdata->cb(tag, gdata->parsedata, bgt);
215 dom_tree_to_budget (xmlNodePtr node,
QofBook *book)
220 if (!dom_tree_generic_parse (node, budget_handlers, bgt))
222 PERR (
"failed to parse budget tree");
230 gnc_budget_sixtp_parser_create(
void)
232 return sixtp_dom_parser_new(gnc_budget_end_handler, NULL, NULL);
void gnc_budget_set_num_periods(GncBudget *budget, guint num_periods)
void gnc_budget_destroy(GncBudget *budget)
GncBudget * gnc_budget_new(QofBook *book)
#define PERR(format, args...)
#define ENTER(format, args...)
api for GnuCash version 2 XML-based file format
void gnc_budget_set_name(GncBudget *budget, const gchar *name)
void gnc_budget_set_description(GncBudget *budget, const gchar *description)
struct KvpFrameImpl KvpFrame
#define LEAVE(format, args...)
const gchar * QofLogModule