From: Andrea Zagli <azagli@libero.it>
Date: Tue, 13 Dec 2016 09:05:14 +0000 (+0100)
Subject: Migrazione a libzakform di persona recapito.
X-Git-Url: https://saetta.ns0.it/gitweb?a=commitdiff_plain;h=82beb04bb8f9f450683fa71f67319ae116df668e;p=solipa%2Forganigramma

Migrazione a libzakform di persona recapito.
---

diff --git a/configure.ac b/configure.ac
index 2176fc0..0f1fb0f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -51,6 +51,7 @@ PKG_CHECK_MODULES(ORGANIGRAMMA, [gio-2.0 >= 2.36
                                  libzakform
                                  libzakformgtk
                                  libzakformgdaex
+                                 libzakformgtkdecoder
                                  libzakconfi >= 0.10.0
                                  libzakauthe >= 0.5.99
                                  libzakautho >= 0.0.5
diff --git a/data/organigramma/form/persona_recapito.form b/data/organigramma/form/persona_recapito.form
index 993b2fe..a78fee2 100644
--- a/data/organigramma/form/persona_recapito.form
+++ b/data/organigramma/form/persona_recapito.form
@@ -1,46 +1,40 @@
 <?xml version="1.0"?>
-<gtkform>
-
-	<table>persona_recapiti</table>
-
-	<widget type="label" name="label103">
-		<field type="integer" name="id">
-			<is-key>t</is-key>
-			<auto-increment>t</auto-increment>
-		</field>
-	</widget>
-
-	<widget type="label" name="label107">
-		<field type="integer" name="id_persone">
-		</field>
-	</widget>
-
-	<widget type="decoder" name="gtkformdecoder10" label="label102">
-		<decoder>
-			<sql>
-				SELECT a.nome
-				FROM tipi_recapito AS a
-				WHERE a.id = ##key0::gint
-			</sql>
-		</decoder>
-		<field type="integer" name="id_tipi_recapito">
-			<obligatory>t</obligatory>
-		</field>
-	</widget>
-
-	<widget type="entry" name="entry25" label="label105">
-		<field type="text" name="recapito">
-			<obligatory>t</obligatory>
-		</field>
-	</widget>
-
-	<widget type="textview" name="textview11" label="label101">
-		<field type="text" name="note" />
-	</widget>
-
-	<widget type="checkbox" name="checkbutton10" label="label106">
-		<field type="boolean" name="privato">
-		</field>
-	</widget>
-
-</gtkform>
+<zakform>
+  <element type="zak_form_gtk_form_element_label">
+    <name>id</name>
+    <type>integer</type>
+    <is-key>TRUE</is-key>
+    <widget>label103</widget>
+  </element>
+  <element type="zak_form_gtk_form_element_label">
+    <name>id_persone</name>
+    <type>integer</type>
+    <widget>label107</widget>
+  </element>
+  <element type="zak_form_gtk_form_element_decoder">
+    <name>id_tipi_recapito</name>
+    <type>integer</type>
+    <label>label102</label>
+    <widget>zakgtkdecoder1</widget>
+    <validator type="zak_form_element_validator_notempty">0</validator>
+  </element>
+  <element type="zak_form_gtk_form_element_entry">
+    <name>recapito</name>
+    <type>string</type>
+    <label>label105</label>
+    <widget>entry25</widget>
+    <validator type="zak_form_element_validator_notempty"/>
+  </element>
+  <element type="zak_form_gtk_form_element_textview">
+    <name>note</name>
+    <type>string</type>
+    <label>label101</label>
+    <widget>textview11</widget>
+  </element>
+  <element type="zak_form_gtk_form_element_check">
+    <name>privato</name>
+    <type>boolean</type>
+    <label>label106</label>
+    <widget>checkbutton10</widget>
+  </element>
+</zakform>
diff --git a/data/organigramma/gui/organigramma.gui b/data/organigramma/gui/organigramma.gui
index 8b60a18..165cc60 100644
--- a/data/organigramma/gui/organigramma.gui
+++ b/data/organigramma/gui/organigramma.gui
@@ -3,6 +3,7 @@
 <interface>
   <requires lib="gtk+" version="3.20"/>
   <requires lib="gtkformui" version="0.0"/>
+  <requires lib="zakgtkdecoder" version="0.0"/>
   <object class="GtkAdjustment" id="adj_dmon">
     <property name="upper">31</property>
     <property name="step_increment">1</property>
@@ -641,7 +642,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -2007,7 +2008,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -2676,7 +2677,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -3923,7 +3924,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -4090,7 +4091,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -4251,7 +4252,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -4490,7 +4491,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -4706,7 +4707,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -5046,7 +5047,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -5261,7 +5262,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -5487,7 +5488,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -5627,7 +5628,7 @@
               </packing>
             </child>
             <child>
-              <object class="GtkFormDecoder" id="gtkformdecoder10">
+              <object class="ZakGtkDecoder" id="zakgtkdecoder1">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
               </object>
@@ -5700,7 +5701,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -5993,7 +5994,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -6219,7 +6220,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -6351,7 +6352,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -6490,7 +6491,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -6622,7 +6623,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -6754,7 +6755,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -6893,7 +6894,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -7025,7 +7026,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -7164,7 +7165,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -7440,7 +7441,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -7634,7 +7635,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -7864,7 +7865,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -7996,7 +7997,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -8128,7 +8129,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -8260,7 +8261,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -8392,7 +8393,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -8524,7 +8525,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -8759,7 +8760,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -8898,7 +8899,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -9037,7 +9038,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -9209,7 +9210,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -9341,7 +9342,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -9507,7 +9508,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -9783,7 +9784,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -9977,7 +9978,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -10138,7 +10139,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -10351,7 +10352,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
@@ -10571,7 +10572,7 @@
         </child>
       </object>
     </child>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
   </object>
diff --git a/src/personarecapito.c b/src/personarecapito.c
index 5ecb8be..b6f37c2 100644
--- a/src/personarecapito.c
+++ b/src/personarecapito.c
@@ -24,8 +24,11 @@
 #include <glib/gprintf.h>
 
 #include <libzakautho/autoz.h>
-#include <libgtkform/form.h>
-#include <libgtkformui/gtkformdecoder.h>
+#include <libzakgtkdecoder/libzakgtkdecoder.h>
+#include <libzakform/libzakform.h>
+#include <libzakformgtk/libzakformgtk.h>
+#include <libzakformgdaex/libzakformgdaex.h>
+#include <libzakformgtkdecoder/libzakformgtkdecoder.h>
 #include <libsolipa/utils.h>
 
 #include "personarecapito.h"
@@ -38,6 +41,7 @@ static void organigramma_persona_recapito_carica (OrganigrammaPersonaRecapito *o
 static void organigramma_persona_recapito_salva (OrganigrammaPersonaRecapito *organigramma_persona_recapito, gboolean chiudi);
 
 static void organigramma_persona_recapito_on_tipo_recapito_selezionato (gpointer instance, guint id, gpointer user_data);
+static gchar *organigramma_persona_recapito_on_tipo_recapito_decode (gpointer instance, gchar *key, gpointer user_data);
 
 static gboolean organigramma_persona_recapito_conferma_chiusura (OrganigrammaPersonaRecapito *organigramma_persona_recapito);
 
@@ -78,7 +82,8 @@ struct _OrganigrammaPersonaRecapitoPrivate
 	{
 		OrganigrammaCommons *commons;
 
-		GtkForm *form;
+		ZakFormGtkForm *form;
+		ZakFormGdaexProvider *form_provider;
 
 		GtkWidget *w;
 
@@ -152,13 +157,15 @@ OrganigrammaPersonaRecapito
 			return NULL;
 		}
 
-	priv->form = gtk_form_new ();
-	g_object_set (G_OBJECT (priv->form), "gdaex", priv->commons->gdaex, NULL);
-	gtk_form_load_from_file (priv->form, g_build_filename (priv->commons->formdir, "persona_recapito.form", NULL), priv->commons->gtkbuilder);
+	priv->form = zak_form_gtk_form_new ();
+	zak_form_gtk_form_set_gtkbuilder (priv->form, priv->commons->gtkbuilder);
+	zak_form_form_load_from_file (ZAK_FORM_FORM (priv->form), g_build_filename (priv->commons->formdir, "persona_recapito.form", NULL));
+
+	priv->form_provider = zak_form_gdaex_provider_new (priv->commons->gdaex, "persona_recapiti");
 
 	priv->w = GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "w_persona_recapito"));
 
-	priv->objects = gtk_form_get_objects_by_name (priv->form,
+	priv->objects = zak_form_gtk_form_get_gobjects_by_name (priv->form,
 	                                              "label103",
 	                                              "label107",
 	                                              NULL);
@@ -166,8 +173,10 @@ OrganigrammaPersonaRecapito
 	g_signal_connect (priv->w,
 	                  "delete-event", G_CALLBACK (organigramma_persona_recapito_on_w_organigramma_persona_recapito_delete_event), (gpointer)a);
 
-	g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "gtkformdecoder10"),
+	g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "zakgtkdecoder1"),
 	                  "btn-browse-clicked", G_CALLBACK (organigramma_persona_recapito_on_btn_tipo_recapito_clicked), (gpointer)a);
