From 06f39d933ed55c0af479d669dc139dc1e479fd60 Mon Sep 17 00:00:00 2001 From: Andrea Zagli Date: Tue, 13 Dec 2016 13:29:28 +0100 Subject: [PATCH] Migrazione a libzakform di ufficio. --- data/organigramma/form/ufficio.form | 81 ++++++-------- data/organigramma/gui/organigramma.gui | 10 +- src/ufficio.c | 147 +++++++++++++++++++------ 3 files changed, 155 insertions(+), 83 deletions(-) diff --git a/data/organigramma/form/ufficio.form b/data/organigramma/form/ufficio.form index 1dfa967..8e3382b 100644 --- a/data/organigramma/form/ufficio.form +++ b/data/organigramma/form/ufficio.form @@ -1,47 +1,36 @@ - - - uffici
- - - - t - t - - - - - - - SELECT a.nome - FROM uffici AS a - WHERE a.id = ##key0::gint - - - - - - - - - - SELECT a.nome - FROM strutture AS a - WHERE a.id = ##key0::gint - - - - - - - - - t - - - - - - - -
+ + + id + integer + + TRUE + label23 + + + id_uffici + integer + + zakgtkdecoder9 + + + id_strutture + integer + + zakgtkdecoder10 + 0 + + + nome + string + + entry5 + + + + descrizione + string + + textview2 + + diff --git a/data/organigramma/gui/organigramma.gui b/data/organigramma/gui/organigramma.gui index 09dbf7c..d9e9d50 100644 --- a/data/organigramma/gui/organigramma.gui +++ b/data/organigramma/gui/organigramma.gui @@ -3840,24 +3840,24 @@ - + True False + True 1 - 3 + 2 - + True False - True 1 - 2 + 3 diff --git a/src/ufficio.c b/src/ufficio.c index e31ca96..dcc84dc 100644 --- a/src/ufficio.c +++ b/src/ufficio.c @@ -24,10 +24,13 @@ #include #include -#include -#include -#include +#include +#include +#include +#include +#include #include +#include #include "ufficio.h" #include "uffici.h" @@ -80,11 +83,9 @@ static void organigramma_ufficio_on_allegato_aggiornato (gpointer instance, gpoi static void organigramma_ufficio_on_ufficio_selezionato (gpointer instance, guint id, gpointer user_data); static void organigramma_ufficio_on_struttura_selezionato (gpointer instance, guint id, gpointer user_data); +static gchar *organigramma_ufficio_on_ufficio_decode (gpointer instance, gchar *key, gpointer user_data); +static gchar *organigramma_ufficio_on_struttura_decode (gpointer instance, gchar *key, gpointer user_data); -static void organigramma_ufficio_on_ufficio_pulisci (GtkEntry *entry, - GtkEntryIconPosition icon_pos, - GdkEvent *event, - gpointer user_data); static void organigramma_ufficio_on_btn_ufficio_clicked (GtkButton *button, gpointer user_data); static void organigramma_ufficio_on_btn_struttura_clicked (GtkButton *button, @@ -252,7 +253,8 @@ struct _OrganigrammaUfficioPrivate { OrganigrammaCommons *commons; - GtkForm *form; + ZakFormGtkForm *form; + ZakFormGdaexProvider *form_provider; GtkWidget *w; @@ -343,13 +345,15 @@ OrganigrammaUfficio 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, "ufficio.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, "ufficio.form", NULL)); + + priv->form_provider = zak_form_gdaex_provider_new (priv->commons->gdaex, "uffici"); priv->w = GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "w_ufficio")); - priv->objects = gtk_form_get_objects_by_name (priv->form, + priv->objects = zak_form_gtk_form_get_gobjects_by_name (priv->form, "label23", "lstore_ufficio_nodi", "lstore_ufficio_stanze", @@ -363,7 +367,7 @@ OrganigrammaUfficio priv->sallegato = solipa_allegato_new (commons->solipa); if (priv->sallegato != NULL) { - solipa_allegato_add_to_gtkform (priv->sallegato, priv->form, + solipa_allegato_add_to_zakformgtk (priv->sallegato, priv->form, "immagine_percorso", "immagine_file_data", "immagine_file_dimensione"); solipa_allegato_con_salva_in_db (priv->sallegato, FALSE); gtk_container_add (GTK_CONTAINER (gtk_builder_get_object (priv->commons->gtkbuilder, "alignment4")), @@ -381,10 +385,14 @@ OrganigrammaUfficio g_signal_connect (priv->w, "delete-event", G_CALLBACK (organigramma_ufficio_on_w_ufficio_delete_event), (gpointer)a); - g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "gtkformdecoder16"), + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "zakgtkdecoder9"), "btn-browse-clicked", G_CALLBACK (organigramma_ufficio_on_btn_ufficio_clicked), (gpointer)a); - g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "gtkformdecoder15"), + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "zakgtkdecoder10"), "btn-browse-clicked", G_CALLBACK (organigramma_ufficio_on_btn_struttura_clicked), (gpointer)a); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "zakgtkdecoder9"), + "decode", G_CALLBACK (organigramma_ufficio_on_ufficio_decode), (gpointer)a); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "zakgtkdecoder10"), + "decode", G_CALLBACK (organigramma_ufficio_on_struttura_decode), (gpointer)a); g_signal_connect (G_OBJECT (gtk_builder_get_object (priv->commons->gtkbuilder, "button28")), "clicked", G_CALLBACK (organigramma_ufficio_on_btn_nodo_nuovo_clicked), (gpointer)a); @@ -451,17 +459,22 @@ OrganigrammaUfficio g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button151"), "clicked", G_CALLBACK (organigramma_ufficio_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) { gtk_label_set_text (GTK_LABEL (priv->objects[LBL_ID]), ""); - gtk_form_set_as_origin (priv->form); + zak_form_form_set_as_original (ZAK_FORM_FORM (priv->form)); - gtk_form_set_sensitive_by_name (priv->form, FALSE, "hbox2", "hbox19", "hbox4", "hbox9", "hbox21", "hbox22", "hbox24", NULL); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (commons->gtkbuilder, "hbox2")), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (commons->gtkbuilder, "hbox19")), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (commons->gtkbuilder, "hbox4")), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (commons->gtkbuilder, "hbox9")), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (commons->gtkbuilder, "hbox21")), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (commons->gtkbuilder, "hbox22")), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (commons->gtkbuilder, "hbox24")), FALSE); } else { @@ -530,7 +543,7 @@ organigramma_ufficio_carica (OrganigrammaUfficio *ufficio) { OrganigrammaUfficioPrivate *priv = ORGANIGRAMMA_UFFICIO_GET_PRIVATE (ufficio); - if (gtk_form_fill_from_table (priv->form)) + if (zak_form_form_load (ZAK_FORM_FORM (priv->form), ZAK_FORM_IPROVIDER (priv->form_provider))) { organigramma_ufficio_carica_nodi (ufficio); organigramma_ufficio_carica_stanze (ufficio); @@ -545,36 +558,55 @@ organigramma_ufficio_carica (OrganigrammaUfficio *ufficio) static void organigramma_ufficio_salva (OrganigrammaUfficio *ufficio, gboolean chiudi) { + gboolean success; + gchar *sql; OrganigrammaUfficioClass *klass = ORGANIGRAMMA_UFFICIO_GET_CLASS (ufficio); OrganigrammaUfficioPrivate *priv = ORGANIGRAMMA_UFFICIO_GET_PRIVATE (ufficio); - if (!gtk_form_check (priv->form, (priv->id != 0), 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, + "uffici", + "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 (ufficio, klass->aggiornato_signal_id, 0); - gtk_form_set_as_origin (priv->form); + zak_form_form_set_as_original (ZAK_FORM_FORM (priv->form)); if (priv->id == 0) { priv->id = strtol (gtk_label_get_text (GTK_LABEL (priv->objects[LBL_ID])), NULL, 10); - gtk_form_set_sensitive_by_name (priv->form, TRUE, "hbox2", "hbox19", "hbox4", "hbox9", "hbox21", "hbox24", NULL); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "hbox2")), TRUE); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "hbox19")), TRUE); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "hbox4")), TRUE); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "hbox9")), TRUE); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "hbox21")), TRUE); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "hbox22")), TRUE); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "hbox24")), TRUE); } /* salvo l'atto_allegato nel db */ @@ -862,8 +894,8 @@ organigramma_ufficio_carica_persone (OrganigrammaUfficio *ufficio) PERSONE_COL_ID, gdaex_data_model_get_field_value_integer_at (dm, row, "id"), PERSONE_COL_RUOLO, gdaex_data_model_get_field_value_stringify_at (dm, row, "ruolo"), PERSONE_COL_NOME, gdaex_data_model_get_field_value_stringify_at (dm, row, "cognome_nome"), - PERSONE_COL_DA_DATA, gtk_form_field_datetime_get_str_from_tm (gdaex_data_model_get_field_value_tm_at (dm, row, "da_data"), "%d/%m/%Y"), - PERSONE_COL_A_DATA, gtk_form_field_datetime_get_str_from_tm (gdaex_data_model_get_field_value_tm_at (dm, row, "a_data"), "%d/%m/%Y"), + PERSONE_COL_DA_DATA, zak_utils_gdatetime_format (gdaex_data_model_get_field_value_gdatetime_at (dm, row, "da_data"), "%d/%m/%Y"), + PERSONE_COL_A_DATA, zak_utils_gdatetime_format (gdaex_data_model_get_field_value_gdatetime_at (dm, row, "a_data"), "%d/%m/%Y"), -1); } @@ -1197,7 +1229,7 @@ organigramma_ufficio_conferma_chiusura (OrganigrammaUfficio *ufficio) OrganigrammaUfficioPrivate *priv = ORGANIGRAMMA_UFFICIO_GET_PRIVATE (ufficio); 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, @@ -1218,7 +1250,7 @@ organigramma_ufficio_on_ufficio_selezionato (gpointer instance, guint id, gpoint OrganigrammaUfficio *f = (OrganigrammaUfficio *)user_data; OrganigrammaUfficioPrivate *priv = ORGANIGRAMMA_UFFICIO_GET_PRIVATE (f); - gtk_form_widget_set_value_stringify (gtk_form_get_form_widget_from_name (priv->form, "gtkformdecoder16"), + zak_gtk_decoder_set_key (ZAK_GTK_DECODER (gtk_builder_get_object (priv->commons->gtkbuilder, "zakgtkdecoder9")), g_strdup_printf ("%d", id)); } @@ -1228,10 +1260,62 @@ organigramma_ufficio_on_struttura_selezionato (gpointer instance, guint id, gpoi OrganigrammaUfficio *f = (OrganigrammaUfficio *)user_data; OrganigrammaUfficioPrivate *priv = ORGANIGRAMMA_UFFICIO_GET_PRIVATE (f); - gtk_form_widget_set_value_stringify (gtk_form_get_form_widget_from_name (priv->form, "gtkformdecoder15"), + zak_gtk_decoder_set_key (ZAK_GTK_DECODER (gtk_builder_get_object (priv->commons->gtkbuilder, "zakgtkdecoder10")), g_strdup_printf ("%d", id)); } +static gchar +*organigramma_ufficio_on_ufficio_decode (gpointer instance, gchar *key, gpointer user_data) +{ + GString *ret; + gchar *sql; + GdaDataModel *dm; + + OrganigrammaUfficio *f = (OrganigrammaUfficio *)user_data; + OrganigrammaUfficioPrivate *priv = ORGANIGRAMMA_UFFICIO_GET_PRIVATE (f); + + ret = g_string_new (""); + + sql = g_strdup_printf ("SELECT nome" + " FROM uffici" + " 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 gchar +*organigramma_ufficio_on_struttura_decode (gpointer instance, gchar *key, gpointer user_data) +{ + GString *ret; + gchar *sql; + GdaDataModel *dm; + + OrganigrammaUfficio *f = (OrganigrammaUfficio *)user_data; + OrganigrammaUfficioPrivate *priv = ORGANIGRAMMA_UFFICIO_GET_PRIVATE (f); + + ret = g_string_new (""); + + sql = g_strdup_printf ("SELECT nome" + " FROM strutture" + " 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 void organigramma_ufficio_on_nodo_aggiornato (gpointer instance, gpointer user_data) { @@ -1813,7 +1897,6 @@ organigramma_ufficio_on_btn_allegato_apri_clicked (GtkButton *button, gpointer user_data) { GtkTreeIter iter; - const gchar *percorso; guint id; gchar *sql; -- 2.49.0