]> saetta.ns0.it Git - zakform/libzakform/commitdiff
Started function ZakFormForm::get_xml.
authorAndrea Zagli <azagli@libero.it>
Wed, 27 May 2020 13:07:48 +0000 (15:07 +0200)
committerAndrea Zagli <azagli@libero.it>
Wed, 27 May 2020 13:07:48 +0000 (15:07 +0200)
src/form.c
src/form.h
src/formelement.c
src/formelement.h

index 5478b2af80281c610145df4de5d45759daa03afe..852d861c1e2d76f97c829c30c490ded185fedc07 100644 (file)
@@ -825,6 +825,56 @@ zak_form_form_delete (ZakFormForm *zakform, ZakFormIProvider *provider)
        return zak_form_iprovider_delete (provider, priv->ar_elements);
 }
 
+/**
+ * zak_form_form_get_xml:
+ * @zakform:
+ * @version: not used.
+ *
+ * Returns: the xml fo the form.
+ */
+xmlDoc
+*zak_form_form_get_xml (ZakFormForm *zakform, const gchar *version)
+{
+       ZakFormFormPrivate *priv;
+
+       xmlDoc *xdoc;
+       xmlNode *xroot;
+       xmlNode *xnode;
+
+       gchar *_version;
+
+       guint i;
+
+       if (version == NULL)
+               {
+                       _version = g_strdup ("1.0");
+               }
+       else
+               {
+                       _version = g_strdup (version);
+               }
+
+       _version = g_strdup ("1.0");
+
+       priv = zak_form_form_get_instance_private (zakform);
+
+       xdoc = xmlNewDoc ((const xmlChar *)"1.0");
+
+       xroot = xmlNewNode (NULL, (const xmlChar *)"zakform");
+       xmlSetProp (xroot, (const xmlChar *)"version", (const xmlChar *)_version);
+       xmlDocSetRootElement (xdoc, xroot);
+
+       for (i = 0; i < priv->ar_elements->len; i++)
+               {
+                       xnode = zak_form_element_get_xml ((ZakFormElement *)g_ptr_array_index (priv->ar_elements, i), _version);
+                       xmlAddChild (xroot, xnode);
+               }
+
+       g_free (_version);
+
+       return xdoc;
+}
+
 /* PRIVATE */
 static void
 zak_form_form_set_property (GObject *object,
index 9a6e90d6b162c0d1b2b7fe817d44eadeedd6c371..21fb097b26677fc40d63a85b8d3e3f2293dbb5e1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2015-2017 Andrea Zagli <azagli@libero.it>
+ * Copyright (C) 2015-2020 Andrea Zagli <azagli@libero.it>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -78,6 +78,8 @@ gboolean zak_form_form_insert (ZakFormForm *zakform, ZakFormIProvider *provider)
 gboolean zak_form_form_update (ZakFormForm *zakform, ZakFormIProvider *provider);
 gboolean zak_form_form_delete (ZakFormForm *zakform, ZakFormIProvider *provider);
 
+xmlDoc *zak_form_form_get_xml (ZakFormForm *zakform, const gchar *version);
+
 
 G_END_DECLS
 
index c40a1be2ff69197a3762cbbfd6685943ec9841d7..29aa6ca962daa57af34ec860e554bb301351a8fa 100644 (file)
@@ -1815,3 +1815,59 @@ zak_form_element_xml_parsing (ZakFormElement *element, xmlNode *xmlnode)
                        ZAK_FORM_ELEMENT_GET_CLASS (element)->xml_parsing (element, xmlnode);
                }
 }
+
+xmlNode
+*zak_form_element_get_xml (ZakFormElement *element, const gchar *version)
+{
+       xmlNode *xroot;
+       xmlNode *xnode;
+
+       xroot = xmlNewNode (NULL, (xmlChar *)"element");
+
+       xnode = xmlNewNode (NULL, (xmlChar *)"name");
+       xmlNodeSetContent (xnode, (xmlChar *)zak_form_element_get_name (element));
+       xmlAddChild (xroot, xnode);
+
+       xnode = xmlNewNode (NULL, (xmlChar *)"long-name");
+       xmlNodeSetContent (xnode, (xmlChar *)zak_form_element_get_long_name (element));
+       xmlAddChild (xroot, xnode);
+
+       xnode = xmlNewNode (NULL, (xmlChar *)"is-key");
+       xmlNodeSetContent (xnode, zak_form_element_get_is_key (element) ? (xmlChar *)"TRUE" : (xmlChar *)"FALSE");
+       xmlAddChild (xroot, xnode);
+
+       xnode = xmlNewNode (NULL, (xmlChar *)"type");
+       xmlNodeSetContent (xnode, (xmlChar *)zak_form_element_get_provider_type (element));
+       xmlAddChild (xroot, xnode);
+
+       xnode = xmlNewNode (NULL, (xmlChar *)"default-value");
+       xmlNodeSetContent (xnode, (xmlChar *)zak_form_element_get_default_value (element));
+       xmlAddChild (xroot, xnode);
+
+       xnode = xmlNewNode (NULL, (xmlChar *)"format");
+       xmlNodeSetContent (xnode, (xmlChar *)zak_form_element_get_format (element));
+       xmlAddChild (xroot, xnode);
+
+       xnode = xmlNewNode (NULL, (xmlChar *)"visible");
+       xmlNodeSetContent (xnode, zak_form_element_get_visible (element) ? (xmlChar *)"TRUE" : (xmlChar *)"FALSE");
+       xmlAddChild (xroot, xnode);
+
+       xnode = xmlNewNode (NULL, (xmlChar *)"editable");
+       xmlNodeSetContent (xnode, zak_form_element_get_editable (element) ? (xmlChar *)"TRUE" : (xmlChar *)"FALSE");
+       xmlAddChild (xroot, xnode);
+
+       xnode = xmlNewNode (NULL, (xmlChar *)"to-load");
+       xmlNodeSetContent (xnode, zak_form_element_get_to_load (element) ? (xmlChar *)"TRUE" : (xmlChar *)"FALSE");
+       xmlAddChild (xroot, xnode);
+
+       xnode = xmlNewNode (NULL, (xmlChar *)"to-save");
+       xmlNodeSetContent (xnode, zak_form_element_get_to_save (element) ? (xmlChar *)"TRUE" : (xmlChar *)"FALSE");
+       xmlAddChild (xroot, xnode);
+
+       if (ZAK_FORM_ELEMENT_GET_CLASS (element)->get_xml != NULL)
+               {
+                       ZAK_FORM_ELEMENT_GET_CLASS (element)->get_xml (element, xroot, version);
+               }
+
+       return xroot;
+}
index 41057bb36db74d75a0a661b2a5de78b0f7df38fa..6d31e7b053d96af1e5bc9f10af051b08103ba8be 100644 (file)
@@ -57,6 +57,8 @@ struct _ZakFormElementClass
 
                gboolean (*is_valid) (ZakFormElement *element);
 
+               void (*get_xml) (ZakFormElement *element, xmlNode *xroot, const gchar *version);
+
                guint before_validating_signal_id;
                guint after_validating_signal_id;
        };
@@ -140,6 +142,8 @@ GPtrArray *zak_form_element_get_validators (ZakFormElement *element);
 ZakFormElementValidator *zak_form_element_get_validator_by_id (ZakFormElement *element, const gchar *id);
 GPtrArray *zak_form_element_get_validators_by_type (ZakFormElement *element, GType type);
 
+xmlNode *zak_form_element_get_xml (ZakFormElement *element, const gchar *version);
+
 
 G_END_DECLS