+	g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "zakgtkdecoder1"),
+	                  "decode", G_CALLBACK (organigramma_persona_recapito_on_tipo_recapito_decode), (gpointer)a);
 
 	g_signal_connect (G_OBJECT (gtk_builder_get_object (priv->commons->gtkbuilder, "button87")),
 	                  "clicked", G_CALLBACK (organigramma_persona_recapito_on_btn_annulla_clicked), (gpointer)a);
@@ -176,7 +185,7 @@ OrganigrammaPersonaRecapito
 	g_signal_connect (G_OBJECT (gtk_builder_get_object (priv->commons->gtkbuilder, "button163")),
 	                  "clicked", G_CALLBACK (organigramma_persona_recapito_on_btn_salvaechiudi_clicked), (gpointer)a);
 
-	gtk_form_clear (priv->form);
+	zak_form_form_clear (ZAK_FORM_FORM (priv->form));
 
 	priv->id = id;
 	if (priv->id == 0)
@@ -184,7 +193,7 @@ OrganigrammaPersonaRecapito
 			gtk_label_set_text (GTK_LABEL (priv->objects[LBL_ID]), "");
 			gtk_label_set_text (GTK_LABEL (priv->objects[LBL_ID_PERSONE]), g_strdup_printf ("%d", id_persone));
 
