From: Andrea Zagli Date: Sat, 16 Feb 2013 14:47:04 +0000 (+0100) Subject: Gestione tabella tipi_atto. X-Git-Url: https://saetta.ns0.it/gitweb?a=commitdiff_plain;h=bf5ecc1fc86c72db20f43f7f82764ddcf98a2709;p=albonline%2Fbe Gestione tabella tipi_atto. --- diff --git a/.anjuta_sym_db.db b/.anjuta_sym_db.db index 9f18dc5..de7fcad 100644 Binary files a/.anjuta_sym_db.db and b/.anjuta_sym_db.db differ diff --git a/data/messi/form/Makefile.am b/data/messi/form/Makefile.am index 8d770f4..41a74cb 100644 --- a/data/messi/form/Makefile.am +++ b/data/messi/form/Makefile.am @@ -1,5 +1,6 @@ formdir = $(datadir)/$(PACKAGE)/form -form_DATA = +form_DATA = \ + tipoatto.form EXTRA_DIST = $(form_DATA) diff --git a/data/messi/form/tipoatto.form b/data/messi/form/tipoatto.form new file mode 100644 index 0000000..1961f25 --- /dev/null +++ b/data/messi/form/tipoatto.form @@ -0,0 +1,17 @@ + + + + tipi_atto
+ + + + t + t + + + + + + + +
diff --git a/data/messi/gui/messi.gui b/data/messi/gui/messi.gui index 5d79d90..43e7a9c 100644 --- a/data/messi/gui/messi.gui +++ b/data/messi/gui/messi.gui @@ -39,6 +39,14 @@ + + + + + + + + False @@ -51,904 +59,57 @@ True False - 9 + 8 2 5 5 - - True - False - 0 - ID - - - GTK_FILL - GTK_FILL - - - - - True - False - 0 - Protocollo - - - 1 - 2 - GTK_FILL - GTK_FILL - - - - - True - True - 20 - • - False - False - True - True - - - 1 - 2 - 1 - 2 - GTK_FILL - - - - - True - False - 0 - lbl_id - - - 1 - 2 - GTK_FILL - - - - - True - False - 0 - Descrizione - - - 2 - 3 - GTK_FILL - GTK_FILL - - - - - True - True - 300 - • - False - False - True - True - - - 1 - 2 - 2 - 3 - GTK_FILL - - - - - True - False - 0 - Mittente - - - 3 - 4 - GTK_FILL - GTK_FILL - + - - True - False - - - True - True - • - False - False - True - True - - - True - True - 0 - - - - - ... - True - True - True - - - False - True - 1 - - - - - False - lbl_id_mittenti - - - False - True - 2 - - - - - 1 - 2 - 3 - 4 - GTK_FILL - + - - True - False - 0 - Data ricezione - - - 4 - 5 - GTK_FILL - GTK_FILL - + - - True - True - 10 - • - False - False - True - True - - - 1 - 2 - 4 - 5 - + - - True - False - 0 - Data pubblicazione da - - - 5 - 6 - GTK_FILL - GTK_FILL - + - - True - True - 10 - • - False - False - True - True - - - 1 - 2 - 5 - 6 - + - - True - True - 10 - • - False - False - True - True - - - 1 - 2 - 6 - 7 - + - - True - False - 0 - Data pubblicazione a - - - 6 - 7 - GTK_FILL - GTK_FILL - + - - True - False - 0 - 0 - Note - - - 7 - 8 - + - - True - True - automatic - automatic - - - True - False - queue - - - True - True - - - - - - - 1 - 2 - 7 - 8 - + - - True - False - 0 - Messo - - - 8 - 9 - + - - True - False - - - True - False - 0 - lbl_messo_nome - - - True - True - 0 - - - - - False - lbl_id_messi - - - False - True - 1 - - - - - 1 - 2 - 8 - 9 - + - - - True - True - 0 - - - - - True - False - 5 - end - - _Allegati - True - True - True - True - - - False - False - 0 - + - - gtk-cancel - True - True - True - True - - - False - False - 1 - + - - - gtk-save - True - True - True - True - - - False - False - 2 - - - - - False - True - 1 - - - - - - - False - Allegati - - - True - False - 5 - 5 - - - True - False - <b>Allegati</b> - True - - - False - True - 0 - - - - - True - True - automatic - automatic - etched-in - - - True - True - - - - - True - True - 1 - - - - - True - False - 5 - end - - - gtk-new - True - True - True - True - - - False - False - 0 - - - - - gtk-edit - True - True - True - True - - - False - False - 1 - - - - - gtk-delete - True - True - True - True - - - False - False - 2 - - - - - gtk-find - True - True - True - True - - - False - False - 3 - - - - - gtk-cancel - True - True - True - True - - - False - False - 4 - - - - - _Seleziona - True - True - True - True - - - False - False - 5 - - - - - False - True - 2 - - - - - - - False - - - True - False - 5 - 5 - - - True - False - <b>Albo pretorio</b> - True - - - False - True - 0 - - - - - True - True - automatic - automatic - etched-in - - - True - True - - - - - True - True - 1 - - - - - True - False - 5 - end - - - gtk-new - True - True - True - True - - - False - False - 0 - - - - - gtk-edit - True - True - True - True - - - False - False - 1 - - - - - gtk-delete - True - True - True - True - - - False - False - 2 - - - - - gtk-find - True - True - True - True - - - False - False - 3 - - - - - False - True - 2 - - - - - - - False - Gestione messi notificatori - center - 600 - 450 - - - - True - False - - - True - False - - - True - False - _File - True - - - True - False - - - gtk-quit - True - False - True - True - - - - - - - - - - True - False - _Visualizza - True - - - True - False - - - True - False - _Albo pretorio - True - - - - - - - - - True - False - _Tabelle - True - - - True - False - - - True - False - _Mittenti - True - - - - - True - False - _Allegati - True - - - - - True - False - Ti_pi allegati - True - - - - - - - - - True - False - A_iuto - True - - - True - False - - - gtk-about - True - False - True - True - - - - - - - - - - False - True - 0 - - - - - True - False - - - - - - True - True - 1 - - - - - True - False - 2 - - - False - True - 2 - - - - - - - False - - - True - False - 5 - 5 - - - True - False - 2 - 2 - 5 - 5 - - - True - False - 0 - ID - - - GTK_FILL - GTK_FILL - - - - - True - False - 0 - Descrizione - - - 1 - 2 - GTK_FILL - GTK_FILL - - - - - True - True - 300 - • - False - False - True - True - - - 1 - 2 - 1 - 2 - GTK_FILL - - - - - True - False - 0 - lbl_id - - - 1 - 2 - GTK_FILL - + + + + + @@ -958,38 +119,19 @@ - + True False 5 end - - gtk-cancel - True - True - True - True - - - False - False - 0 - + - - gtk-save - True - True - True - True - - - False - False - 1 - + + + + @@ -1001,20 +143,19 @@ - + False - Mittenti - + True False 5 5 - + True False - <b>Mittenti</b> + <b>Albo pretorio</b> True @@ -1024,14 +165,14 @@ - + True True automatic automatic etched-in - + True True @@ -1044,13 +185,13 @@ - + True False 5 end - + gtk-new True True @@ -1064,7 +205,7 @@ - + gtk-edit True True @@ -1078,7 +219,7 @@ - + gtk-delete True True @@ -1092,7 +233,7 @@ - + gtk-find True True @@ -1105,34 +246,150 @@ 3 + + + False + True + 2 + + + + + + + False + Gestione messi notificatori + center + 600 + 450 + + + + True + False + + + True + False - - gtk-cancel + True - True - True - True + False + _File + True + + + True + False + + + gtk-quit + True + False + True + True + + + + + - - False - False - 4 - - - _Seleziona + True - True - True + False + _Visualizza True + + + True + False + + + True + False + _Albo pretorio + True + + + + - - False - False - 5 - + + + True + False + _Tabelle + True + + + True + False + + + True + False + Ti_pi atti + True + + + + + + + + + + True + False + A_iuto + True + + + True + False + + + gtk-about + True + False + True + True + + + + + + + + + + False + True + 0 + + + + + True + False + + + + + + True + True + 1 + + + + + True + False + 2 False @@ -1143,20 +400,25 @@ - + False - Mittenti + Tipi atto - Gestione messi notificatori + True + center-on-parent + 500 + 350 + True - + True - False - 5 + True + 6 5 - + True False - <b>Tipi allegato</b> + <b>Tipi atto</b> True @@ -1166,16 +428,44 @@ - + True True automatic automatic etched-in - + True True + lstore_tipi_atto + False + True + 1 + + + ID + + + 1 + + + 0 + + + + + + + Descrizione + + + + 1 + + + + @@ -1186,13 +476,13 @@ - + True False 5 end - + gtk-new True True @@ -1206,7 +496,7 @@ - + gtk-edit True True @@ -1220,7 +510,7 @@ - + gtk-delete True True @@ -1234,8 +524,8 @@ - - gtk-find + + gtk-cancel True True True @@ -1248,8 +538,8 @@ - - gtk-cancel + + gtk-ok True True True @@ -1261,20 +551,6 @@ 4 - - - _Seleziona - True - True - True - True - - - False - False - 5 - - False @@ -1285,16 +561,20 @@ - + False + Tipo atto - Gestione messi notificatori + True + center-on-parent + True - + True False 5 5 - + True False 2 @@ -1302,7 +582,7 @@ 5 5 - + True False 0 @@ -1314,7 +594,7 @@ - + True False 0 @@ -1328,34 +608,36 @@ - + True - True - 300 - • - False - False - True - True + False + 0 + lbl_id 1 2 - 1 - 2 GTK_FILL - + True - False - 0 - lbl_id + True + 150 + ● + True + True + False + False + True + True 1 2 + 1 + 2 GTK_FILL @@ -1367,13 +649,13 @@ - + True False 5 end - + gtk-cancel True True @@ -1387,10 +669,12 @@ - + gtk-save True True + True + True True True @@ -1400,6 +684,20 @@ 1 + + + Salva e _chiudi + True + True + True + True + + + False + False + 2 + + False diff --git a/docs/messi.sql b/docs/messi.sql index b38b95a..313f861 100644 --- a/docs/messi.sql +++ b/docs/messi.sql @@ -4,16 +4,16 @@ -- Dumped from database version 9.1.8 -- Dumped by pg_dump version 9.1.8 --- Started on 2013-02-16 15:15:33 CET +-- Started on 2013-02-16 15:46:30 CET SET statement_timeout = 0; -SET client_encoding = 'LATIN9'; +SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; -- --- TOC entry 162 (class 3079 OID 11649) +-- TOC entry 163 (class 3079 OID 11649) -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - -- @@ -21,8 +21,8 @@ CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- --- TOC entry 1863 (class 0 OID 0) --- Dependencies: 162 +-- TOC entry 1871 (class 0 OID 0) +-- Dependencies: 163 -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - -- @@ -45,8 +45,21 @@ CREATE TABLE atti ( -- --- TOC entry 1856 (class 2606 OID 18089) --- Dependencies: 161 161 1858 +-- TOC entry 162 (class 1259 OID 18097) +-- Dependencies: 1859 1860 6 +-- Name: tipi_atto; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE tipi_atto ( + id integer NOT NULL, + descrizione character varying(255) DEFAULT ''::character varying, + status character varying(1) DEFAULT ''::character varying +); + + +-- +-- TOC entry 1862 (class 2606 OID 18089) +-- Dependencies: 161 161 1866 -- Name: atti_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -54,7 +67,17 @@ ALTER TABLE ONLY atti ADD CONSTRAINT atti_pkey PRIMARY KEY (id); --- Completed on 2013-02-16 15:15:33 CET +-- +-- TOC entry 1864 (class 2606 OID 18103) +-- Dependencies: 162 162 1866 +-- Name: tipi_atto_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY tipi_atto + ADD CONSTRAINT tipi_atto_pkey PRIMARY KEY (id); + + +-- Completed on 2013-02-16 15:46:30 CET -- -- PostgreSQL database dump complete diff --git a/src/Makefile.am b/src/Makefile.am index c44443c..f501443 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -21,4 +21,8 @@ bin_PROGRAMS = messi messi_SOURCES = \ commons.c \ commons.h \ - main.c + main.c \ + tipiatto.c \ + tipiatto.h \ + tipoatto.c \ + tipoatto.h diff --git a/src/main.c b/src/main.c index 2e8e243..fd8b17e 100644 --- a/src/main.c +++ b/src/main.c @@ -34,6 +34,7 @@ #include #include "commons.h" +#include "tipiatto.h" static Commons *commons; @@ -103,18 +104,18 @@ main_set_vbx_body_child (GtkWidget *wchild, GObject *ochild) gtk_widget_grab_focus (wchild); } -/*G_MODULE_EXPORT void -on_mnu_view_intestatari_activate (GtkMenuItem *menuitem, +G_MODULE_EXPORT void +on_mnu_tabelle_tipi_atto_activate (GtkMenuItem *menuitem, gpointer user_data) { - GtkWidget *vbx_intestatari; + GtkWidget *vbx; - Intestatari *i = intestatari_new (gtkbuilder, gdaex, FALSE, 0); + TipiAtto *m = tipi_atto_new (commons, FALSE); - vbx_intestatari = intestatari_get_widget (i); + vbx = tipi_atto_get_widget (m); - main_set_vbx_body_child (vbx_intestatari); -}*/ + main_set_vbx_body_child (vbx, G_OBJECT (m)); +} G_MODULE_EXPORT void on_mnu_help_about_activate (GtkMenuItem *menuitem, diff --git a/src/tipiatto.c b/src/tipiatto.c new file mode 100644 index 0000000..1a885bd --- /dev/null +++ b/src/tipiatto.c @@ -0,0 +1,451 @@ +/* + * Copyright (C) 2013 Andrea Zagli + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include + +#include +#include + +#include "tipiatto.h" +#include "tipoatto.h" + +static void tipi_atto_class_init (TipiAttoClass *klass); +static void tipi_atto_init (TipiAtto *tipi_atto); + +static void tipi_atto_carica (TipiAtto *tipi_atto); +static void tipi_atto_modifica (TipiAtto *tipi_atto); + +static void tipi_atto_selezionato (TipiAtto *tipi_atto); +static void tipi_atto_on_tipo_atto_aggiornato (gpointer instance, gpointer user_data); + +static void tipi_atto_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static void tipi_atto_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec); + +static gboolean tipi_atto_on_key_release_event (GtkWidget *widget, + GdkEventKey *event, + gpointer user_data); + +static void tipi_atto_on_btn_nuovo_clicked (GtkButton *button, + gpointer user_data); +static void tipi_atto_on_btn_modifica_clicked (GtkButton *button, + gpointer user_data); +static void tipi_atto_on_btn_elimina_clicked (GtkButton *button, + gpointer user_data); +static void tipi_atto_on_trv_tipi_atto_row_activated (GtkTreeView *tree_view, + GtkTreePath *tree_path, + GtkTreeViewColumn *column, + gpointer user_data); + +static void tipi_atto_on_btn_annulla_clicked (GtkButton *button, + gpointer user_data); +static void tipi_atto_on_btn_seleziona_clicked (GtkButton *button, + gpointer user_data); + +#define TIPI_ATTO_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TYPE_TIPI_ATTO, TipiAttoPrivate)) + +enum +{ + COL_ID, + COL_DESCRIZIONE +}; + +typedef struct _TipiAttoPrivate TipiAttoPrivate; +struct _TipiAttoPrivate + { + Commons *commons; + + GtkWidget *widget; + GtkTreeSelection *selection; + GtkListStore *lstore_tipi_atto; + + gboolean selezione; + }; + +G_DEFINE_TYPE (TipiAtto, tipi_atto, G_TYPE_OBJECT) + +static void +tipi_atto_class_init (TipiAttoClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (object_class, sizeof (TipiAttoPrivate)); + + object_class->set_property = tipi_atto_set_property; + object_class->get_property = tipi_atto_get_property; + + /** + * TipiAtto::selezionato: + * @tipi_atto: + * + */ + klass->selezionato_signal_id = g_signal_new ("selezionato", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + 0, + NULL, + NULL, + g_cclosure_marshal_VOID__UINT, + G_TYPE_NONE, + 1, G_TYPE_UINT); +} + +static void +tipi_atto_init (TipiAtto *tipi_atto) +{ + TipiAttoPrivate *priv = TIPI_ATTO_GET_PRIVATE (tipi_atto); +} + +/** + * tipi_atto_new: + * @commons: + * @selezione: + * + * Returns: the newly created #TipiAtto object. + */ +TipiAtto +*tipi_atto_new (Commons *commons, gboolean selezione) +{ + GError *error; + AutozIResource *ires1; + + TipiAtto *a = TIPI_ATTO (g_object_new (tipi_atto_get_type (), NULL)); + + TipiAttoPrivate *priv = TIPI_ATTO_GET_PRIVATE (a); + + priv->commons = commons; + priv->selezione = selezione; + + error = NULL; + gtk_builder_add_objects_from_file (priv->commons->gtkbuilder, priv->commons->guifile, + g_strsplit (g_strconcat ("lstore_tipi_atto|", + (selezione ? "w_tipi_atto" : "vbx_tipi_atto"), + NULL), "|", -1), + &error); + if (error != NULL) + { + g_warning ("Errore: %s.", error->message); + return NULL; + } + + priv->widget = GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, (selezione ? "w_tipi_atto" : "vbx_tipi_atto"))); + priv->selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (gtk_builder_get_object (priv->commons->gtkbuilder, "treeview31"))); + priv->lstore_tipi_atto = GTK_LIST_STORE (gtk_builder_get_object (priv->commons->gtkbuilder, "lstore_tipi_atto")); + + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button211"), + "clicked", G_CALLBACK (tipi_atto_on_btn_nuovo_clicked), (gpointer)a); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button212"), + "clicked", G_CALLBACK (tipi_atto_on_btn_modifica_clicked), (gpointer)a); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button213"), + "clicked", G_CALLBACK (tipi_atto_on_btn_elimina_clicked), (gpointer)a); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "treeview31"), + "row-activated", G_CALLBACK (tipi_atto_on_trv_tipi_atto_row_activated), (gpointer)a); + + if (priv->selezione) + { + gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "label222"))); + g_signal_connect (priv->widget, + "key-release-event", G_CALLBACK (tipi_atto_on_key_release_event), (gpointer)a); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button214"), + "clicked", G_CALLBACK (tipi_atto_on_btn_annulla_clicked), (gpointer)a); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button215"), + "clicked", G_CALLBACK (tipi_atto_on_btn_seleziona_clicked), (gpointer)a); + } + else + { + gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "button214"))); + gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "button215"))); + } + + tipi_atto_carica (a); + + ires1 = autoz_get_resource_from_id (priv->commons->autoz, "opengov_tab_tipi_atto_rw"); + if (!autoz_is_allowed (priv->commons->autoz, priv->commons->role_utente, ires1, FALSE)) + { + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (commons->gtkbuilder, "button211")), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (commons->gtkbuilder, "button213")), FALSE); + } + + return a; +} + +/** + * tipi_atto_get_widget: + * @tipi_atto: + * + */ +GtkWidget +*tipi_atto_get_widget (TipiAtto *tipi_atto) +{ + TipiAttoPrivate *priv = TIPI_ATTO_GET_PRIVATE (tipi_atto); + + return priv->widget; +} + +/* PRIVATE */ +static void +tipi_atto_carica (TipiAtto *tipi_atto) +{ + gchar *sql; + + TipiAttoPrivate *priv = TIPI_ATTO_GET_PRIVATE (tipi_atto); + + gtk_list_store_clear (priv->lstore_tipi_atto); + + sql = g_strdup_printf ("SELECT c.id, c.descrizione" + " FROM tipi_atto AS c" + " WHERE c.status <> 'E'" + " ORDER BY c.descrizione"); + gdaex_fill_liststore_from_sql (priv->commons->gdaex, + priv->lstore_tipi_atto, + sql, + 0, + NULL); +} + +static void +tipi_atto_modifica (TipiAtto *tipi_atto) +{ + GtkTreeIter iter; + guint id; + + TipiAttoPrivate *priv = TIPI_ATTO_GET_PRIVATE (tipi_atto); + + if (gtk_tree_selection_get_selected (priv->selection, NULL, &iter)) + { + GtkWidget *w; + + gtk_tree_model_get (GTK_TREE_MODEL (priv->lstore_tipi_atto), &iter, + COL_ID, &id, + -1); + + TipoAtto *c = tipo_atto_new (priv->commons, id); + + g_signal_connect (G_OBJECT (c), "aggiornato", + G_CALLBACK (tipi_atto_on_tipo_atto_aggiornato), (gpointer)tipi_atto); + + w = tipo_atto_get_widget (c); + if (priv->selezione) + { + gtk_window_set_transient_for (GTK_WINDOW (w), GTK_WINDOW (priv->widget)); + } + else + { + gtk_window_set_transient_for (GTK_WINDOW (w), GTK_WINDOW (gtk_builder_get_object (priv->commons->gtkbuilder, "w_main"))); + } + gtk_widget_show (w); + } + else + { + solipa_message_dialog (priv->selezione ? priv->widget : GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "w_main")), + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Occorre prima selezionare un tipo atto."); + } +} + +static void +tipi_atto_selezionato (TipiAtto *tipi_atto) +{ + GtkTreeIter iter; + guint id; + + TipiAttoClass *klass = TIPI_ATTO_GET_CLASS (tipi_atto); + TipiAttoPrivate *priv = TIPI_ATTO_GET_PRIVATE (tipi_atto); + + if (gtk_tree_selection_get_selected (priv->selection, NULL, &iter)) + { + gtk_tree_model_get (GTK_TREE_MODEL (priv->lstore_tipi_atto), &iter, + COL_ID, &id, + -1); + + g_signal_emit (G_OBJECT (tipi_atto), klass->selezionato_signal_id, 0, id); + + gtk_widget_destroy (priv->widget); + g_object_unref (G_OBJECT (tipi_atto)); + } + else + { + solipa_message_dialog (priv->selezione ? priv->widget : GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "w_main")), + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Occorre prima selezionare un tipo atto."); + } +} + +static void +tipi_atto_on_tipo_atto_aggiornato (gpointer instance, gpointer user_data) +{ + tipi_atto_carica ((TipiAtto *)user_data); +} + +static void +tipi_atto_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) +{ + TipiAtto *tipi_atto = TIPI_ATTO (object); + TipiAttoPrivate *priv = TIPI_ATTO_GET_PRIVATE (tipi_atto); + + switch (property_id) + { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +tipi_atto_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) +{ + TipiAtto *tipi_atto = TIPI_ATTO (object); + TipiAttoPrivate *priv = TIPI_ATTO_GET_PRIVATE (tipi_atto); + + switch (property_id) + { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +/* CALLBACK */ +static gboolean +tipi_atto_on_key_release_event (GtkWidget *widget, + GdkEventKey *event, + gpointer user_data) +{ + if (event->keyval == GDK_Escape) + { + TipiAttoPrivate *priv = TIPI_ATTO_GET_PRIVATE ((TipiAtto *)user_data); + + gtk_button_clicked (GTK_BUTTON (gtk_builder_get_object (priv->commons->gtkbuilder, "button214"))); + return TRUE; + } + + return FALSE; +} + +static void +tipi_atto_on_btn_nuovo_clicked (GtkButton *button, + gpointer user_data) +{ + GtkWidget *w; + + TipiAtto *tipi_atto = (TipiAtto *)user_data; + TipiAttoPrivate *priv = TIPI_ATTO_GET_PRIVATE (tipi_atto); + + TipoAtto *c = tipo_atto_new (priv->commons, 0); + + g_signal_connect (G_OBJECT (c), "aggiornato", + G_CALLBACK (tipi_atto_on_tipo_atto_aggiornato), (gpointer)tipi_atto); + + w = tipo_atto_get_widget (c); + if (priv->selezione) + { + gtk_window_set_transient_for (GTK_WINDOW (w), GTK_WINDOW (priv->widget)); + } + else + { + gtk_window_set_transient_for (GTK_WINDOW (w), GTK_WINDOW (gtk_builder_get_object (priv->commons->gtkbuilder, "w_main"))); + } + gtk_widget_show (w); +} + +static void +tipi_atto_on_btn_modifica_clicked (GtkButton *button, + gpointer user_data) +{ + tipi_atto_modifica ((TipiAtto *)user_data); +} + +static void +tipi_atto_on_btn_elimina_clicked (GtkButton *button, + gpointer user_data) +{ + GtkTreeIter iter; + guint id; + + TipiAtto *tipi_atto = (TipiAtto *)user_data; + TipiAttoPrivate *priv = TIPI_ATTO_GET_PRIVATE (tipi_atto); + + if (gtk_tree_selection_get_selected (priv->selection, NULL, &iter)) + { + if (solipa_message_dialog (priv->selezione ? priv->widget : GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "w_main")), + GTK_MESSAGE_QUESTION, + GTK_BUTTONS_YES_NO, + "Sicuro di voler eliminare il tipo atto selezionato?") == GTK_RESPONSE_YES) + { + gtk_tree_model_get (GTK_TREE_MODEL (priv->lstore_tipi_atto), &iter, + COL_ID, &id, + -1); + + gdaex_execute (priv->commons->gdaex, + g_strdup_printf ("UPDATE tipi_atto SET status = 'E' WHERE id = %d", id)); + + tipi_atto_carica (tipi_atto); + } + } + else + { + solipa_message_dialog (priv->selezione ? priv->widget : GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "w_main")), + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Occorre prima selezionare un tipo atto."); + } +} + +static void +tipi_atto_on_trv_tipi_atto_row_activated (GtkTreeView *tree_view, + GtkTreePath *tree_path, + GtkTreeViewColumn *column, + gpointer user_data) +{ + TipiAttoPrivate *priv = TIPI_ATTO_GET_PRIVATE ((TipiAtto *)user_data); + + if (priv->selezione) + { + tipi_atto_selezionato ((TipiAtto *)user_data); + } + else + { + tipi_atto_modifica ((TipiAtto *)user_data); + } +} + + +static void +tipi_atto_on_btn_annulla_clicked (GtkButton *button, + gpointer user_data) +{ + TipiAttoPrivate *priv = TIPI_ATTO_GET_PRIVATE ((TipiAtto *)user_data); + + gtk_widget_destroy (priv->widget); + g_object_unref (G_OBJECT (user_data)); +} + +static void +tipi_atto_on_btn_seleziona_clicked (GtkButton *button, + gpointer user_data) +{ + tipi_atto_selezionato ((TipiAtto *)user_data); +} diff --git a/src/tipiatto.h b/src/tipiatto.h new file mode 100644 index 0000000..13f812c --- /dev/null +++ b/src/tipiatto.h @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2013 Andrea Zagli + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef __TIPI_ATTO_H__ +#define __TIPI_ATTO_H__ + +#include +#include + +#include + +#include "commons.h" + +G_BEGIN_DECLS + + +#define TYPE_TIPI_ATTO (tipi_atto_get_type ()) +#define TIPI_ATTO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TIPI_ATTO, TipiAtto)) +#define TIPI_ATTO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_TIPI_ATTO, TipiAttoClass)) +#define IS_TIPI_ATTO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TIPI_ATTO)) +#define IS_TIPI_ATTO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_TIPI_ATTO)) +#define TIPI_ATTO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_TIPI_ATTO, TipiAttoClass)) + + +typedef struct _TipiAtto TipiAtto; +typedef struct _TipiAttoClass TipiAttoClass; + +struct _TipiAtto + { + GObject parent; + }; + +struct _TipiAttoClass + { + GObjectClass parent_class; + + guint selezionato_signal_id; + }; + +GType tipi_atto_get_type (void) G_GNUC_CONST; + +TipiAtto *tipi_atto_new (Commons *commons, gboolean selezione); + +GtkWidget *tipi_atto_get_widget (TipiAtto *tipi_atto); + + +G_END_DECLS + +#endif /* __TIPI_ATTO_H__ */ diff --git a/src/tipoatto.c b/src/tipoatto.c new file mode 100644 index 0000000..418d2c8 --- /dev/null +++ b/src/tipoatto.c @@ -0,0 +1,370 @@ +/* + * Copyright (C) 2013 Andrea Zagli + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include + +#include +#include + +#include "tipoatto.h" + +static void tipo_atto_class_init (TipoAttoClass *klass); +static void tipo_atto_init (TipoAtto *tipo_atto); + +static void tipo_atto_carica (TipoAtto *tipo_atto); +static void tipo_atto_salva (TipoAtto *tipo_atto, gboolean chiudi); + +static gboolean tipo_atto_conferma_chiusura (TipoAtto *tipo_atto); + +static void tipo_atto_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static void tipo_atto_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec); + +static gboolean tipo_atto_on_key_release_event (GtkWidget *widget, + GdkEventKey *event, + gpointer user_data); + +static gboolean tipo_atto_on_w_tipo_atto_delete_event (GtkWidget *widget, + GdkEvent *event, + gpointer user_data); + +static void tipo_atto_on_btn_annulla_clicked (GtkButton *button, + gpointer user_data); +static void tipo_atto_on_btn_salva_clicked (GtkButton *button, + gpointer user_data); +static void tipo_atto_on_btn_salvachiudi_clicked (GtkButton *button, + gpointer user_data); + +#define TIPO_ATTO_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TYPE_TIPO_ATTO, TipoAttoPrivate)) + +enum +{ + LBL_ID +}; + +typedef struct _TipoAttoPrivate TipoAttoPrivate; +struct _TipoAttoPrivate + { + Commons *commons; + + GtkForm *form; + + GtkWidget *w; + + GObject **objects; + + gint id; + }; + +G_DEFINE_TYPE (TipoAtto, tipo_atto, G_TYPE_OBJECT) + +static void +tipo_atto_class_init (TipoAttoClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (object_class, sizeof (TipoAttoPrivate)); + + object_class->set_property = tipo_atto_set_property; + object_class->get_property = tipo_atto_get_property; + + /** + * TipoAtto::aggiornato: + * @tipo_atto: + * + */ + klass->aggiornato_signal_id = g_signal_new ("aggiornato", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + 0, + NULL, + NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, + 0); +} + +static void +tipo_atto_init (TipoAtto *tipo_atto) +{ + TipoAttoPrivate *priv = TIPO_ATTO_GET_PRIVATE (tipo_atto); +} + +/** + * tipo_atto_new: + * @commons: + * @id: + * + * Returns: the newly created #TipoAtto object. + */ +TipoAtto +*tipo_atto_new (Commons *commons, gint id) +{ + GError *error; + AutozIResource *ires1; + + TipoAtto *a = TIPO_ATTO (g_object_new (tipo_atto_get_type (), NULL)); + + TipoAttoPrivate *priv = TIPO_ATTO_GET_PRIVATE (a); + + priv->commons = commons; + + error = NULL; + gtk_builder_add_objects_from_file (priv->commons->gtkbuilder, priv->commons->guifile, + g_strsplit ("w_tipo_atto", "|", -1), + &error); + if (error != NULL) + { + g_warning ("Errore: %s.", error->message); + return NULL; + } + + priv->form = gtk_form_new (); + g_object_set (priv->form, "gdaex", priv->commons->gdaex, NULL); + gtk_form_load_from_file (priv->form, g_build_filename (priv->commons->formdir, "tipoatto.form", NULL), priv->commons->gtkbuilder); + + priv->w = GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "w_tipo_atto")); + + priv->objects = gtk_form_get_objects_by_name (priv->form, + "label230", + NULL); + + g_signal_connect (priv->w, + "key-release-event", G_CALLBACK (tipo_atto_on_key_release_event), (gpointer)a); + g_signal_connect (priv->w, + "delete-event", G_CALLBACK (tipo_atto_on_w_tipo_atto_delete_event), (gpointer)a); + + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button223"), + "clicked", G_CALLBACK (tipo_atto_on_btn_annulla_clicked), (gpointer)a); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button224"), + "clicked", G_CALLBACK (tipo_atto_on_btn_salva_clicked), (gpointer)a); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button34"), + "clicked", G_CALLBACK (tipo_atto_on_btn_salvachiudi_clicked), (gpointer)a); + + gtk_form_clear (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); + } + else + { + gtk_label_set_text (GTK_LABEL (priv->objects[LBL_ID]), g_strdup_printf ("%d", priv->id)); + tipo_atto_carica (a); + } + + ires1 = autoz_get_resource_from_id (priv->commons->autoz, "opengov_tab_titoli_rw"); + if (!autoz_is_allowed (priv->commons->autoz, priv->commons->role_utente, ires1, FALSE)) + { + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (commons->gtkbuilder, "button224")), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (commons->gtkbuilder, "button34")), FALSE); + } + + return a; +} + +/** + * tipo_atto_get_widget: + * @tipo_atto: + * + */ +GtkWidget +*tipo_atto_get_widget (TipoAtto *tipo_atto) +{ + TipoAttoPrivate *priv = TIPO_ATTO_GET_PRIVATE (tipo_atto); + + return priv->w; +} + +/* PRIVATE */ +static void +tipo_atto_carica (TipoAtto *tipo_atto) +{ + TipoAttoPrivate *priv = TIPO_ATTO_GET_PRIVATE (tipo_atto); + + gtk_form_fill_from_table (priv->form); +} + +static void +tipo_atto_salva (TipoAtto *tipo_atto, gboolean chiudi) +{ + gchar *sql; + + TipoAttoClass *klass = TIPO_ATTO_GET_CLASS (tipo_atto); + + TipoAttoPrivate *priv = TIPO_ATTO_GET_PRIVATE (tipo_atto); + + if (!gtk_form_check (priv->form, (priv->id != 0), NULL, TRUE, priv->w, TRUE)) + { + return; + } + + if (priv->id == 0) + { + sql = gtk_form_get_sql (priv->form, GTK_FORM_SQL_INSERT); + } + else + { + sql = gtk_form_get_sql (priv->form, GTK_FORM_SQL_UPDATE); + } + + if (gdaex_execute (priv->commons->gdaex, sql) == 1) + { + g_signal_emit (tipo_atto, klass->aggiornato_signal_id, 0); + + gtk_form_set_as_origin (priv->form); + + if (priv->id == 0) + { + priv->id = strtol (gtk_label_get_text (GTK_LABEL (priv->objects[LBL_ID])), NULL, 10); + } + + solipa_message_dialog (priv->w, + GTK_MESSAGE_INFO, + GTK_BUTTONS_OK, + "Salvataggio eseguito con successo."); + + if (chiudi) + { + gtk_widget_destroy (priv->w); + g_object_unref (tipo_atto); + } + } + else + { + if (priv->id == 0) + { + gtk_label_set_text (GTK_LABEL (priv->objects[LBL_ID]), ""); + } + + solipa_message_dialog (priv->w, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Errore durante il salvataggio."); + } +} + +static void +tipo_atto_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) +{ + TipoAtto *tipo_atto = TIPO_ATTO (object); + TipoAttoPrivate *priv = TIPO_ATTO_GET_PRIVATE (tipo_atto); + + switch (property_id) + { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +tipo_atto_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) +{ + TipoAtto *tipo_atto = TIPO_ATTO (object); + TipoAttoPrivate *priv = TIPO_ATTO_GET_PRIVATE (tipo_atto); + + switch (property_id) + { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static gboolean +tipo_atto_conferma_chiusura (TipoAtto *tipo_atto) +{ + gboolean ret; + + TipoAttoPrivate *priv = TIPO_ATTO_GET_PRIVATE (tipo_atto); + + ret = TRUE; + if (gtk_form_is_changed (priv->form)) + { + if (solipa_message_dialog (priv->w, + GTK_MESSAGE_QUESTION, + GTK_BUTTONS_YES_NO, + "Sicuro di voler chiudere senza salvare?") == GTK_RESPONSE_NO) + { + ret = FALSE; + } + } + + return ret; +} + +/* CALLBACK */ +static gboolean +tipo_atto_on_key_release_event (GtkWidget *widget, + GdkEventKey *event, + gpointer user_data) +{ + if (event->keyval == GDK_Escape) + { + TipoAttoPrivate *priv = TIPO_ATTO_GET_PRIVATE ((TipoAtto *)user_data); + + gtk_button_clicked (GTK_BUTTON (gtk_builder_get_object (priv->commons->gtkbuilder, "button223"))); + return TRUE; + } + + return FALSE; +} + +static gboolean +tipo_atto_on_w_tipo_atto_delete_event (GtkWidget *widget, + GdkEvent *event, + gpointer user_data) +{ + return !tipo_atto_conferma_chiusura ((TipoAtto *)user_data); +} + +static void +tipo_atto_on_btn_annulla_clicked (GtkButton *button, + gpointer user_data) +{ + TipoAtto *tipo_atto = (TipoAtto *)user_data; + + TipoAttoPrivate *priv = TIPO_ATTO_GET_PRIVATE (tipo_atto); + + if (tipo_atto_conferma_chiusura (tipo_atto)) gtk_widget_destroy (priv->w); +} + +static void +tipo_atto_on_btn_salva_clicked (GtkButton *button, + gpointer user_data) +{ + tipo_atto_salva ((TipoAtto *)user_data, FALSE); +} + +static void +tipo_atto_on_btn_salvachiudi_clicked (GtkButton *button, + gpointer user_data) +{ + tipo_atto_salva ((TipoAtto *)user_data, TRUE); +} diff --git a/src/tipoatto.h b/src/tipoatto.h new file mode 100644 index 0000000..b64ae40 --- /dev/null +++ b/src/tipoatto.h @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2013 Andrea Zagli + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef __TIPO_ATTO_H__ +#define __TIPO_ATTO_H__ + +#include +#include + +#include + +#include "commons.h" + +G_BEGIN_DECLS + + +#define TYPE_TIPO_ATTO (tipo_atto_get_type ()) +#define TIPO_ATTO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TIPO_ATTO, TipoAtto)) +#define TIPO_ATTO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_TIPO_ATTO, TipoAttoClass)) +#define IS_TIPO_ATTO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TIPO_ATTO)) +#define IS_TIPO_ATTO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_TIPO_ATTO)) +#define TIPO_ATTO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_TIPO_ATTO, TipoAttoClass)) + + +typedef struct _TipoAtto TipoAtto; +typedef struct _TipoAttoClass TipoAttoClass; + +struct _TipoAtto + { + GObject parent; + }; + +struct _TipoAttoClass + { + GObjectClass parent_class; + + guint aggiornato_signal_id; + }; + +GType tipo_atto_get_type (void) G_GNUC_CONST; + +TipoAtto *tipo_atto_new (Commons *commons, gint id); + +GtkWidget *tipo_atto_get_widget (TipoAtto *tipo_atto); + + +G_END_DECLS + +#endif /* __TIPO_ATTO_H__ */