From: Andrea Zagli Date: Tue, 4 Jun 2013 08:51:38 +0000 (+0200) Subject: Aggiunti gli allegati alla struttura (closes #671). X-Git-Tag: 0.0.3~4 X-Git-Url: https://saetta.ns0.it/gitweb?a=commitdiff_plain;h=a533d1fa932700ab5d5f3cc9faaf726c114175f8;p=solipa%2Forganigramma Aggiunti gli allegati alla struttura (closes #671). --- diff --git a/data/organigramma/form/Makefile.am b/data/organigramma/form/Makefile.am index ce247ad..a65dbd4 100644 --- a/data/organigramma/form/Makefile.am +++ b/data/organigramma/form/Makefile.am @@ -13,6 +13,7 @@ form_DATA = \ profilo_professionale.form \ ruolo.form \ struttura.form \ + struttura_allegato.form \ struttura_collegamento.form \ struttura_indirizzo.form \ tipo_nodo.form \ diff --git a/data/organigramma/form/struttura_allegato.form b/data/organigramma/form/struttura_allegato.form new file mode 100644 index 0000000..f70ac74 --- /dev/null +++ b/data/organigramma/form/struttura_allegato.form @@ -0,0 +1,38 @@ + + + + struttura_allegati
+ + + + t + t + + + + + + + + + + t + + + + + + + + + + date + %d/%m/%Y + + + + + + + +
diff --git a/data/organigramma/gui/organigramma.gui b/data/organigramma/gui/organigramma.gui index 586bba1..2227fb5 100644 --- a/data/organigramma/gui/organigramma.gui +++ b/data/organigramma/gui/organigramma.gui @@ -213,6 +213,20 @@ + + + + + + + + + + + + + + @@ -5619,6 +5633,143 @@ False + + + True + False + 5 + 5 + + + True + True + automatic + automatic + etched-in + + + True + True + lstore_struttura_allegati + False + True + 0 + + + Titolo + + + + 1 + + + + + + + Descrizione + + + + 2 + + + + + + + + + True + True + 0 + + + + + True + False + 5 + start + + + 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-open + True + True + True + True + + + False + False + 3 + + + + + False + True + 1 + + + + + 2 + + + + + True + False + Allegati + + + 2 + False + + 2 @@ -5691,6 +5842,308 @@ + + False + Allegato - Organigramma + True + center-on-parent + 480 + True + + + True + False + 5 + 5 + + + True + False + 7 + 2 + 5 + 5 + + + + + + True + False + 0 + ID + + + GTK_FILL + GTK_FILL + + + + + True + False + 0 + lbl_id + + + 1 + 2 + GTK_FILL + + + + + True + False + 0 + Descrizione + + + 2 + 3 + GTK_FILL + GTK_FILL + + + + + True + True + 255 + ● + True + True + False + False + True + True + + + 1 + 2 + 2 + 3 + GTK_FILL + + + + + True + False + 0 + 0 + Note + + + 4 + 5 + GTK_FILL + GTK_FILL + + + + + True + True + automatic + automatic + etched-in + + + True + True + + + + + 1 + 2 + 4 + 5 + + + + + True + False + 0 + Data documento + + + 3 + 4 + GTK_FILL + GTK_FILL + + + + + True + True + 10 + ● + True + True + False + False + True + True + + + 1 + 2 + 3 + 4 + GTK_FILL + + + + + True + False + 0 + Titolo + + + 1 + 2 + GTK_FILL + GTK_FILL + + + + + True + True + 255 + ● + True + True + False + False + True + True + + + 1 + 2 + 1 + 2 + GTK_FILL + + + + + True + False + 0 + + + True + False + 5 + + + + + + + + True + False + <b>File</b> + True + + + + + 2 + 5 + 6 + GTK_FILL + + + + + False + lbl_id_strutture + + + 1 + 2 + 6 + 7 + GTK_FILL + GTK_FILL + + + + + True + True + 0 + + + + + True + False + 5 + end + + + gtk-cancel + True + True + True + True + + + False + False + 0 + + + + + gtk-save + True + True + True + True + True + True + + + False + False + 1 + + + + + Salva e _chiudi + True + True + True + True + + + False + False + 2 + + + + + False + True + 1 + + + + + False Collegamento - Organigramma diff --git a/docs/DBChangelog b/docs/DBChangelog index d47d999..7d9c688 100644 --- a/docs/DBChangelog +++ b/docs/DBChangelog @@ -42,3 +42,19 @@ ALTER TABLE tipi_recapito ADD COLUMN immagine_percorso character varying(255) DE ALTER TABLE tipi_recapito ADD COLUMN immagine_contenuto integer DEFAULT 0; ALTER TABLE tipi_recapito ADD COLUMN immagine_file_data timestamp without time zone; ALTER TABLE tipi_recapito ADD COLUMN immagine_file_dimensione bigint DEFAULT 0; + +CREATE TABLE struttura_allegati +( + id integer NOT NULL, + id_strutture integer, + titolo character varying(255) DEFAULT ''::character varying, + descrizione character varying DEFAULT ''::bpchar, + data_documento date, + note text DEFAULT ''::text, + percorso character varying(255) DEFAULT ''::character varying, + contenuto integer, + data_file timestamp without time zone, + dimensione_file bigint, + status character varying(1) DEFAULT ''::character varying, + CONSTRAINT struttura_allegati_pkey PRIMARY KEY (id) +); diff --git a/docs/organigramma.sql b/docs/organigramma.sql index 0c94aed..baafaad 100644 --- a/docs/organigramma.sql +++ b/docs/organigramma.sql @@ -4,7 +4,7 @@ -- Dumped from database version 8.4.17 -- Dumped by pg_dump version 9.2.2 --- Started on 2013-06-03 13:27:01 +-- Started on 2013-06-04 10:50:35 SET statement_timeout = 0; SET client_encoding = 'UTF8'; @@ -14,7 +14,7 @@ SET client_min_messages = warning; SET escape_string_warning = off; -- --- TOC entry 553 (class 2612 OID 16386) +-- TOC entry 558 (class 2612 OID 16386) -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: - -- @@ -202,6 +202,26 @@ CREATE TABLE ruoli ( ); +-- +-- TOC entry 165 (class 1259 OID 626425) +-- Name: struttura_allegati; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE struttura_allegati ( + id integer NOT NULL, + id_strutture integer, + titolo character varying(255) DEFAULT ''::character varying, + descrizione character varying DEFAULT ''::bpchar, + data_documento date, + note text DEFAULT ''::text, + percorso character varying(255) DEFAULT ''::character varying, + contenuto integer, + data_file timestamp without time zone, + dimensione_file bigint, + status character varying(1) DEFAULT ''::character varying +); + + -- -- TOC entry 164 (class 1259 OID 626367) -- Name: struttura_collegamenti; Type: TABLE; Schema: public; Owner: - @@ -418,7 +438,7 @@ CREATE TABLE ufficio_stanze ( -- --- TOC entry 1991 (class 2606 OID 59289) +-- TOC entry 2001 (class 2606 OID 59289) -- Name: nodi_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -427,7 +447,7 @@ ALTER TABLE ONLY nodi -- --- TOC entry 2031 (class 2606 OID 61360) +-- TOC entry 2041 (class 2606 OID 61360) -- Name: persona_incarichi_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -436,7 +456,7 @@ ALTER TABLE ONLY persona_incarichi -- --- TOC entry 2021 (class 2606 OID 61305) +-- TOC entry 2031 (class 2606 OID 61305) -- Name: persona_nodi_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -445,7 +465,7 @@ ALTER TABLE ONLY persona_nodi -- --- TOC entry 2023 (class 2606 OID 61321) +-- TOC entry 2033 (class 2606 OID 61321) -- Name: persona_nodo_recapiti_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -454,7 +474,7 @@ ALTER TABLE ONLY persona_nodo_recapiti -- --- TOC entry 2017 (class 2606 OID 61279) +-- TOC entry 2027 (class 2606 OID 61279) -- Name: persona_recapiti_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -463,7 +483,7 @@ ALTER TABLE ONLY persona_recapiti -- --- TOC entry 2015 (class 2606 OID 61252) +-- TOC entry 2025 (class 2606 OID 61252) -- Name: persona_uffici_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -472,7 +492,7 @@ ALTER TABLE ONLY persona_uffici -- --- TOC entry 2019 (class 2606 OID 61294) +-- TOC entry 2029 (class 2606 OID 61294) -- Name: persona_ufficio_recapiti_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -481,7 +501,7 @@ ALTER TABLE ONLY persona_ufficio_recapiti -- --- TOC entry 2011 (class 2606 OID 61235) +-- TOC entry 2021 (class 2606 OID 61235) -- Name: persone_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -490,7 +510,7 @@ ALTER TABLE ONLY persone -- --- TOC entry 2025 (class 2606 OID 61328) +-- TOC entry 2035 (class 2606 OID 61328) -- Name: posizioni_economiche_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -499,7 +519,7 @@ ALTER TABLE ONLY posizioni_economiche -- --- TOC entry 2029 (class 2606 OID 61342) +-- TOC entry 2039 (class 2606 OID 61342) -- Name: profili_professionali_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -508,7 +528,7 @@ ALTER TABLE ONLY profili_professionali -- --- TOC entry 2035 (class 2606 OID 618188) +-- TOC entry 2045 (class 2606 OID 618188) -- Name: ruoli_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -517,7 +537,16 @@ ALTER TABLE ONLY ruoli -- --- TOC entry 2039 (class 2606 OID 626378) +-- TOC entry 2051 (class 2606 OID 626437) +-- Name: struttura_allegati_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY struttura_allegati + ADD CONSTRAINT struttura_allegati_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2049 (class 2606 OID 626378) -- Name: struttura_collegamenti_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -526,7 +555,7 @@ ALTER TABLE ONLY struttura_collegamenti -- --- TOC entry 2001 (class 2606 OID 59356) +-- TOC entry 2011 (class 2606 OID 59356) -- Name: struttura_indirizzi_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -535,7 +564,7 @@ ALTER TABLE ONLY struttura_indirizzi -- --- TOC entry 1999 (class 2606 OID 59339) +-- TOC entry 2009 (class 2606 OID 59339) -- Name: strutture_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -544,7 +573,7 @@ ALTER TABLE ONLY strutture -- --- TOC entry 1993 (class 2606 OID 59296) +-- TOC entry 2003 (class 2606 OID 59296) -- Name: tipi_nodo_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -553,7 +582,7 @@ ALTER TABLE ONLY tipi_nodo -- --- TOC entry 2027 (class 2606 OID 61335) +-- TOC entry 2037 (class 2606 OID 61335) -- Name: tipi_prestazione_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -562,7 +591,7 @@ ALTER TABLE ONLY tipi_prestazione -- --- TOC entry 2013 (class 2606 OID 61242) +-- TOC entry 2023 (class 2606 OID 61242) -- Name: tipi_rapporto_lavoro_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -571,7 +600,7 @@ ALTER TABLE ONLY tipi_rapporto_lavoro -- --- TOC entry 1995 (class 2606 OID 59303) +-- TOC entry 2005 (class 2606 OID 59303) -- Name: tipi_recapito_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -580,7 +609,7 @@ ALTER TABLE ONLY tipi_recapito -- --- TOC entry 2009 (class 2606 OID 61226) +-- TOC entry 2019 (class 2606 OID 61226) -- Name: titoli_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -589,7 +618,7 @@ ALTER TABLE ONLY titoli -- --- TOC entry 1997 (class 2606 OID 59321) +-- TOC entry 2007 (class 2606 OID 59321) -- Name: uffici_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -598,7 +627,7 @@ ALTER TABLE ONLY uffici -- --- TOC entry 2037 (class 2606 OID 626366) +-- TOC entry 2047 (class 2606 OID 626366) -- Name: ufficio_collegamenti_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -607,7 +636,7 @@ ALTER TABLE ONLY ufficio_collegamenti -- --- TOC entry 2003 (class 2606 OID 59366) +-- TOC entry 2013 (class 2606 OID 59366) -- Name: ufficio_nodi_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -616,7 +645,7 @@ ALTER TABLE ONLY ufficio_nodi -- --- TOC entry 2005 (class 2606 OID 59408) +-- TOC entry 2015 (class 2606 OID 59408) -- Name: ufficio_orari_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -625,7 +654,7 @@ ALTER TABLE ONLY ufficio_orari -- --- TOC entry 2007 (class 2606 OID 59419) +-- TOC entry 2017 (class 2606 OID 59419) -- Name: ufficio_recapiti_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -634,7 +663,7 @@ ALTER TABLE ONLY ufficio_recapiti -- --- TOC entry 2033 (class 2606 OID 61430) +-- TOC entry 2043 (class 2606 OID 61430) -- Name: ufficio_stanze_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -642,7 +671,7 @@ ALTER TABLE ONLY ufficio_stanze ADD CONSTRAINT ufficio_stanze_pkey PRIMARY KEY (id); --- Completed on 2013-06-03 13:27:02 +-- Completed on 2013-06-04 10:50:35 -- -- PostgreSQL database dump complete diff --git a/libreria/Makefile.am b/libreria/Makefile.am index 79049c8..998fbdb 100644 --- a/libreria/Makefile.am +++ b/libreria/Makefile.am @@ -37,6 +37,7 @@ liborganigramma_la_SOURCES = \ ../src/ruolo.c \ ../src/ruolo.h \ ../src/struttura.c \ + ../src/strutturaallegato.c \ ../src/strutturacollegamento.c \ ../src/strutturaindirizzo.c \ ../src/strutture.c \ @@ -78,6 +79,7 @@ liborganigramma_include_HEADERS = \ ../src/profiliprofessionali.h \ ../src/profiloprofessionale.h \ ../src/struttura.h \ + ../src/strutturaallegato.h \ ../src/strutturacollegamento.h \ ../src/strutturaindirizzo.h \ ../src/strutture.h \ diff --git a/src/Makefile.am b/src/Makefile.am index 86c2e9e..a8962e1 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -66,6 +66,8 @@ organigramma_SOURCES = \ ruolo.h \ struttura.c \ struttura.h \ + strutturaallegato.c \ + strutturaallegato.h \ strutturacollegamento.c \ strutturacollegamento.h \ strutturaindirizzo.c \ diff --git a/src/struttura.c b/src/struttura.c index fafb4a2..e2a7cf4 100644 --- a/src/struttura.c +++ b/src/struttura.c @@ -29,6 +29,7 @@ #include "struttura.h" #include "strutturaindirizzo.h" #include "strutturacollegamento.h" +#include "strutturaallegato.h" static void organigramma_struttura_class_init (OrganigrammaStrutturaClass *klass); static void organigramma_struttura_init (OrganigrammaStruttura *struttura); @@ -38,9 +39,11 @@ static void organigramma_struttura_salva (OrganigrammaStruttura *struttura, gboo static void organigramma_struttura_carica_indirizzi (OrganigrammaStruttura *struttura); static void organigramma_struttura_carica_collegamenti (OrganigrammaStruttura *struttura); +static void organigramma_struttura_carica_allegati (OrganigrammaStruttura *struttura); static void organigramma_struttura_indirizzo_modifica (OrganigrammaStruttura *struttura); static void organigramma_struttura_collegamento_modifica (OrganigrammaStruttura *struttura); +static void organigramma_struttura_allegato_modifica (OrganigrammaStruttura *struttura); static gboolean organigramma_struttura_conferma_chiusura (OrganigrammaStruttura *struttura); @@ -55,6 +58,7 @@ static void organigramma_struttura_get_property (GObject *object, static void organigramma_struttura_on_indirizzo_aggiornato (gpointer instance, gpointer user_data); static void organigramma_struttura_on_collegamento_aggiornato (gpointer instance, gpointer user_data); +static void organigramma_struttura_on_allegato_aggiornato (gpointer instance, gpointer user_data); static gboolean organigramma_struttura_on_w_organigramma_struttura_delete_event (GtkWidget *widget, GdkEvent *event, @@ -84,6 +88,19 @@ static void organigramma_struttura_on_trv_collegamenti_row_activated (GtkTreeVie GtkTreeViewColumn *column, gpointer user_data); +static void organigramma_struttura_on_btn_allegato_nuovo_clicked (GtkButton *button, + gpointer user_data); +static void organigramma_struttura_on_btn_allegato_modifica_clicked (GtkButton *button, + gpointer user_data); +static void organigramma_struttura_on_btn_allegato_elimina_clicked (GtkButton *button, + gpointer user_data); +static void organigramma_struttura_on_btn_allegato_apri_clicked (GtkButton *button, + gpointer user_data); +static void organigramma_struttura_on_trv_allegati_row_activated (GtkTreeView *tree_view, + GtkTreePath *tree_path, + GtkTreeViewColumn *column, + gpointer user_data); + static void organigramma_struttura_on_btn_annulla_clicked (GtkButton *button, gpointer user_data); static void organigramma_struttura_on_btn_salva_clicked (GtkButton *button, @@ -97,7 +114,8 @@ enum { LBL_ID, LSTORE_INDIRIZZI, - LSTORE_COLLEGAMENTI + LSTORE_COLLEGAMENTI, + LSTORE_ALLEGATI }; enum @@ -113,6 +131,15 @@ enum COLLEGAMENTI_COL_INDIRIZZO }; +enum +{ + ALLEGATI_COL_ID, + ALLEGATI_COL_TITOLO, + ALLEGATI_COL_DESCRIZIONE, + ALLEGATI_COL_PERCORSO, + ALLEGATI_COL_CONTENUTO +}; + typedef struct _OrganigrammaStrutturaPrivate OrganigrammaStrutturaPrivate; struct _OrganigrammaStrutturaPrivate { @@ -126,6 +153,7 @@ struct _OrganigrammaStrutturaPrivate GtkTreeSelection *sel_indirizzi; GtkTreeSelection *sel_collegamenti; + GtkTreeSelection *sel_allegati; gint id; }; @@ -187,6 +215,7 @@ OrganigrammaStruttura gtk_builder_add_objects_from_file (priv->commons->gtkbuilder, priv->commons->guifile, g_strsplit ("lstore_struttura_indirizzi" "|lstore_struttura_collegamenti" + "|lstore_struttura_allegati" "|w_struttura", "|", -1), &error); @@ -206,6 +235,7 @@ OrganigrammaStruttura "label31", "lstore_struttura_indirizzi", "lstore_struttura_collegamenti", + "lstore_struttura_allegati", NULL); g_signal_connect (priv->w, @@ -213,6 +243,7 @@ OrganigrammaStruttura priv->sel_indirizzi = gtk_tree_view_get_selection (GTK_TREE_VIEW (gtk_builder_get_object (priv->commons->gtkbuilder, "treeview9"))); priv->sel_collegamenti = gtk_tree_view_get_selection (GTK_TREE_VIEW (gtk_builder_get_object (priv->commons->gtkbuilder, "treeview26"))); + priv->sel_allegati = gtk_tree_view_get_selection (GTK_TREE_VIEW (gtk_builder_get_object (priv->commons->gtkbuilder, "treeview27"))); g_signal_connect (G_OBJECT (gtk_builder_get_object (priv->commons->gtkbuilder, "button47")), "clicked", G_CALLBACK (organigramma_struttura_on_btn_indirizzo_nuovo_clicked), (gpointer)a); @@ -234,6 +265,17 @@ OrganigrammaStruttura g_signal_connect (G_OBJECT (gtk_builder_get_object (priv->commons->gtkbuilder, "treeview26")), "row-activated", G_CALLBACK (organigramma_struttura_on_trv_collegamenti_row_activated), (gpointer)a); + g_signal_connect (G_OBJECT (gtk_builder_get_object (priv->commons->gtkbuilder, "button191")), + "clicked", G_CALLBACK (organigramma_struttura_on_btn_allegato_nuovo_clicked), (gpointer)a); + g_signal_connect (G_OBJECT (gtk_builder_get_object (priv->commons->gtkbuilder, "button192")), + "clicked", G_CALLBACK (organigramma_struttura_on_btn_allegato_modifica_clicked), (gpointer)a); + g_signal_connect (G_OBJECT (gtk_builder_get_object (priv->commons->gtkbuilder, "button193")), + "clicked", G_CALLBACK (organigramma_struttura_on_btn_allegato_elimina_clicked), (gpointer)a); + g_signal_connect (G_OBJECT (gtk_builder_get_object (priv->commons->gtkbuilder, "button194")), + "clicked", G_CALLBACK (organigramma_struttura_on_btn_allegato_apri_clicked), (gpointer)a); + g_signal_connect (G_OBJECT (gtk_builder_get_object (priv->commons->gtkbuilder, "treeview27")), + "row-activated", G_CALLBACK (organigramma_struttura_on_trv_allegati_row_activated), (gpointer)a); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button39"), "clicked", G_CALLBACK (organigramma_struttura_on_btn_annulla_clicked), (gpointer)a); g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button40"), @@ -251,7 +293,7 @@ OrganigrammaStruttura gtk_form_set_as_origin (priv->form); - gtk_form_set_sensitive_by_name (priv->form, FALSE, "hbox6", "hbox23", NULL); + gtk_form_set_sensitive_by_name (priv->form, FALSE, "hbox6", "hbox23", "hbox31", NULL); } else { @@ -268,6 +310,8 @@ OrganigrammaStruttura gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (commons->gtkbuilder, "button149")), FALSE); gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (commons->gtkbuilder, "button181")), FALSE); gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (commons->gtkbuilder, "button183")), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (commons->gtkbuilder, "button191")), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (commons->gtkbuilder, "button193")), FALSE); } return a; @@ -296,6 +340,7 @@ organigramma_struttura_carica (OrganigrammaStruttura *struttura) { organigramma_struttura_carica_indirizzi (struttura); organigramma_struttura_carica_collegamenti (struttura); + organigramma_struttura_carica_allegati (struttura); } } @@ -331,7 +376,7 @@ organigramma_struttura_salva (OrganigrammaStruttura *struttura, gboolean chiudi) 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, "frame3", NULL); + gtk_form_set_sensitive_by_name (priv->form, TRUE, "hbox6", "hbox23", "hbox31", NULL); } solipa_message_dialog (priv->w, @@ -446,6 +491,50 @@ organigramma_struttura_carica_collegamenti (OrganigrammaStruttura *struttura) } } +static void +organigramma_struttura_carica_allegati (OrganigrammaStruttura *organigramma_struttura) +{ + GtkListStore *lstore; + GtkTreeIter iter; + GdaDataModel *dm; + + gchar *sql; + + gint rows; + gint row; + + OrganigrammaStrutturaPrivate *priv = ORGANIGRAMMA_STRUTTURA_GET_PRIVATE (organigramma_struttura); + + lstore = GTK_LIST_STORE (priv->objects[LSTORE_ALLEGATI]); + gtk_list_store_clear (lstore); + + sql = g_strdup_printf ("SELECT aa.id, aa.titolo, aa.descrizione," + " aa.percorso, aa.contenuto" + " FROM struttura_allegati AS aa" + " WHERE aa.status <> 'E' AND aa.id_strutture = %d" + " ORDER BY aa.titolo, aa.descrizione", + priv->id); + dm = gdaex_query (priv->commons->gdaex, sql); + g_free (sql); + if (dm != NULL) + { + rows = gda_data_model_get_n_rows (dm); + for (row = 0; row < rows; row++) + { + gtk_list_store_append (lstore, &iter); + gtk_list_store_set (lstore, &iter, + ALLEGATI_COL_ID, gdaex_data_model_get_field_value_integer_at (dm, row, "id"), + ALLEGATI_COL_TITOLO, gdaex_data_model_get_field_value_stringify_at (dm, row, "titolo"), + ALLEGATI_COL_DESCRIZIONE, gdaex_data_model_get_field_value_stringify_at (dm, row, "descrizione"), + ALLEGATI_COL_PERCORSO, gdaex_data_model_get_field_value_stringify_at (dm, row, "percorso"), + ALLEGATI_COL_CONTENUTO, gdaex_data_model_get_field_value_integer_at (dm, row, "contenuto"), + -1); + } + + g_object_unref (dm); + } +} + static void organigramma_struttura_indirizzo_modifica (OrganigrammaStruttura *struttura) { @@ -514,6 +603,40 @@ organigramma_struttura_collegamento_modifica (OrganigrammaStruttura *organigramm } } +static void +organigramma_struttura_allegato_modifica (OrganigrammaStruttura *organigramma_struttura) +{ + GtkTreeIter iter; + guint id; + + OrganigrammaStrutturaPrivate *priv = ORGANIGRAMMA_STRUTTURA_GET_PRIVATE (organigramma_struttura); + + if (gtk_tree_selection_get_selected (priv->sel_allegati, NULL, &iter)) + { + GtkWidget *w; + + gtk_tree_model_get (GTK_TREE_MODEL (priv->objects[LSTORE_ALLEGATI]), &iter, + ALLEGATI_COL_ID, &id, + -1); + + OrganigrammaStrutturaAllegato *c = organigramma_struttura_allegato_new (priv->commons, id, 0); + + g_signal_connect (G_OBJECT (c), "aggiornato", + G_CALLBACK (organigramma_struttura_on_allegato_aggiornato), (gpointer)organigramma_struttura); + + w = organigramma_struttura_allegato_get_widget (c); + gtk_window_set_transient_for (GTK_WINDOW (w), GTK_WINDOW (priv->w)); + gtk_widget_show (w); + } + else + { + solipa_message_dialog (priv->w, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Occorre prima selezionare un allegato."); + } +} + static void organigramma_struttura_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { @@ -580,6 +703,12 @@ organigramma_struttura_on_collegamento_aggiornato (gpointer instance, gpointer u organigramma_struttura_carica_collegamenti ((OrganigrammaStruttura *)user_data); } +static void +organigramma_struttura_on_allegato_aggiornato (gpointer instance, gpointer user_data) +{ + organigramma_struttura_carica_allegati ((OrganigrammaStruttura *)user_data); +} + static gboolean organigramma_struttura_on_w_organigramma_struttura_delete_event (GtkWidget *widget, GdkEvent *event, @@ -771,6 +900,159 @@ organigramma_struttura_on_trv_collegamenti_row_activated (GtkTreeView *tree_view organigramma_struttura_collegamento_modifica ((OrganigrammaStruttura *)user_data); } +static void +organigramma_struttura_on_btn_allegato_nuovo_clicked (GtkButton *button, + gpointer user_data) +{ + GtkWidget *w; + + OrganigrammaStruttura *organigramma_struttura = (OrganigrammaStruttura *)user_data; + OrganigrammaStrutturaPrivate *priv = ORGANIGRAMMA_STRUTTURA_GET_PRIVATE (organigramma_struttura); + + OrganigrammaStrutturaAllegato *c = organigramma_struttura_allegato_new (priv->commons, 0, priv->id); + + g_signal_connect (G_OBJECT (c), "aggiornato", + G_CALLBACK (organigramma_struttura_on_allegato_aggiornato), user_data); + + w = organigramma_struttura_allegato_get_widget (c); + gtk_window_set_transient_for (GTK_WINDOW (w), GTK_WINDOW (priv->w)); + gtk_widget_show (w); + +} + +static void +organigramma_struttura_on_btn_allegato_modifica_clicked (GtkButton *button, + gpointer user_data) +{ + organigramma_struttura_allegato_modifica ((OrganigrammaStruttura *)user_data); +} + +static void +organigramma_struttura_on_btn_allegato_elimina_clicked (GtkButton *button, + gpointer user_data) +{ + GtkTreeIter iter; + guint id; + + OrganigrammaStruttura *organigramma_struttura = (OrganigrammaStruttura *)user_data; + OrganigrammaStrutturaPrivate *priv = ORGANIGRAMMA_STRUTTURA_GET_PRIVATE (organigramma_struttura); + + if (gtk_tree_selection_get_selected (priv->sel_allegati, NULL, &iter)) + { + if (solipa_message_dialog (priv->w, + GTK_MESSAGE_QUESTION, + GTK_BUTTONS_YES_NO, + "Sicuro di voler eliminare l'allegato selezionato?") == GTK_RESPONSE_YES) + { + gtk_tree_model_get (GTK_TREE_MODEL (priv->objects[LSTORE_ALLEGATI]), &iter, + ALLEGATI_COL_ID, &id, + -1); + + gdaex_execute (priv->commons->gdaex, + g_strdup_printf ("UPDATE struttura_allegati SET status = 'E' WHERE id = %d", id)); + + organigramma_struttura_carica_allegati (organigramma_struttura); + } + } + else + { + solipa_message_dialog (priv->w, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Occorre prima selezionare un allegato."); + } +} + +static void +organigramma_struttura_on_btn_allegato_apri_clicked (GtkButton *button, + gpointer user_data) +{ + GtkTreeIter iter; + const gchar *percorso; + guint id; + + gchar *sql; + + OrganigrammaStruttura *organigramma_struttura = (OrganigrammaStruttura *)user_data; + OrganigrammaStrutturaPrivate *priv = ORGANIGRAMMA_STRUTTURA_GET_PRIVATE (organigramma_struttura); + + if (gtk_tree_selection_get_selected (priv->sel_allegati, NULL, &iter)) + { + gtk_tree_model_get (GTK_TREE_MODEL (priv->objects[LSTORE_ALLEGATI]), &iter, + ALLEGATI_COL_ID, &id, + -1); + + /* devo utilizzare le funzioni native di postgres + * perché quelle di libgda non sembrano funzionare sotto windows */ + GError *error; + GdaDataModel *dm; + gchar *filename_orig; + gchar *filename_tmp; + gint fin; + + sql = g_strdup_printf ("SELECT percorso, contenuto FROM struttura_allegati WHERE id = %d", id); + dm = gdaex_query (priv->commons->gdaex, sql); + g_free (sql); + if (dm != NULL && gda_data_model_get_n_rows (dm) > 0) + { + filename_orig = g_path_get_basename (gdaex_data_model_get_field_value_stringify_at (dm, 0, "percorso")); + + error = NULL; + fin = g_file_open_tmp (g_strdup_printf ("organigramma-XXXXXX-%s", + filename_orig), + &filename_tmp, &error); + if (fin < 1 || error != NULL) + { + solipa_message_dialog (priv->w, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + g_strdup_printf ("Errore nell'apertura dell'allegato: %s", + error != NULL && error->message != NULL ? error->message : "nessun dettaglio")); + close (fin); + return; + } + close (fin); + +#ifdef G_OS_WIN32 + filename_tmp = g_strjoinv ("\\", g_strsplit (filename_tmp, "/", -1)); +#endif + + PQexec (priv->commons->pgcon, "BEGIN"); + + lo_export (priv->commons->pgcon, + gdaex_data_model_get_field_value_integer_at (dm, 0, "contenuto"), + filename_tmp); + + PQexec (priv->commons->pgcon, "COMMIT"); + + solipa_allegato_apri_allegato (GTK_WINDOW (priv->w), filename_tmp); + } + else + { + solipa_message_dialog (priv->w, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Occorre prima selezionare un allegato."); + } + } + else + { + solipa_message_dialog (priv->w, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Occorre prima selezionare un allegato."); + } +} + +static void +organigramma_struttura_on_trv_allegati_row_activated (GtkTreeView *tree_view, + GtkTreePath *tree_path, + GtkTreeViewColumn *column, + gpointer user_data) +{ + organigramma_struttura_allegato_modifica ((OrganigrammaStruttura *)user_data); +} + static void organigramma_struttura_on_btn_annulla_clicked (GtkButton *button, gpointer user_data) diff --git a/src/strutturaallegato.c b/src/strutturaallegato.c new file mode 100644 index 0000000..f10f304 --- /dev/null +++ b/src/strutturaallegato.c @@ -0,0 +1,446 @@ +/* + * 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 + +#include "strutturaallegato.h" + +static void organigramma_struttura_allegato_class_init (OrganigrammaStrutturaAllegatoClass *klass); +static void organigramma_struttura_allegato_init (OrganigrammaStrutturaAllegato *organigramma_struttura_allegato); + +static void organigramma_struttura_allegato_carica (OrganigrammaStrutturaAllegato *organigramma_struttura_allegato); +static void organigramma_struttura_allegato_salva (OrganigrammaStrutturaAllegato *organigramma_struttura_allegato, gboolean chiudi); + +static gboolean organigramma_struttura_allegato_conferma_chiusura (OrganigrammaStrutturaAllegato *organigramma_struttura_allegato); + +static void organigramma_struttura_allegato_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static void organigramma_struttura_allegato_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec); + +static gboolean organigramma_struttura_allegato_on_w_organigramma_struttura_allegato_delete_event (GtkWidget *widget, + GdkEvent *event, + gpointer user_data); + +static void organigramma_struttura_allegato_on_btn_annulla_clicked (GtkButton *button, + gpointer user_data); +static void organigramma_struttura_allegato_on_btn_salva_clicked (GtkButton *button, + gpointer user_data); +static void organigramma_struttura_allegato_on_btn_salvachiudi_clicked (GtkButton *button, + gpointer user_data); + +#define ORGANIGRAMMA_STRUTTURA_ALLEGATO_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TYPE_ORGANIGRAMMA_STRUTTURA_ALLEGATO, OrganigrammaStrutturaAllegatoPrivate)) + +enum +{ + LBL_ID, + LBL_ID_STRUTTURE +}; + +typedef struct _OrganigrammaStrutturaAllegatoPrivate OrganigrammaStrutturaAllegatoPrivate; +struct _OrganigrammaStrutturaAllegatoPrivate + { + OrganigrammaCommons *commons; + + GtkForm *form; + + GtkWidget *w; + SolipaAllegato *sallegato; + + GObject **objects; + + gint id; + }; + +G_DEFINE_TYPE (OrganigrammaStrutturaAllegato, organigramma_struttura_allegato, G_TYPE_OBJECT) + +static void +organigramma_struttura_allegato_class_init (OrganigrammaStrutturaAllegatoClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (object_class, sizeof (OrganigrammaStrutturaAllegatoPrivate)); + + object_class->set_property = organigramma_struttura_allegato_set_property; + object_class->get_property = organigramma_struttura_allegato_get_property; + + /** + * OrganigrammaStrutturaAllegato::aggiornato: + * @organigramma_struttura_allegato: + * + */ + 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 +organigramma_struttura_allegato_init (OrganigrammaStrutturaAllegato *organigramma_struttura_allegato) +{ + OrganigrammaStrutturaAllegatoPrivate *priv = ORGANIGRAMMA_STRUTTURA_ALLEGATO_GET_PRIVATE (organigramma_struttura_allegato); +} + +/** + * organigramma_struttura_allegato_new: + * @commons: + * @id: + * @id_strutture: + * + * Returns: the newly created #OrganigrammaStrutturaAllegato object. + */ +OrganigrammaStrutturaAllegato +*organigramma_struttura_allegato_new (OrganigrammaCommons *commons, guint id, guint id_strutture) +{ + GError *error; + AutozIResource *ires1; + + OrganigrammaStrutturaAllegato *a = ORGANIGRAMMA_STRUTTURA_ALLEGATO (g_object_new (organigramma_struttura_allegato_get_type (), NULL)); + + OrganigrammaStrutturaAllegatoPrivate *priv = ORGANIGRAMMA_STRUTTURA_ALLEGATO_GET_PRIVATE (a); + + priv->commons = commons; + + error = NULL; + gtk_builder_add_objects_from_file (priv->commons->gtkbuilder, priv->commons->guifile, + g_strsplit ("w_struttura_allegato", "|", -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, "struttura_allegato.form", NULL), priv->commons->gtkbuilder); + + g_object_set (priv->form, "gdaex", priv->commons->gdaex, NULL); + + priv->w = GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "w_struttura_allegato")); + + priv->objects = gtk_form_get_objects_by_name (priv->form, + "label324", + "label330", + NULL); + + priv->sallegato = solipa_allegato_new (commons->solipa); + if (priv->sallegato != NULL) + { + solipa_allegato_add_to_gtkform (priv->sallegato, priv->form, + "percorso", "data_file", "dimensione_file"); + solipa_allegato_con_salva_in_db (priv->sallegato, FALSE); + gtk_container_add (GTK_CONTAINER (gtk_builder_get_object (priv->commons->gtkbuilder, "alignment32")), + solipa_allegato_get_widget (priv->sallegato)); + } + + g_signal_connect (priv->w, + "delete-event", G_CALLBACK (organigramma_struttura_allegato_on_w_organigramma_struttura_allegato_delete_event), (gpointer)a); + + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button188"), + "clicked", G_CALLBACK (organigramma_struttura_allegato_on_btn_annulla_clicked), (gpointer)a); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button189"), + "clicked", G_CALLBACK (organigramma_struttura_allegato_on_btn_salva_clicked), (gpointer)a); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button190"), + "clicked", G_CALLBACK (organigramma_struttura_allegato_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_label_set_text (GTK_LABEL (priv->objects[LBL_ID_STRUTTURE]), g_strdup_printf ("%d", id_strutture)); + + if (priv->sallegato != NULL) + { + solipa_allegato_set_salva_in_db (priv->sallegato, TRUE); + } + + gtk_form_set_as_origin (priv->form); + } + else + { + gtk_label_set_text (GTK_LABEL (priv->objects[LBL_ID]), g_strdup_printf ("%d", priv->id)); + organigramma_struttura_allegato_carica (a); + } + + ires1 = autoz_get_resource_from_id (priv->commons->autoz, "organigramma_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, "button189")), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (commons->gtkbuilder, "button190")), FALSE); + } + + return a; +} + +/** + * organigramma_struttura_allegato_get_widget: + * @organigramma_struttura_allegato: + * + */ +GtkWidget +*organigramma_struttura_allegato_get_widget (OrganigrammaStrutturaAllegato *organigramma_struttura_allegato) +{ + OrganigrammaStrutturaAllegatoPrivate *priv = ORGANIGRAMMA_STRUTTURA_ALLEGATO_GET_PRIVATE (organigramma_struttura_allegato); + + return priv->w; +} + +/* PRIVATE */ +static void +organigramma_struttura_allegato_carica (OrganigrammaStrutturaAllegato *organigramma_struttura_allegato) +{ + OrganigrammaStrutturaAllegatoPrivate *priv = ORGANIGRAMMA_STRUTTURA_ALLEGATO_GET_PRIVATE (organigramma_struttura_allegato); + + if (gtk_form_fill_from_table (priv->form)) + { + solipa_allegato_set_salva_in_db (priv->sallegato, TRUE); + } +} + +static void +organigramma_struttura_allegato_salva (OrganigrammaStrutturaAllegato *organigramma_struttura_allegato, gboolean chiudi) +{ + gchar *sql; + GtkWidget *dialog; + + OrganigrammaStrutturaAllegatoClass *klass = ORGANIGRAMMA_STRUTTURA_ALLEGATO_GET_CLASS (organigramma_struttura_allegato); + + OrganigrammaStrutturaAllegatoPrivate *priv = ORGANIGRAMMA_STRUTTURA_ALLEGATO_GET_PRIVATE (organigramma_struttura_allegato); + + 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_free (sql); + + g_signal_emit (organigramma_struttura_allegato, 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); + } + + /* salvo l'organigramma_struttura_allegato nel db */ + /* devo utilizzare le funzioni native di postgres + * perché quelle di libgda non sembrano funzionare sotto windows */ + Oid oid; + const gchar *percorso; + + percorso = solipa_allegato_get_percorso (priv->sallegato); + + if (PQexec (priv->commons->pgcon, "BEGIN") == NULL) + { + 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: allegato non importato nel database (impossibile aprire la transazione)."); + return; + } + + oid = lo_import (priv->commons->pgcon, percorso); + + if (oid > 0) + { + sql = g_strdup_printf ("UPDATE struttura_allegati " + " SET contenuto = %d," + " percorso = '%s'" + " WHERE id = %d", + oid, + gdaex_strescape (g_path_get_basename (percorso), NULL), + priv->id); + if (gdaex_execute (priv->commons->gdaex, sql) < 1) + { + g_free (sql); + + 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."); + return; + } + g_free (sql); + + organigramma_struttura_allegato_carica (organigramma_struttura_allegato); + } + 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: allegato non importato nel database."); + return; + } + + PQexec (priv->commons->pgcon, "COMMIT"); + + 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 (organigramma_struttura_allegato); + } + } + else + { + g_free (sql); + + 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 +organigramma_struttura_allegato_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) +{ + OrganigrammaStrutturaAllegato *organigramma_struttura_allegato = ORGANIGRAMMA_STRUTTURA_ALLEGATO (object); + OrganigrammaStrutturaAllegatoPrivate *priv = ORGANIGRAMMA_STRUTTURA_ALLEGATO_GET_PRIVATE (organigramma_struttura_allegato); + + switch (property_id) + { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +organigramma_struttura_allegato_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) +{ + OrganigrammaStrutturaAllegato *organigramma_struttura_allegato = ORGANIGRAMMA_STRUTTURA_ALLEGATO (object); + OrganigrammaStrutturaAllegatoPrivate *priv = ORGANIGRAMMA_STRUTTURA_ALLEGATO_GET_PRIVATE (organigramma_struttura_allegato); + + switch (property_id) + { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static gboolean +organigramma_struttura_allegato_conferma_chiusura (OrganigrammaStrutturaAllegato *organigramma_struttura_allegato) +{ + gboolean ret; + + OrganigrammaStrutturaAllegatoPrivate *priv = ORGANIGRAMMA_STRUTTURA_ALLEGATO_GET_PRIVATE (organigramma_struttura_allegato); + + 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 +organigramma_struttura_allegato_on_w_organigramma_struttura_allegato_delete_event (GtkWidget *widget, + GdkEvent *event, + gpointer user_data) +{ + return !organigramma_struttura_allegato_conferma_chiusura ((OrganigrammaStrutturaAllegato *)user_data); +} + +static void +organigramma_struttura_allegato_on_btn_annulla_clicked (GtkButton *button, + gpointer user_data) +{ + OrganigrammaStrutturaAllegato *allegato = (OrganigrammaStrutturaAllegato *)user_data; + + OrganigrammaStrutturaAllegatoPrivate *priv = ORGANIGRAMMA_STRUTTURA_ALLEGATO_GET_PRIVATE (allegato); + + if (organigramma_struttura_allegato_conferma_chiusura (allegato)) gtk_widget_destroy (priv->w); +} + +static void +organigramma_struttura_allegato_on_btn_salva_clicked (GtkButton *button, + gpointer user_data) +{ + organigramma_struttura_allegato_salva ((OrganigrammaStrutturaAllegato *)user_data, FALSE); +} + +static void +organigramma_struttura_allegato_on_btn_salvachiudi_clicked (GtkButton *button, + gpointer user_data) +{ + organigramma_struttura_allegato_salva ((OrganigrammaStrutturaAllegato *)user_data, TRUE); +} diff --git a/src/strutturaallegato.h b/src/strutturaallegato.h new file mode 100644 index 0000000..25a4312 --- /dev/null +++ b/src/strutturaallegato.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 __ORGANIGRAMMA_STRUTTURA_ALLEGATO_H__ +#define __ORGANIGRAMMA_STRUTTURA_ALLEGATO_H__ + +#include +#include + +#include + +#include "commons.h" + +G_BEGIN_DECLS + + +#define TYPE_ORGANIGRAMMA_STRUTTURA_ALLEGATO (organigramma_struttura_allegato_get_type ()) +#define ORGANIGRAMMA_STRUTTURA_ALLEGATO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ORGANIGRAMMA_STRUTTURA_ALLEGATO, OrganigrammaStrutturaAllegato)) +#define ORGANIGRAMMA_STRUTTURA_ALLEGATO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ORGANIGRAMMA_STRUTTURA_ALLEGATO, OrganigrammaStrutturaAllegatoClass)) +#define IS_ORGANIGRAMMA_STRUTTURA_ALLEGATO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ORGANIGRAMMA_STRUTTURA_ALLEGATO)) +#define IS_ORGANIGRAMMA_STRUTTURA_ALLEGATO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ORGANIGRAMMA_STRUTTURA_ALLEGATO)) +#define ORGANIGRAMMA_STRUTTURA_ALLEGATO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ORGANIGRAMMA_STRUTTURA_ALLEGATO, OrganigrammaStrutturaAllegatoClass)) + + +typedef struct _OrganigrammaStrutturaAllegato OrganigrammaStrutturaAllegato; +typedef struct _OrganigrammaStrutturaAllegatoClass OrganigrammaStrutturaAllegatoClass; + +struct _OrganigrammaStrutturaAllegato + { + GObject parent; + }; + +struct _OrganigrammaStrutturaAllegatoClass + { + GObjectClass parent_class; + + guint aggiornato_signal_id; + }; + +GType organigramma_struttura_allegato_get_type (void) G_GNUC_CONST; + +OrganigrammaStrutturaAllegato *organigramma_struttura_allegato_new (OrganigrammaCommons *commons, guint id, guint id_strutture); + +GtkWidget *organigramma_struttura_allegato_get_widget (OrganigrammaStrutturaAllegato *organigramma_struttura_allegato); + + +G_END_DECLS + +#endif /* __ORGANIGRAMMA_STRUTTURA_ALLEGATO_H__ */