-			gtk_form_set_as_origin (priv->form);
+			zak_form_form_set_as_original (ZAK_FORM_FORM (priv->form));
 		}
 	else
 		{
@@ -220,12 +229,9 @@ GtkWidget
 static void
 organigramma_persona_recapito_carica (OrganigrammaPersonaRecapito *organigramma_persona_recapito)
 {
-	gchar *sql;
-	GdaDataModel *dm;
-
 	OrganigrammaPersonaRecapitoPrivate *priv = ORGANIGRAMMA_PERSONA_RECAPITO_GET_PRIVATE (organigramma_persona_recapito);
 
-	if (gtk_form_fill_from_table (priv->form))
+	if (zak_form_form_load (ZAK_FORM_FORM (priv->form), ZAK_FORM_IPROVIDER (priv->form_provider)))
 		{
 		}
 }
@@ -233,27 +239,38 @@ organigramma_persona_recapito_carica (OrganigrammaPersonaRecapito *organigramma_
 static void
 organigramma_persona_recapito_salva (OrganigrammaPersonaRecapito *organigramma_persona_recapito, gboolean chiudi)
 {
-	gchar *sql;
+	gboolean success;
 
 	OrganigrammaPersonaRecapitoClass *klass = ORGANIGRAMMA_PERSONA_RECAPITO_GET_CLASS (organigramma_persona_recapito);
 
 	OrganigrammaPersonaRecapitoPrivate *priv = ORGANIGRAMMA_PERSONA_RECAPITO_GET_PRIVATE (organigramma_persona_recapito);
 
-	if (!gtk_form_check (priv->form, FALSE, NULL, TRUE, priv->w, TRUE))
+	if (!zak_form_gtk_form_is_valid (priv->form, priv->w))
 		{
 			return;
 		}
 
+	success = FALSE;
+
 	if (priv->id == 0)
 		{
-			sql = gtk_form_get_sql (priv->form, GTK_FORM_SQL_INSERT);
+			guint new_id;
+
+			new_id = gdaex_get_new_id (priv->commons->gdaex,
+									   "persona_recapiti",
+									   "id",
+									   NULL);
+
+			gtk_label_set_text (GTK_LABEL (priv->objects[LBL_ID]), g_strdup_printf ("%d", new_id));
+
+			success = zak_form_form_insert (ZAK_FORM_FORM (priv->form), ZAK_FORM_IPROVIDER (priv->form_provider));
 		}
 	else
 		{
-			sql = gtk_form_get_sql (priv->form, GTK_FORM_SQL_UPDATE);
+			success = zak_form_form_update (ZAK_FORM_FORM (priv->form), ZAK_FORM_IPROVIDER (priv->form_provider));
 		}
 
-	if (gdaex_execute (priv->commons->gdaex, sql) == 1)
+	if (success)
 		{
 			g_signal_emit (organigramma_persona_recapito, klass->aggiornato_signal_id, 0);
 
@@ -262,7 +279,7 @@ organigramma_persona_recapito_salva (OrganigrammaPersonaRecapito *organigramma_p
 					priv->id = strtol (gtk_label_get_text (GTK_LABEL (priv->objects[LBL_ID])), NULL, 10);
 				}
 
-			gtk_form_set_as_origin (priv->form);
+			zak_form_form_set_as_original (ZAK_FORM_FORM (priv->form));
 
 			solipa_message_dialog (priv->w,
 			                       GTK_MESSAGE_INFO,
@@ -321,7 +338,7 @@ organigramma_persona_recapito_conferma_chiusura (OrganigrammaPersonaRecapito *or
 
 	ret = TRUE;
 
-	if (gtk_form_is_changed (priv->form))
+	if (zak_form_form_is_changed (ZAK_FORM_FORM (priv->form)))
 		{
 			if (solipa_message_dialog (priv->w,
 			                           GTK_MESSAGE_QUESTION,
@@ -342,10 +359,36 @@ organigramma_persona_recapito_on_tipo_recapito_selezionato (gpointer instance, g
 	OrganigrammaPersonaRecapito *f = (OrganigrammaPersonaRecapito *)user_data;
 	OrganigrammaPersonaRecapitoPrivate *priv = ORGANIGRAMMA_PERSONA_RECAPITO_GET_PRIVATE (f);
 
-	gtk_form_widget_set_value_stringify (gtk_form_get_form_widget_from_name (priv->form, "gtkformdecoder10"),
+	zak_gtk_decoder_set_key (ZAK_GTK_DECODER (gtk_builder_get_object (priv->commons->gtkbuilder, "zakgtkdecoder1")),
 	                                     g_strdup_printf ("%d", id));
 }
 
+static gchar
+*organigramma_persona_recapito_on_tipo_recapito_decode (gpointer instance, gchar *key, gpointer user_data)
+{
+	GString *ret;
+	gchar *sql;
+	GdaDataModel *dm;
+
+	OrganigrammaPersonaRecapito *f = (OrganigrammaPersonaRecapito *)user_data;
+	OrganigrammaPersonaRecapitoPrivate *priv = ORGANIGRAMMA_PERSONA_RECAPITO_GET_PRIVATE (f);
+
+	ret = g_string_new ("");
+
+	sql = g_strdup_printf ("SELECT nome"
+						   " FROM tipi_recapito"
+						   " WHERE id = %d",
+						   strtol (key, NULL, 10));
+	dm = gdaex_query (priv->commons->gdaex, sql);
+	g_free (sql);
+	if (!gdaex_data_model_is_empty (dm))
+		{
+			g_string_append (ret, gdaex_data_model_get_value_stringify_at (dm, 0, 0));
+		}
+
+	return ret->str;
+}
+
 static gboolean
 organigramma_persona_recapito_on_w_organigramma_persona_recapito_delete_event (GtkWidget *widget,
                                GdkEvent *event,