From 3540b39eab22f03db038a801dfedfbcf5d21bba4 Mon Sep 17 00:00:00 2001 From: Andrea Zagli Date: Sun, 21 Feb 2016 12:23:51 +0100 Subject: [PATCH] Started tables "segnalazioni" and "segnalazione_allegati". --- data/bcity_be/form/Makefile.am | 4 +- data/bcity_be/form/segnalazione.form | 39 + data/bcity_be/form/segnalazioneallegato.form | 51 ++ data/bcity_be/gui/bcity_be.ui | 823 ++++++++++++++++++- data/bcity_be/query_editor/Makefile.am | 3 +- data/bcity_be/query_editor/segnalazioni.xml | 41 + doc/bcity_be/db/bcity.sql | 31 +- src/Makefile.am | 10 +- src/main.c | 19 +- src/segnalazione.c | 733 +++++++++++++++++ src/segnalazione.h | 66 ++ src/segnalazioneallegato.c | 466 +++++++++++ src/segnalazioneallegato.h | 66 ++ src/segnalazioni.c | 614 ++++++++++++++ src/segnalazioni.h | 66 ++ src/segnalazioniqe.c | 368 +++++++++ src/segnalazioniqe.h | 66 ++ 17 files changed, 3452 insertions(+), 14 deletions(-) create mode 100644 data/bcity_be/form/segnalazione.form create mode 100644 data/bcity_be/form/segnalazioneallegato.form create mode 100644 data/bcity_be/query_editor/segnalazioni.xml create mode 100644 src/segnalazione.c create mode 100644 src/segnalazione.h create mode 100644 src/segnalazioneallegato.c create mode 100644 src/segnalazioneallegato.h create mode 100644 src/segnalazioni.c create mode 100644 src/segnalazioni.h create mode 100644 src/segnalazioniqe.c create mode 100644 src/segnalazioniqe.h diff --git a/data/bcity_be/form/Makefile.am b/data/bcity_be/form/Makefile.am index edac7ab..79ceade 100644 --- a/data/bcity_be/form/Makefile.am +++ b/data/bcity_be/form/Makefile.am @@ -1,6 +1,8 @@ formdir = $(datadir)/$(PACKAGE)/form form_DATA = \ - categoria.form + categoria.form \ + segnalazione.form \ + segnalazioneallegato.form EXTRA_DIST = $(form_DATA) diff --git a/data/bcity_be/form/segnalazione.form b/data/bcity_be/form/segnalazione.form new file mode 100644 index 0000000..770b17d --- /dev/null +++ b/data/bcity_be/form/segnalazione.form @@ -0,0 +1,39 @@ + + + + + id + integer + TRUE + label53 + + + + + id_categorie + integer + zakgtkdecoder5 + + + + 0 + + + + descrizione + string + entry16 + + + + + + + note + string + textview5 + + + + + diff --git a/data/bcity_be/form/segnalazioneallegato.form b/data/bcity_be/form/segnalazioneallegato.form new file mode 100644 index 0000000..ee7bd68 --- /dev/null +++ b/data/bcity_be/form/segnalazioneallegato.form @@ -0,0 +1,51 @@ + + + + + id + integer + TRUE + label65 + + + + + id_articoli + integer + label70 + + + + + titolo + string + entry21 + + + + + + descrizione + string + entry19 + + + + + data_documento + date + entry20 + + %d/%m/%Y + %d/%m/%Y + + + + note + string + textview6 + + + + + diff --git a/data/bcity_be/gui/bcity_be.ui b/data/bcity_be/gui/bcity_be.ui index 32c2de3..6cf8f1d 100644 --- a/data/bcity_be/gui/bcity_be.ui +++ b/data/bcity_be/gui/bcity_be.ui @@ -382,7 +382,7 @@ False _Segnalazioni True - + @@ -511,4 +511,825 @@ + + False + Segnalazione - B-City + True + center-on-parent + 550 + True + + + True + False + 5 + vertical + 5 + + + True + False + True + True + 5 + 5 + + + True + False + ID + 0 + + + 0 + 0 + + + + + True + False + True + lbl_id + 0 + + + 1 + 0 + + + + + True + False + + + 1 + 1 + + + + + True + False + Categoria + 0 + + + 0 + 1 + + + + + True + False + Descrizione + 0 + + + 0 + 2 + + + + + True + True + True + 100 + • + False + False + + + 1 + 2 + + + + + True + True + True + True + + + True + True + 5 + 5 + etched-in + + + True + True + + + + + + + True + False + Note + + + False + + + + + True + False + 5 + 5 + 5 + + + True + True + etched-in + + + + + + True + True + 0 + + + + + True + False + vertical + 5 + start + + + gtk-new + False + True + True + True + True + + + False + False + 0 + + + + + gtk-edit + False + True + True + True + True + + + False + False + 1 + + + + + gtk-delete + False + True + True + True + True + + + False + False + 2 + + + + + gtk-open + True + True + True + True + + + True + True + 3 + + + + + False + True + 1 + + + + + 1 + + + + + True + False + Allegati + + + 1 + False + + + + + 0 + 8 + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + True + True + 0 + + + + + True + False + True + 5 + end + + + gtk-cancel + True + True + True + True + + + False + False + 0 + + + + + gtk-save + True + True + True + True + + + False + False + 1 + + + + + Salva e _chiudi + True + True + True + True + + + False + False + 2 + + + + + False + True + 1 + + + + + + + False + Allegato della segnalazione - B-City + True + 500 + 300 + True + + + True + False + 5 + vertical + 5 + + + True + False + True + True + 5 + 5 + + + False + True + lbl_id + + + 0 + 5 + + + + + True + False + Descrizione + 0 + + + 0 + 1 + + + + + True + True + True + 255 + • + True + False + False + + + 1 + 1 + + + + + True + True + True + True + etched-in + + + True + True + + + + + 1 + 3 + + + + + True + True + True + 10 + • + True + False + False + + + 1 + 2 + + + + + True + True + True + 255 + • + True + False + False + + + 1 + 0 + + + + + True + False + True + 0 + + + True + False + True + 5 + 5 + 5 + 5 + + + + + + + + True + False + <b>File</b> + True + + + + + 0 + 4 + 2 + + + + + False + True + True + lbl_id_segnalazioni + + + 1 + 5 + + + + + True + False + Titolo + 0 + + + 0 + 0 + + + + + True + False + Data documento + 0 + + + 0 + 2 + + + + + True + False + Note + 0 + 0 + + + 0 + 3 + + + + + True + True + 0 + + + + + True + False + True + 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 + + + True + True + 2 + + + + + False + True + 1 + + + + + + + False + Segnalazioni - B-City + True + center-on-parent + 550 + 400 + True + + + True + False + 5 + vertical + 5 + + + True + False + <b>Segnalazioni</b> + True + + + False + True + 0 + + + + + True + True + etched-in + + + + + + 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 + + + True + True + 3 + + + + + gtk-cancel + True + True + True + True + + + False + False + 4 + + + + + gtk-ok + True + True + True + True + + + False + False + 5 + + + + + False + True + 2 + + + + + + + False + Ricerca segnalazioni - B-City + True + center-on-parent + 550 + True + + + True + False + 5 + vertical + 5 + + + + + + True + False + + + False + True + 1 + + + + + True + False + True + 5 + end + + + gtk-cancel + True + True + True + True + + + False + False + 0 + + + + + gtk-ok + True + True + True + True + + + False + False + 1 + + + + + False + True + 2 + + + + + diff --git a/data/bcity_be/query_editor/Makefile.am b/data/bcity_be/query_editor/Makefile.am index 095c2f2..45f79af 100644 --- a/data/bcity_be/query_editor/Makefile.am +++ b/data/bcity_be/query_editor/Makefile.am @@ -1,5 +1,6 @@ queryeditordir = $(datadir)/$(PACKAGE)/queryeditor -queryeditor_DATA = +queryeditor_DATA = \ + segnalazioni.xml EXTRA_DIST = $(queryeditor_DATA) diff --git a/data/bcity_be/query_editor/segnalazioni.xml b/data/bcity_be/query_editor/segnalazioni.xml new file mode 100644 index 0000000..e0720ad --- /dev/null +++ b/data/bcity_be/query_editor/segnalazioni.xml @@ -0,0 +1,41 @@ + + + + + segnalazioni + Segnalazioni +
+
+ + + + id + ID + integer + true + equal + + + id_categorie + Categoria + integer + true + equal + + + + descrizione + Descrizione + text + true + string + + + note + Note + text + string + + + +
diff --git a/doc/bcity_be/db/bcity.sql b/doc/bcity_be/db/bcity.sql index 3d69a49..9d4efc7 100644 --- a/doc/bcity_be/db/bcity.sql +++ b/doc/bcity_be/db/bcity.sql @@ -40,6 +40,25 @@ CREATE TABLE configurazioni ( ); +-- +-- Name: segnalazione_allegati; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE segnalazione_allegati ( + id integer NOT NULL, + id_segnalazioni 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 oid, + data_file timestamp without time zone, + dimensione_file bigint, + status character varying(1) DEFAULT ''::character varying +); + + -- -- Name: segnalazioni; Type: TABLE; Schema: public; Owner: - -- @@ -50,7 +69,9 @@ CREATE TABLE segnalazioni ( latitudine double precision, longitudine double precision, id_categorie integer DEFAULT 0, - status character varying(1) DEFAULT ''::character varying + status character varying(1) DEFAULT ''::character varying, + descrizione character varying(255) DEFAULT ''::character varying, + note text DEFAULT ''::text ); @@ -82,6 +103,14 @@ ALTER TABLE ONLY configurazioni ADD CONSTRAINT configurazioni_pkey PRIMARY KEY (id); +-- +-- Name: segnalazione_allegati_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY segnalazione_allegati + ADD CONSTRAINT segnalazione_allegati_pkey PRIMARY KEY (id); + + -- -- Name: segnalazioni_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- diff --git a/src/Makefile.am b/src/Makefile.am index 1ebbf91..9482119 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -28,7 +28,15 @@ bcity_be_SOURCES = \ categorie.c \ categorie.h \ commons.h \ - main.c + main.c \ + segnalazione.c \ + segnalazione.h \ + segnalazioneallegato.c \ + segnalazioneallegato.h \ + segnalazioni.c \ + segnalazioni.h \ + segnalazioniqe.c \ + segnalazioniqe.h if PLATFORM_WIN32 EXTRALDFLAGS=-mconsole -mwindows diff --git a/src/main.c b/src/main.c index 6cebf23..aafe958 100644 --- a/src/main.c +++ b/src/main.c @@ -37,6 +37,7 @@ #include "commons.h" #include "categorie.h" +#include "segnalazioni.h" static BCityBECommons *commons; @@ -129,18 +130,18 @@ on_mnu_tabelle_categorie_activate (GtkMenuItem *menuitem, main_set_vbx_body_child (G_OBJECT (a), vbx); } -/* G_MODULE_EXPORT void */ -/* on_mnu_view_ordini_activate (GtkMenuItem *menuitem, */ -/* gpointer user_data) */ -/* { */ -/* GtkWidget *vbx; */ +G_MODULE_EXPORT void +on_mnu_view_segnalazioni_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + GtkWidget *vbx; -/* Ordini *a = ordini_new (commons, FALSE); */ + Segnalazioni *a = segnalazioni_new (commons, FALSE); -/* vbx = ordini_get_widget (a); */ + vbx = segnalazioni_get_widget (a); -/* main_set_vbx_body_child (G_OBJECT (a), vbx); */ -/* } */ + main_set_vbx_body_child (G_OBJECT (a), vbx); +} G_MODULE_EXPORT void on_mnu_help_about_activate (GtkMenuItem *menuitem, diff --git a/src/segnalazione.c b/src/segnalazione.c new file mode 100644 index 0000000..16b452d --- /dev/null +++ b/src/segnalazione.c @@ -0,0 +1,733 @@ +/* + * Copyright (C) 2016 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 + * + */ + +#ifdef HAVE_CONFIG_H + #include +#endif + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "categoria.h" +#include "categorie.h" +#include "segnalazione.h" +#include "segnalazioneallegato.h" + +static void segnalazione_class_init (SegnalazioneClass *klass); +static void segnalazione_init (Segnalazione *segnalazione); + +static void segnalazione_gestione_permessi (Segnalazione *segnalazione); + +static void segnalazione_carica (Segnalazione *segnalazione); +static void segnalazione_salva (Segnalazione *segnalazione, gboolean chiudi); + +static void segnalazione_carica_allegati (Segnalazione *segnalazione); + +static void segnalazione_allegati_modifica (Segnalazione *segnalazione); + +static gboolean segnalazione_conferma_chiusura (Segnalazione *segnalazione); + +static void segnalazione_on_categoria_selezionato (gpointer instance, guint id, gpointer user_data); +static gchar *segnalazione_on_categoria_decode (gpointer instance, gchar *key, gpointer user_data); + +static void segnalazione_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static void segnalazione_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec); + +static void segnalazione_on_allegati_aggiornato (gpointer instance, gpointer user_data); + +static gboolean segnalazione_on_key_release_event (GtkWidget *widget, + GdkEventKey *event, + gpointer user_data); +static gboolean segnalazione_on_w_segnalazione_delete_event (GtkWidget *widget, + GdkEvent *event, + gpointer user_data); + +static void segnalazione_on_btn_categoria_browse_clicked (GtkButton *button, + gpointer user_data); + +static void segnalazione_on_btn_allegati_nuovo_clicked (GtkButton *button, + gpointer user_data); +static void segnalazione_on_btn_allegati_modifica_clicked (GtkButton *button, + gpointer user_data); +static void segnalazione_on_btn_allegati_elimina_clicked (GtkButton *button, + gpointer user_data); +static void segnalazione_on_btn_allegati_apri_clicked (GtkButton *button, + gpointer user_data); +static void segnalazione_on_trv_allegati_row_activated (GtkTreeView *tree_view, + GtkTreePath *tree_path, + GtkTreeViewColumn *column, + gpointer user_data); + +static void segnalazione_on_btn_annulla_clicked (GtkButton *button, + gpointer user_data); +static void segnalazione_on_btn_salva_clicked (GtkButton *button, + gpointer user_data); +static void segnalazione_on_btn_salvachiudi_clicked (GtkButton *button, + gpointer user_data); + +#define SEGNALAZIONE_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TYPE_SEGNALAZIONE, SegnalazionePrivate)) + +typedef struct _SegnalazionePrivate SegnalazionePrivate; +struct _SegnalazionePrivate + { + BCityBECommons *commons; + + ZakFormGtkForm *form; + ZakFormGdaexProvider *form_provider; + + GtkWidget *w; + + GObject *lbl_id; + + GdaExGrid *grid_allegati; + GtkWidget *wgrid_allegati; + GtkTreeSelection *selection_allegati; + GtkTreeStore *tstore_allegati; + + gint id; + }; + +G_DEFINE_TYPE (Segnalazione, segnalazione, G_TYPE_OBJECT) + +static void +segnalazione_class_init (SegnalazioneClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (object_class, sizeof (SegnalazionePrivate)); + + object_class->set_property = segnalazione_set_property; + object_class->get_property = segnalazione_get_property; + + /** + * Segnalazione::aggiornato: + * @iva: + * + */ + 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 +segnalazione_init (Segnalazione *segnalazione) +{ + SegnalazionePrivate *priv = SEGNALAZIONE_GET_PRIVATE (segnalazione); +} + +/** + * segnalazione_new: + * @commons: + * @id: + * + * Returns: the newly created #Segnalazione object. + */ +Segnalazione +*segnalazione_new (BCityBECommons *commons, gint id) +{ + GError *error; + + GdaExGridColumn *gcol; + + Segnalazione *a = SEGNALAZIONE (g_object_new (segnalazione_get_type (), NULL)); + + SegnalazionePrivate *priv = SEGNALAZIONE_GET_PRIVATE (a); + + priv->commons = commons; + + error = NULL; + gtk_builder_add_objects_from_file (priv->commons->gtkbuilder, priv->commons->guifile, + g_strsplit ("w_segnalazione", "|", -1), + &error); + if (error != NULL) + { + g_warning ("Errore: %s.", error->message); + return NULL; + } + + 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, "segnalazione.form", NULL)); + + priv->form_provider = zak_form_gdaex_provider_new (priv->commons->gdaex, "segnalazioni"); + + priv->w = GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "w_segnalazione")); + + priv->lbl_id = gtk_builder_get_object (priv->commons->gtkbuilder, + "label53"); + + /* creo la gdaexgrid degli allegati */ + priv->grid_allegati = gdaex_grid_new (); + gdaex_grid_set_solipa (priv->grid_allegati, priv->commons->solipa); + gdaex_grid_set_title (priv->grid_allegati, "Allegati"); + + gcol = gdaex_grid_column_new ("ID", "id", G_TYPE_INT, FALSE, TRUE, TRUE, TRUE, 0); + gdaex_grid_add_column (priv->grid_allegati, gcol); + + gcol = gdaex_grid_column_new_defaults ("Titolo", "titolo", G_TYPE_STRING); + gdaex_grid_add_column (priv->grid_allegati, gcol); + + gcol = gdaex_grid_column_new_defaults ("Descrizione", "descrizione", G_TYPE_STRING); + gdaex_grid_add_column (priv->grid_allegati, gcol); + + priv->wgrid_allegati = gdaex_grid_get_widget (priv->grid_allegati); + gtk_container_add (GTK_CONTAINER (gtk_builder_get_object (priv->commons->gtkbuilder, "scrolledwindow18")), priv->wgrid_allegati); + gtk_widget_show (priv->wgrid_allegati); + + priv->selection_allegati = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->wgrid_allegati)); + priv->tstore_allegati = GTK_TREE_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (priv->wgrid_allegati))); + + g_signal_connect (priv->wgrid_allegati, + "row-activated", G_CALLBACK (segnalazione_on_trv_allegati_row_activated), (gpointer)a); + + g_signal_connect (G_OBJECT (gtk_builder_get_object (priv->commons->gtkbuilder, "button94")), + "clicked", G_CALLBACK (segnalazione_on_btn_allegati_nuovo_clicked), (gpointer)a); + g_signal_connect (G_OBJECT (gtk_builder_get_object (priv->commons->gtkbuilder, "button95")), + "clicked", G_CALLBACK (segnalazione_on_btn_allegati_modifica_clicked), (gpointer)a); + g_signal_connect (G_OBJECT (gtk_builder_get_object (priv->commons->gtkbuilder, "button96")), + "clicked", G_CALLBACK (segnalazione_on_btn_allegati_elimina_clicked), (gpointer)a); + g_signal_connect (G_OBJECT (gtk_builder_get_object (priv->commons->gtkbuilder, "button97")), + "clicked", G_CALLBACK (segnalazione_on_btn_allegati_apri_clicked), (gpointer)a); + + g_signal_connect (priv->w, + "key-release-event", G_CALLBACK (segnalazione_on_key_release_event), (gpointer)a); + g_signal_connect (priv->w, + "delete-event", G_CALLBACK (segnalazione_on_w_segnalazione_delete_event), (gpointer)a); + + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "zakgtkdecoder5"), + "btn-browse-clicked", G_CALLBACK (segnalazione_on_btn_categoria_browse_clicked), (gpointer)a); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "zakgtkdecoder5"), + "decode", G_CALLBACK (segnalazione_on_categoria_decode), (gpointer)a); + + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button80"), + "clicked", G_CALLBACK (segnalazione_on_btn_annulla_clicked), (gpointer)a); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button81"), + "clicked", G_CALLBACK (segnalazione_on_btn_salva_clicked), (gpointer)a); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button82"), + "clicked", G_CALLBACK (segnalazione_on_btn_salvachiudi_clicked), (gpointer)a); + + zak_form_form_clear (ZAK_FORM_FORM (priv->form)); + + priv->id = id; + + if (priv->id == 0) + { + gtk_label_set_text (GTK_LABEL (priv->lbl_id), ""); + + zak_form_form_set_as_original (ZAK_FORM_FORM (priv->form)); + + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "hbox6")), FALSE); + } + else + { + gtk_label_set_text (GTK_LABEL (priv->lbl_id), g_strdup_printf ("%d", priv->id)); + segnalazione_carica (a); + } + + segnalazione_gestione_permessi (a); + + return a; +} + +/** + * segnalazione_get_widget: + * @iva: + * + */ +GtkWidget +*segnalazione_get_widget (Segnalazione *segnalazione) +{ + SegnalazionePrivate *priv = SEGNALAZIONE_GET_PRIVATE (segnalazione); + + return priv->w; +} + +/** + * segnalazione_show: + * @segnalazione: + * @parent: + */ +GtkWidget +*segnalazione_show (Segnalazione *segnalazione, GtkWindow *parent) +{ + GtkWidget *w; + + SegnalazionePrivate *priv = SEGNALAZIONE_GET_PRIVATE (segnalazione); + + w = segnalazione_get_widget (segnalazione); + if (parent != NULL) + { + gtk_window_set_transient_for (GTK_WINDOW (w), parent); + } + gtk_widget_show_all (w); + + return w; +} + +/* PRIVATE */ +static void +segnalazione_gestione_permessi (Segnalazione *segnalazione) +{ + SegnalazionePrivate *priv = SEGNALAZIONE_GET_PRIVATE (segnalazione); + + ZakAuthoIResource *ires1; + + ires1 = zak_autho_get_resource_from_id (priv->commons->autoz, "BCityBE_rw"); + if (!zak_autho_is_allowed (priv->commons->autoz, priv->commons->role_utente, ires1, FALSE)) + { + zak_form_form_set_editable (ZAK_FORM_FORM (priv->form), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "button81")), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "button82")), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "button94")), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "button96")), FALSE); + } +} + +static void +segnalazione_carica (Segnalazione *segnalazione) +{ + SegnalazionePrivate *priv = SEGNALAZIONE_GET_PRIVATE (segnalazione); + + if (zak_form_form_load (ZAK_FORM_FORM (priv->form), ZAK_FORM_IPROVIDER (priv->form_provider))) + { + segnalazione_carica_allegati (segnalazione); + } +} + +static void +segnalazione_carica_allegati (Segnalazione *segnalazione) +{ + SegnalazionePrivate *priv = SEGNALAZIONE_GET_PRIVATE (segnalazione); + + gchar *sql; + + gtk_tree_store_clear (priv->tstore_allegati); + + sql = g_strdup_printf ("SELECT c.id, c.titolo, c.descrizione" + " FROM segnalazione_allegati AS c" + " WHERE c.status <> 'E'" + " AND c.id_segnalazioni = %d" + " ORDER BY c.titolo, c.descrizione", + priv->id); + + gdaex_grid_fill_from_sql (priv->grid_allegati, + priv->commons->gdaex, + sql, + NULL); + + g_free (sql); +} + +static void +segnalazione_salva (Segnalazione *segnalazione, gboolean chiudi) +{ + gboolean ret; + + SegnalazioneClass *klass = SEGNALAZIONE_GET_CLASS (segnalazione); + SegnalazionePrivate *priv = SEGNALAZIONE_GET_PRIVATE (segnalazione); + + if (!zak_form_gtk_form_is_valid (priv->form, priv->w)) + { + return; + } + + if (priv->id == 0) + { + guint new_id; + + new_id = gdaex_get_new_id (priv->commons->gdaex, + "segnalazioni", + "id", + NULL); + + gtk_label_set_text (GTK_LABEL (priv->lbl_id), g_strdup_printf ("%d", new_id)); + + ret = zak_form_form_insert (ZAK_FORM_FORM (priv->form), ZAK_FORM_IPROVIDER (priv->form_provider)); + } + else + { + ret = zak_form_form_update (ZAK_FORM_FORM (priv->form), ZAK_FORM_IPROVIDER (priv->form_provider)); + } + + if (ret) + { + g_signal_emit (segnalazione, klass->aggiornato_signal_id, 0); + + 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->lbl_id)), NULL, 10); + } + + solipa_message_dialog (priv->w, + GTK_MESSAGE_INFO, + GTK_BUTTONS_OK, + "Salvataggio eseguito con successo."); + + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "hbox6")), TRUE); + + if (chiudi) + { + gtk_widget_destroy (priv->w); + g_object_unref (segnalazione); + } + } + else + { + if (priv->id == 0) + { + gtk_label_set_text (GTK_LABEL (priv->lbl_id), ""); + } + + solipa_message_dialog (priv->w, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Errore durante il salvataggio."); + } +} + +static void +segnalazione_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) +{ + Segnalazione *segnalazione = SEGNALAZIONE (object); + SegnalazionePrivate *priv = SEGNALAZIONE_GET_PRIVATE (segnalazione); + + switch (property_id) + { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +segnalazione_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) +{ + Segnalazione *segnalazione = SEGNALAZIONE (object); + SegnalazionePrivate *priv = SEGNALAZIONE_GET_PRIVATE (segnalazione); + + switch (property_id) + { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +segnalazione_allegati_modifica (Segnalazione *segnalazione) +{ + GtkTreeIter iter; + + SegnalazionePrivate *priv = SEGNALAZIONE_GET_PRIVATE (segnalazione); + + if (gtk_tree_selection_get_selected (priv->selection_allegati, NULL, &iter)) + { + gchar *id; + + gtk_tree_model_get (GTK_TREE_MODEL (priv->tstore_allegati), &iter, + 0, &id, + -1); + + SegnalazioneAllegato *a = segnalazione_allegato_new (priv->commons, strtol (id, NULL, 10), 0); + + g_signal_connect (G_OBJECT (a), "aggiornato", + G_CALLBACK (segnalazione_on_allegati_aggiornato), (gpointer)segnalazione); + + segnalazione_allegato_show (a, GTK_WINDOW (priv->w)); + } + else + { + solipa_message_dialog (priv->w, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Occorre prima selezionare un allegato."); + } +} + +static gboolean +segnalazione_conferma_chiusura (Segnalazione *segnalazione) +{ + gboolean ret; + + SegnalazionePrivate *priv = SEGNALAZIONE_GET_PRIVATE (segnalazione); + + ret = TRUE; + if (zak_form_form_is_changed (ZAK_FORM_FORM (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 void +segnalazione_on_allegati_aggiornato (gpointer instance, gpointer user_data) +{ + Segnalazione *segnalazione = (Segnalazione *)user_data; + SegnalazioneClass *klass = SEGNALAZIONE_GET_CLASS (segnalazione); + + segnalazione_carica_allegati (segnalazione); +} + +static gboolean +segnalazione_on_key_release_event (GtkWidget *widget, + GdkEventKey *event, + gpointer user_data) +{ + switch (event->keyval) + { + case GDK_KEY_Escape: + { + SegnalazionePrivate *priv = SEGNALAZIONE_GET_PRIVATE ((Segnalazione *)user_data); + + gtk_button_clicked (GTK_BUTTON (gtk_builder_get_object (priv->commons->gtkbuilder, "button80"))); + return TRUE; + } + } + + return FALSE; +} + +static gboolean +segnalazione_on_w_segnalazione_delete_event (GtkWidget *widget, + GdkEvent *event, + gpointer user_data) +{ + return !segnalazione_conferma_chiusura ((Segnalazione *)user_data); +} + +static void +segnalazione_on_categoria_selezionato (gpointer instance, guint id, gpointer user_data) +{ + Segnalazione *f = (Segnalazione *)user_data; + SegnalazionePrivate *priv = SEGNALAZIONE_GET_PRIVATE (f); + + zak_gtk_decoder_set_key (ZAK_GTK_DECODER (gtk_builder_get_object (priv->commons->gtkbuilder, "zakgtkdecoder5")), + g_strdup_printf ("%d", id)); +} + +static gchar +*segnalazione_on_categoria_decode (gpointer instance, gchar *key, gpointer user_data) +{ + gchar *ret; + + Segnalazione *f = (Segnalazione *)user_data; + SegnalazionePrivate *priv = SEGNALAZIONE_GET_PRIVATE (f); + + if (strtol (key, NULL, 10) > 0) + { + ret = categoria_get_descrizione_with_parent (priv->commons, strtol (key, NULL, 10)); + } + else + { + ret = g_strdup (""); + } + + return ret; +} + +static void +segnalazione_on_btn_categoria_browse_clicked (GtkButton *button, + gpointer user_data) +{ + GtkWidget *w; + + Segnalazione *segnalazione = (Segnalazione *)user_data; + SegnalazionePrivate *priv = SEGNALAZIONE_GET_PRIVATE (segnalazione); + + Categorie *c = categorie_new (priv->commons, TRUE); + + g_signal_connect (G_OBJECT (c), "selezionato", + G_CALLBACK (segnalazione_on_categoria_selezionato), user_data); + + w = categorie_get_widget (c); + gtk_window_set_transient_for (GTK_WINDOW (w), GTK_WINDOW (priv->w)); + gtk_widget_show (w); +} + +static void +segnalazione_on_btn_allegati_nuovo_clicked (GtkButton *button, + gpointer user_data) +{ + Segnalazione *segnalazione = (Segnalazione *)user_data; + + SegnalazionePrivate *priv = SEGNALAZIONE_GET_PRIVATE (segnalazione); + + SegnalazioneAllegato *a = segnalazione_allegato_new (priv->commons, 0, priv->id); + + g_signal_connect (G_OBJECT (a), "aggiornato", + G_CALLBACK (segnalazione_on_allegati_aggiornato), (gpointer)segnalazione); + + segnalazione_allegato_show (a, GTK_WINDOW (priv->w)); +} + +static void +segnalazione_on_btn_allegati_modifica_clicked (GtkButton *button, + gpointer user_data) +{ + segnalazione_allegati_modifica ((Segnalazione *)user_data); +} + +static void +segnalazione_on_btn_allegati_elimina_clicked (GtkButton *button, + gpointer user_data) +{ + GtkTreeIter iter; + + Segnalazione *segnalazione = (Segnalazione *)user_data; + + SegnalazioneClass *klass = SEGNALAZIONE_GET_CLASS (segnalazione); + SegnalazionePrivate *priv = SEGNALAZIONE_GET_PRIVATE (segnalazione); + + if (gtk_tree_selection_get_selected (priv->selection_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) + { + gchar *id; + + gtk_tree_model_get (GTK_TREE_MODEL (priv->tstore_allegati), &iter, + 0, &id, + -1); + + gdaex_execute (priv->commons->gdaex, + g_strdup_printf ("UPDATE segnalazione_allegati" + " SET status = 'E'" + " WHERE id = %d", + strtol (id, NULL, 10))); + + segnalazione_carica_allegati (segnalazione); + } + } + else + { + solipa_message_dialog (priv->w, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Occorre prima selezionare un allegato."); + } +} + +static void +segnalazione_on_btn_allegati_apri_clicked (GtkButton *button, + gpointer user_data) +{ + GtkTreeIter iter; + + Segnalazione *segnalazione = (Segnalazione *)user_data; + + SegnalazioneClass *klass = SEGNALAZIONE_GET_CLASS (segnalazione); + SegnalazionePrivate *priv = SEGNALAZIONE_GET_PRIVATE (segnalazione); + + if (gtk_tree_selection_get_selected (priv->selection_allegati, NULL, &iter)) + { + gchar *id; + gchar *sql; + const gchar *filename; + + gtk_tree_model_get (GTK_TREE_MODEL (priv->tstore_allegati), &iter, + 0, &id, + -1); + + sql = g_strdup_printf ("SELECT percorso, contenuto FROM segnalazione_allegati WHERE id = %s", id); + filename = gdaex_get_blob (priv->commons->gdaex, sql, "percorso", "contenuto"); + if (filename == NULL) + { + solipa_message_dialog (priv->w, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Impossibile aprire l'allegato selezionato."); + } + else + { + solipa_allegato_apri_allegato (GTK_WINDOW (priv->w), filename); + } + g_free (sql); + } + else + { + solipa_message_dialog (priv->w, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Occorre prima selezionare un allegato."); + } +} + +static void +segnalazione_on_trv_allegati_row_activated (GtkTreeView *tree_view, + GtkTreePath *tree_path, + GtkTreeViewColumn *column, + gpointer user_data) +{ + segnalazione_allegati_modifica ((Segnalazione *)user_data); +} + +static void +segnalazione_on_btn_annulla_clicked (GtkButton *button, + gpointer user_data) +{ + Segnalazione *segnalazione = (Segnalazione *)user_data; + SegnalazionePrivate *priv = SEGNALAZIONE_GET_PRIVATE (segnalazione); + + if (segnalazione_conferma_chiusura (segnalazione)) gtk_widget_destroy (priv->w); +} + +static void +segnalazione_on_btn_salva_clicked (GtkButton *button, + gpointer user_data) +{ + segnalazione_salva ((Segnalazione *)user_data, FALSE); +} + +static void +segnalazione_on_btn_salvachiudi_clicked (GtkButton *button, + gpointer user_data) +{ + segnalazione_salva ((Segnalazione *)user_data, TRUE); +} diff --git a/src/segnalazione.h b/src/segnalazione.h new file mode 100644 index 0000000..e2811fb --- /dev/null +++ b/src/segnalazione.h @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2016 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 __SEGNALAZIONE_H__ +#define __SEGNALAZIONE_H__ + +#include +#include + +#include + +#include "commons.h" + +G_BEGIN_DECLS + + +#define TYPE_SEGNALAZIONE (segnalazione_get_type ()) +#define SEGNALAZIONE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SEGNALAZIONE, Segnalazione)) +#define SEGNALAZIONE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SEGNALAZIONE, SegnalazioneClass)) +#define IS_SEGNALAZIONE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SEGNALAZIONE)) +#define IS_SEGNALAZIONE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SEGNALAZIONE)) +#define SEGNALAZIONE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SEGNALAZIONE, SegnalazioneClass)) + + +typedef struct _Segnalazione Segnalazione; +typedef struct _SegnalazioneClass SegnalazioneClass; + +struct _Segnalazione + { + GObject parent; + }; + +struct _SegnalazioneClass + { + GObjectClass parent_class; + + guint aggiornato_signal_id; + }; + +GType segnalazione_get_type (void) G_GNUC_CONST; + +Segnalazione *segnalazione_new (BCityBECommons *commons, gint id); + +GtkWidget *segnalazione_get_widget (Segnalazione *iva); +GtkWidget *segnalazione_show (Segnalazione *segnalazione, GtkWindow *parent); + + +G_END_DECLS + +#endif /* __SEGNALAZIONE_H__ */ diff --git a/src/segnalazioneallegato.c b/src/segnalazioneallegato.c new file mode 100644 index 0000000..39a86d5 --- /dev/null +++ b/src/segnalazioneallegato.c @@ -0,0 +1,466 @@ +/* + * Copyright (C) 2016 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 + * + */ + +#ifdef HAVE_CONFIG_H + #include +#endif + +#include + +#include +#include +#include +#include + +#include "segnalazioneallegato.h" + +static void segnalazione_allegato_class_init (SegnalazioneAllegatoClass *klass); +static void segnalazione_allegato_init (SegnalazioneAllegato *segnalazione_allegato); + +static void segnalazione_allegato_gestione_permessi (SegnalazioneAllegato *segnalazione_allegato); + +static void segnalazione_allegato_carica (SegnalazioneAllegato *segnalazione_allegato); +static void segnalazione_allegato_salva (SegnalazioneAllegato *segnalazione_allegato, gboolean chiudi); + +static gboolean segnalazione_allegato_conferma_chiusura (SegnalazioneAllegato *segnalazione_allegato); + +static void segnalazione_allegato_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static void segnalazione_allegato_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec); + +static gboolean segnalazione_allegato_on_key_release_event (GtkWidget *widget, + GdkEventKey *event, + gpointer user_data); +static gboolean segnalazione_allegato_on_w_segnalazione_allegato_delete_event (GtkWidget *widget, + GdkEvent *event, + gpointer user_data); + +static void segnalazione_allegato_on_btn_annulla_clicked (GtkButton *button, + gpointer user_data); +static void segnalazione_allegato_on_btn_salva_clicked (GtkButton *button, + gpointer user_data); +static void segnalazione_allegato_on_btn_salvachiudi_clicked (GtkButton *button, + gpointer user_data); + +#define SEGNALAZIONE_ALLEGATO_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TYPE_SEGNALAZIONE_ALLEGATO, SegnalazioneAllegatoPrivate)) + +typedef struct _SegnalazioneAllegatoPrivate SegnalazioneAllegatoPrivate; +struct _SegnalazioneAllegatoPrivate + { + BCityBECommons *commons; + + ZakFormGtkForm *form; + ZakFormGdaexProvider *form_provider; + + GtkWidget *w; + + GObject *lbl_id; + GObject *lbl_id_articoli; + + SolipaAllegato *sallegato; + + gint id; + }; + +G_DEFINE_TYPE (SegnalazioneAllegato, segnalazione_allegato, G_TYPE_OBJECT) + +static void +segnalazione_allegato_class_init (SegnalazioneAllegatoClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (object_class, sizeof (SegnalazioneAllegatoPrivate)); + + object_class->set_property = segnalazione_allegato_set_property; + object_class->get_property = segnalazione_allegato_get_property; + + /** + * SegnalazioneAllegato::aggiornato: + * @segnalazione_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 +segnalazione_allegato_init (SegnalazioneAllegato *segnalazione_allegato) +{ + SegnalazioneAllegatoPrivate *priv = SEGNALAZIONE_ALLEGATO_GET_PRIVATE (segnalazione_allegato); +} + +/** + * segnalazione_allegato_new: + * @commons: + * @id: + * @id_fornitori: + * + * Returns: the newly created #SegnalazioneAllegato object. + */ +SegnalazioneAllegato +*segnalazione_allegato_new (BCityBECommons *commons, gint id, gint id_fornitori) +{ + GError *error; + + SegnalazioneAllegato *a = SEGNALAZIONE_ALLEGATO (g_object_new (segnalazione_allegato_get_type (), NULL)); + + SegnalazioneAllegatoPrivate *priv = SEGNALAZIONE_ALLEGATO_GET_PRIVATE (a); + + priv->commons = commons; + + error = NULL; + gtk_builder_add_objects_from_file (priv->commons->gtkbuilder, priv->commons->guifile, + g_strsplit ("w_segnalazione_allegato", "|", -1), + &error); + if (error != NULL) + { + g_warning ("Errore: %s.", error->message); + return NULL; + } + + 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, "segnalazioneallegato.form", NULL)); + + priv->form_provider = zak_form_gdaex_provider_new (priv->commons->gdaex, "segnalazione_allegati"); + + priv->w = GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "w_segnalazione_allegato")); + + priv->lbl_id = gtk_builder_get_object (priv->commons->gtkbuilder, + "label65"); + priv->lbl_id_articoli = gtk_builder_get_object (priv->commons->gtkbuilder, + "label70"); + + g_signal_connect (priv->w, + "key-release-event", G_CALLBACK (segnalazione_allegato_on_key_release_event), (gpointer)a); + g_signal_connect (priv->w, + "delete-event", G_CALLBACK (segnalazione_allegato_on_w_segnalazione_allegato_delete_event), (gpointer)a); + + priv->sallegato = solipa_allegato_new (commons->solipa); + if (priv->sallegato != NULL) + { + solipa_allegato_add_to_zakformgtk (priv->sallegato, priv->form, + "percorso", "data_file", "dimensione_file"); + gtk_container_add (GTK_CONTAINER (gtk_builder_get_object (priv->commons->gtkbuilder, "alignment1")), + solipa_allegato_get_widget (priv->sallegato)); + solipa_allegato_con_salva_in_db (priv->sallegato, FALSE); + } + + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button91"), + "clicked", G_CALLBACK (segnalazione_allegato_on_btn_annulla_clicked), (gpointer)a); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button92"), + "clicked", G_CALLBACK (segnalazione_allegato_on_btn_salva_clicked), (gpointer)a); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button93"), + "clicked", G_CALLBACK (segnalazione_allegato_on_btn_salvachiudi_clicked), (gpointer)a); + + zak_form_form_clear (ZAK_FORM_FORM (priv->form)); + + priv->id = id; + + if (priv->id == 0) + { + gtk_label_set_text (GTK_LABEL (priv->lbl_id), ""); + gtk_label_set_text (GTK_LABEL (priv->lbl_id_articoli), g_strdup_printf ("%d", id_fornitori)); + + zak_form_form_set_as_original (ZAK_FORM_FORM (priv->form)); + } + else + { + gtk_label_set_text (GTK_LABEL (priv->lbl_id), g_strdup_printf ("%d", priv->id)); + segnalazione_allegato_carica (a); + } + + segnalazione_allegato_gestione_permessi (a); + + return a; +} + +/** + * segnalazione_allegato_get_widget: + * @segnalazione_allegato: + * + */ +GtkWidget +*segnalazione_allegato_get_widget (SegnalazioneAllegato *segnalazione_allegato) +{ + SegnalazioneAllegatoPrivate *priv = SEGNALAZIONE_ALLEGATO_GET_PRIVATE (segnalazione_allegato); + + return priv->w; +} + +/** + * segnalazione_allegato_show: + * @segnalazione_allegato: + * @parent: + */ +GtkWidget +*segnalazione_allegato_show (SegnalazioneAllegato *segnalazione_allegato, GtkWindow *parent) +{ + GtkWidget *w; + + SegnalazioneAllegatoPrivate *priv = SEGNALAZIONE_ALLEGATO_GET_PRIVATE (segnalazione_allegato); + + w = segnalazione_allegato_get_widget (segnalazione_allegato); + if (parent != NULL) + { + gtk_window_set_transient_for (GTK_WINDOW (w), parent); + } + gtk_widget_show_all (w); + + return w; +} + +/* PRIVATE */ +static void +segnalazione_allegato_gestione_permessi (SegnalazioneAllegato *segnalazione_allegato) +{ + SegnalazioneAllegatoPrivate *priv = SEGNALAZIONE_ALLEGATO_GET_PRIVATE (segnalazione_allegato); + + ZakAuthoIResource *ires1; + + ires1 = zak_autho_get_resource_from_id (priv->commons->autoz, "BCityBE_rw"); + if (!zak_autho_is_allowed (priv->commons->autoz, priv->commons->role_utente, ires1, FALSE)) + { + zak_form_form_set_editable (ZAK_FORM_FORM (priv->form), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "button92")), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "button93")), FALSE); + } +} + +static void +segnalazione_allegato_carica (SegnalazioneAllegato *segnalazione_allegato) +{ + SegnalazioneAllegatoPrivate *priv = SEGNALAZIONE_ALLEGATO_GET_PRIVATE (segnalazione_allegato); + + if (zak_form_form_load (ZAK_FORM_FORM (priv->form), ZAK_FORM_IPROVIDER (priv->form_provider))) + { + } +} + +static void +segnalazione_allegato_salva (SegnalazioneAllegato *segnalazione_allegato, gboolean chiudi) +{ + gboolean ret; + + guint new_id; + const gchar *percorso; + gchar *sql; + + SegnalazioneAllegatoClass *klass = SEGNALAZIONE_ALLEGATO_GET_CLASS (segnalazione_allegato); + SegnalazioneAllegatoPrivate *priv = SEGNALAZIONE_ALLEGATO_GET_PRIVATE (segnalazione_allegato); + + if (!zak_form_gtk_form_is_valid (priv->form, priv->w)) + { + return; + } + + if (priv->id == 0) + { + new_id = gdaex_get_new_id (priv->commons->gdaex, + "segnalazione_allegati", + "id", + NULL); + + gtk_label_set_text (GTK_LABEL (priv->lbl_id), g_strdup_printf ("%d", new_id)); + + ret = zak_form_form_insert (ZAK_FORM_FORM (priv->form), ZAK_FORM_IPROVIDER (priv->form_provider)); + } + else + { + ret = zak_form_form_update (ZAK_FORM_FORM (priv->form), ZAK_FORM_IPROVIDER (priv->form_provider)); + } + + if (ret) + { + if (priv->id == 0) + { + priv->id = strtol (gtk_label_get_text (GTK_LABEL (priv->lbl_id)), NULL, 10); + } + + /* salvo il file nel db */ + percorso = solipa_allegato_get_percorso (priv->sallegato); + + sql = g_strdup_printf ("UPDATE segnalazione_allegati" + " SET contenuto = ##/*name:'contenuto' type:'GdaBlob'*/" + " WHERE id = %d", + priv->id); + if (!gdaex_save_file_in_blob (priv->commons->gdaex, + sql, + "contenuto", + percorso)) + { + if (priv->id == 0) + { + gtk_label_set_text (GTK_LABEL (priv->lbl_id), ""); + } + + solipa_message_dialog (priv->w, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Errore durante il salvataggio dell'allegato nel db."); + + g_free (sql); + } + else + { + g_signal_emit (segnalazione_allegato, klass->aggiornato_signal_id, 0); + + zak_form_form_set_as_original (ZAK_FORM_FORM (priv->form)); + + 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 (segnalazione_allegato); + } + + g_free (sql); + } + } + else + { + if (priv->id == 0) + { + gtk_label_set_text (GTK_LABEL (priv->lbl_id), ""); + } + + solipa_message_dialog (priv->w, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Errore durante il salvataggio."); + } +} + +static void +segnalazione_allegato_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) +{ + SegnalazioneAllegato *segnalazione_allegato = SEGNALAZIONE_ALLEGATO (object); + SegnalazioneAllegatoPrivate *priv = SEGNALAZIONE_ALLEGATO_GET_PRIVATE (segnalazione_allegato); + + switch (property_id) + { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +segnalazione_allegato_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) +{ + SegnalazioneAllegato *segnalazione_allegato = SEGNALAZIONE_ALLEGATO (object); + SegnalazioneAllegatoPrivate *priv = SEGNALAZIONE_ALLEGATO_GET_PRIVATE (segnalazione_allegato); + + switch (property_id) + { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static gboolean +segnalazione_allegato_conferma_chiusura (SegnalazioneAllegato *segnalazione_allegato) +{ + gboolean ret; + + SegnalazioneAllegatoPrivate *priv = SEGNALAZIONE_ALLEGATO_GET_PRIVATE (segnalazione_allegato); + + ret = TRUE; + if (zak_form_form_is_changed (ZAK_FORM_FORM (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 +segnalazione_allegato_on_key_release_event (GtkWidget *widget, + GdkEventKey *event, + gpointer user_data) +{ + switch (event->keyval) + { + case GDK_KEY_Escape: + { + SegnalazioneAllegatoPrivate *priv = SEGNALAZIONE_ALLEGATO_GET_PRIVATE ((SegnalazioneAllegato *)user_data); + + gtk_button_clicked (GTK_BUTTON (gtk_builder_get_object (priv->commons->gtkbuilder, "button91"))); + return TRUE; + } + } + + return FALSE; +} + +static gboolean +segnalazione_allegato_on_w_segnalazione_allegato_delete_event (GtkWidget *widget, + GdkEvent *event, + gpointer user_data) +{ + return !segnalazione_allegato_conferma_chiusura ((SegnalazioneAllegato *)user_data); +} + +static void +segnalazione_allegato_on_btn_annulla_clicked (GtkButton *button, + gpointer user_data) +{ + SegnalazioneAllegato *segnalazione_allegato = (SegnalazioneAllegato *)user_data; + SegnalazioneAllegatoPrivate *priv = SEGNALAZIONE_ALLEGATO_GET_PRIVATE (segnalazione_allegato); + + if (segnalazione_allegato_conferma_chiusura (segnalazione_allegato)) gtk_widget_destroy (priv->w); +} + +static void +segnalazione_allegato_on_btn_salva_clicked (GtkButton *button, + gpointer user_data) +{ + segnalazione_allegato_salva ((SegnalazioneAllegato *)user_data, FALSE); +} + +static void +segnalazione_allegato_on_btn_salvachiudi_clicked (GtkButton *button, + gpointer user_data) +{ + segnalazione_allegato_salva ((SegnalazioneAllegato *)user_data, TRUE); +} diff --git a/src/segnalazioneallegato.h b/src/segnalazioneallegato.h new file mode 100644 index 0000000..cd7bca5 --- /dev/null +++ b/src/segnalazioneallegato.h @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2016 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 __SEGNALAZIONE_ALLEGATO_H__ +#define __SEGNALAZIONE_ALLEGATO_H__ + +#include +#include + +#include + +#include "commons.h" + +G_BEGIN_DECLS + + +#define TYPE_SEGNALAZIONE_ALLEGATO (segnalazione_allegato_get_type ()) +#define SEGNALAZIONE_ALLEGATO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SEGNALAZIONE_ALLEGATO, SegnalazioneAllegato)) +#define SEGNALAZIONE_ALLEGATO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SEGNALAZIONE_ALLEGATO, SegnalazioneAllegatoClass)) +#define IS_SEGNALAZIONE_ALLEGATO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SEGNALAZIONE_ALLEGATO)) +#define IS_SEGNALAZIONE_ALLEGATO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SEGNALAZIONE_ALLEGATO)) +#define SEGNALAZIONE_ALLEGATO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SEGNALAZIONE_ALLEGATO, SegnalazioneAllegatoClass)) + + +typedef struct _SegnalazioneAllegato SegnalazioneAllegato; +typedef struct _SegnalazioneAllegatoClass SegnalazioneAllegatoClass; + +struct _SegnalazioneAllegato + { + GObject parent; + }; + +struct _SegnalazioneAllegatoClass + { + GObjectClass parent_class; + + guint aggiornato_signal_id; + }; + +GType segnalazione_allegato_get_type (void) G_GNUC_CONST; + +SegnalazioneAllegato *segnalazione_allegato_new (BCityBECommons *commons, gint id, gint id_uffici); + +GtkWidget *segnalazione_allegato_get_widget (SegnalazioneAllegato *segnalazione_allegato); +GtkWidget *segnalazione_allegato_show (SegnalazioneAllegato *segnalazione_allegato, GtkWindow *parent); + + +G_END_DECLS + +#endif /* __SEGNALAZIONE_ALLEGATO_H__ */ diff --git a/src/segnalazioni.c b/src/segnalazioni.c new file mode 100644 index 0000000..fd31271 --- /dev/null +++ b/src/segnalazioni.c @@ -0,0 +1,614 @@ +/* + * Copyright (C) 2016 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 + * + */ + +#ifdef HAVE_CONFIG_H + #include +#endif + +#include + +#include +#include + +#include "segnalazioni.h" +#include "segnalazione.h" +#include "segnalazioniqe.h" +#include "categoria.h" + +static void segnalazioni_class_init (SegnalazioniClass *klass); +static void segnalazioni_init (Segnalazioni *segnalazioni); + +static void segnalazioni_gestione_permessi (Segnalazioni *segnalazioni); + +static void segnalazioni_carica (Segnalazioni *segnalazioni); +static void segnalazioni_modifica (Segnalazioni *segnalazioni); + +static void segnalazioni_selezionato (Segnalazioni *segnalazioni); +static void segnalazioni_on_segnalazione_aggiornato (gpointer instance, gpointer user_data); +static void segnalazioni_on_segnalazioni_qe_selezionato (gpointer instance, gpointer parametri, gpointer user_data); + +static void segnalazioni_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static void segnalazioni_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec); + +static void segnalazioni_on_wgrid_map (GtkWidget *widget, + gpointer user_data); + +static gboolean segnalazioni_on_key_release_event (GtkWidget *widget, + GdkEventKey *event, + gpointer user_data); + +static void segnalazioni_on_btn_nuovo_clicked (GtkButton *button, + gpointer user_data); +static void segnalazioni_on_btn_modifica_clicked (GtkButton *button, + gpointer user_data); +static void segnalazioni_on_btn_elimina_clicked (GtkButton *button, + gpointer user_data); +static void segnalazioni_on_trv_segnalazioni_row_activated (GtkTreeView *tree_view, + GtkTreePath *tree_path, + GtkTreeViewColumn *column, + gpointer user_data); + +static void segnalazioni_on_btn_trova_clicked (GtkButton *button, + gpointer user_data); +static void segnalazioni_on_btn_annulla_clicked (GtkButton *button, + gpointer user_data); +static void segnalazioni_on_btn_seleziona_clicked (GtkButton *button, + gpointer user_data); + +#define SEGNALAZIONI_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TYPE_SEGNALAZIONI, SegnalazioniPrivate)) + +enum +{ + COL_ID +}; + +typedef struct _SegnalazioniPrivate SegnalazioniPrivate; +struct _SegnalazioniPrivate + { + BCityBECommons *commons; + + GtkWidget *transient; + GtkWidget *widget; + GdaExGrid *grid; + GtkWidget *wgrid; + GtkTreeSelection *selection; + GtkTreeStore *tstore_segnalazioni; + + gboolean selezione; + + GdaExQueryEditor *qe; + }; + +G_DEFINE_TYPE (Segnalazioni, segnalazioni, G_TYPE_OBJECT) + +static void +segnalazioni_class_init (SegnalazioniClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (object_class, sizeof (SegnalazioniPrivate)); + + object_class->set_property = segnalazioni_set_property; + object_class->get_property = segnalazioni_get_property; + + /** + * Segnalazioni::selezionato: + * @segnalazioni: + * + */ + 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 +segnalazioni_init (Segnalazioni *segnalazioni) +{ + SegnalazioniPrivate *priv = SEGNALAZIONI_GET_PRIVATE (segnalazioni); + + priv->qe = NULL; +} + +/** + * segnalazioni_new: + * @commons: + * @selezione: + * + * Returns: the newly created #Segnalazioni object. + */ +Segnalazioni +*segnalazioni_new (BCityBECommons *commons, gboolean selezione) +{ + GError *error; + + GdaExGridColumn *gcol; + + Segnalazioni *a = SEGNALAZIONI (g_object_new (segnalazioni_get_type (), NULL)); + + SegnalazioniPrivate *priv = SEGNALAZIONI_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 ((selezione ? "w_segnalazioni" : "vbx_segnalazioni"), + "|", -1), + &error); + if (error != NULL) + { + g_warning ("Errore: %s.", error->message); + return NULL; + } + + priv->widget = GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, (priv->selezione ? "w_segnalazioni" : "vbx_segnalazioni"))); + + if (priv->selezione) + { + priv->transient = GTK_WIDGET (priv->widget); + } + else + { + priv->transient = GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "w_main")); + } + + /* creo la gdaexgrid */ + priv->grid = gdaex_grid_new (); + gdaex_grid_set_solipa (priv->grid, priv->commons->solipa); + gdaex_grid_set_title (priv->grid, gtk_label_get_text (GTK_LABEL (gtk_builder_get_object (priv->commons->gtkbuilder, "label68")))); + + gcol = gdaex_grid_column_new_defaults ("ID", "id", G_TYPE_INT); + gdaex_grid_add_column (priv->grid, gcol); + + gcol = gdaex_grid_column_new ("ID Categoria", "id_categorie", G_TYPE_INT, FALSE, TRUE, TRUE, TRUE, -1); + gdaex_grid_add_column (priv->grid, gcol); + + gcol = gdaex_grid_column_new_defaults ("Categoria", "categoria", G_TYPE_STRING); + gdaex_grid_add_column (priv->grid, gcol); + + gcol = gdaex_grid_column_new_defaults ("Descrizione", "descrizione", G_TYPE_STRING); + gdaex_grid_add_column (priv->grid, gcol); + + priv->wgrid = gdaex_grid_get_widget (priv->grid); + g_signal_connect (priv->wgrid, + "map", G_CALLBACK (segnalazioni_on_wgrid_map), (gpointer)a); + gtk_tree_view_set_search_column (GTK_TREE_VIEW (priv->wgrid), 3); + gtk_container_add (GTK_CONTAINER (gtk_builder_get_object (priv->commons->gtkbuilder, "scrolledwindow16")), priv->wgrid); + gtk_widget_show (priv->wgrid); + + priv->selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->wgrid)); + priv->tstore_segnalazioni = GTK_TREE_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (priv->wgrid))); + + g_signal_connect (priv->wgrid, + "row-activated", G_CALLBACK (segnalazioni_on_trv_segnalazioni_row_activated), (gpointer)a); + + g_signal_connect (priv->widget, + "key-release-event", G_CALLBACK (segnalazioni_on_key_release_event), (gpointer)a); + + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button83"), + "clicked", G_CALLBACK (segnalazioni_on_btn_nuovo_clicked), (gpointer)a); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button84"), + "clicked", G_CALLBACK (segnalazioni_on_btn_modifica_clicked), (gpointer)a); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button85"), + "clicked", G_CALLBACK (segnalazioni_on_btn_elimina_clicked), (gpointer)a); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button86"), + "clicked", G_CALLBACK (segnalazioni_on_btn_trova_clicked), (gpointer)a); + + if (priv->selezione) + { + gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "label68"))); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button87"), + "clicked", G_CALLBACK (segnalazioni_on_btn_annulla_clicked), (gpointer)a); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button88"), + "clicked", G_CALLBACK (segnalazioni_on_btn_seleziona_clicked), (gpointer)a); + } + else + { + gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "button87"))); + gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "button88"))); + } + + segnalazioni_gestione_permessi (a); + + segnalazioni_carica (a); + + return a; +} + +/** + * segnalazioni_get_widget: + * @segnalazioni: + * + */ +GtkWidget +*segnalazioni_get_widget (Segnalazioni *segnalazioni) +{ + SegnalazioniPrivate *priv = SEGNALAZIONI_GET_PRIVATE (segnalazioni); + + return priv->widget; +} + +/** + * segnalazioni_show: + * @segnalazioni: + * @parent: + */ +GtkWidget +*segnalazioni_show (Segnalazioni *segnalazioni, GtkWindow *parent) +{ + GtkWidget *w; + + SegnalazioniPrivate *priv = SEGNALAZIONI_GET_PRIVATE (segnalazioni); + + w = segnalazioni_get_widget (segnalazioni); + if (parent != NULL) + { + gtk_window_set_transient_for (GTK_WINDOW (w), parent); + } + gtk_widget_show_all (w); + + return w; +} + +/* PRIVATE */ +static void +segnalazioni_gestione_permessi (Segnalazioni *segnalazioni) +{ + SegnalazioniPrivate *priv = SEGNALAZIONI_GET_PRIVATE (segnalazioni); + + ZakAuthoIResource *ires1; + + ires1 = zak_autho_get_resource_from_id (priv->commons->autoz, "cancelleria_rw"); + if (!zak_autho_is_allowed (priv->commons->autoz, priv->commons->role_utente, ires1, FALSE)) + { + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "button83")), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "button85")), FALSE); + } +} + +static void +missing_func (GtkTreeStore *tstore, GtkTreeIter *iter, gpointer user_data) +{ + GString *ret; + guint key; + + Segnalazioni *f = (Segnalazioni *)user_data; + SegnalazioniPrivate *priv = SEGNALAZIONI_GET_PRIVATE (f); + + ret = g_string_new (""); + + gtk_tree_model_get (GTK_TREE_MODEL (tstore), iter, + 1, &key, + -1); + + if (key > 0) + { + g_string_append (ret, + categoria_get_descrizione_with_parent (priv->commons, key)); + } + + gtk_tree_store_set (tstore, iter, + 2, ret->str, + -1); +} + +static void +segnalazioni_carica (Segnalazioni *segnalazioni) +{ + gchar *sql; + + SegnalazioniPrivate *priv = SEGNALAZIONI_GET_PRIVATE (segnalazioni); + + gtk_tree_store_clear (priv->tstore_segnalazioni); + + if (!GDAEX_IS_QUERY_EDITOR (priv->qe) + || gdaex_query_editor_get_sql_where (priv->qe) == NULL + || g_strcmp0 (gdaex_query_editor_get_sql_where (priv->qe), "") == 0) + { + sql = g_strdup_printf ("SELECT c.id, c.id_categorie, c.descrizione" + " FROM segnalazioni AS c" + " WHERE c.status <> 'E'" + " ORDER BY c.descrizione"); + } + else + { + sql = g_strconcat ("SELECT ", + gdaex_query_editor_get_sql_select (priv->qe), + " FROM ", + gdaex_query_editor_get_sql_from (priv->qe), + " WHERE ", + gdaex_query_editor_get_sql_where (priv->qe), + " AND segnalazioni.status <> 'E'" + " ORDER BY segnalazioni.descrizione", + NULL); + } + + gdaex_grid_fill_from_sql_with_missing_func (priv->grid, priv->commons->gdaex, + sql, + missing_func, + (gpointer)segnalazioni, + NULL); + + g_free (sql); +} + +static void +segnalazioni_modifica (Segnalazioni *segnalazioni) +{ + GtkTreeIter iter; + gchar *id; + + SegnalazioniPrivate *priv = SEGNALAZIONI_GET_PRIVATE (segnalazioni); + + if (gtk_tree_selection_get_selected (priv->selection, NULL, &iter)) + { + GtkWidget *w; + + gtk_tree_model_get (GTK_TREE_MODEL (priv->tstore_segnalazioni), &iter, + COL_ID, &id, + -1); + + Segnalazione *c = segnalazione_new (priv->commons, strtol (id, NULL, 10)); + + g_signal_connect (G_OBJECT (c), "aggiornato", + G_CALLBACK (segnalazioni_on_segnalazione_aggiornato), (gpointer)segnalazioni); + + w = segnalazione_get_widget (c); + gtk_window_set_transient_for (GTK_WINDOW (w), GTK_WINDOW (priv->transient)); + gtk_widget_show (w); + } + else + { + solipa_message_dialog (priv->transient, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Occorre prima selezionare una segnalazione."); + } +} + +static void +segnalazioni_selezionato (Segnalazioni *segnalazioni) +{ + GtkTreeIter iter; + gchar *id; + + SegnalazioniClass *klass = SEGNALAZIONI_GET_CLASS (segnalazioni); + SegnalazioniPrivate *priv = SEGNALAZIONI_GET_PRIVATE (segnalazioni); + + if (gtk_tree_selection_get_selected (priv->selection, NULL, &iter)) + { + gtk_tree_model_get (GTK_TREE_MODEL (priv->tstore_segnalazioni), &iter, + COL_ID, &id, + -1); + + g_signal_emit (G_OBJECT (segnalazioni), klass->selezionato_signal_id, 0, strtol (id, NULL, 10)); + + gtk_widget_destroy (priv->widget); + g_object_unref (G_OBJECT (segnalazioni)); + } + else + { + solipa_message_dialog (priv->transient, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Occorre prima selezionare un segnalazione."); + } +} + +static void +segnalazioni_on_segnalazione_aggiornato (gpointer instance, gpointer user_data) +{ + segnalazioni_carica ((Segnalazioni *)user_data); +} + +static void +segnalazioni_on_segnalazioni_qe_selezionato (gpointer instance, gpointer parametri, gpointer user_data) +{ + Segnalazioni *segnalazioni = SEGNALAZIONI (user_data); + SegnalazioniPrivate *priv = SEGNALAZIONI_GET_PRIVATE (segnalazioni); + + priv->qe = (GdaExQueryEditor *)parametri; + segnalazioni_carica (segnalazioni); +} + +static void +segnalazioni_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) +{ + Segnalazioni *segnalazioni = SEGNALAZIONI (object); + SegnalazioniPrivate *priv = SEGNALAZIONI_GET_PRIVATE (segnalazioni); + + switch (property_id) + { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +segnalazioni_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) +{ + Segnalazioni *segnalazioni = SEGNALAZIONI (object); + SegnalazioniPrivate *priv = SEGNALAZIONI_GET_PRIVATE (segnalazioni); + + switch (property_id) + { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +/* CALLBACK */ +static void +segnalazioni_on_wgrid_map (GtkWidget *widget, + gpointer user_data) +{ + gtk_widget_grab_focus (widget); +} + +static gboolean +segnalazioni_on_key_release_event (GtkWidget *widget, + GdkEventKey *event, + gpointer user_data) +{ + switch (event->keyval) + { + case GDK_KEY_F2: + { + SegnalazioniPrivate *priv = SEGNALAZIONI_GET_PRIVATE ((Segnalazioni *)user_data); + + gtk_button_clicked (GTK_BUTTON (gtk_builder_get_object (priv->commons->gtkbuilder, "button86"))); + return TRUE; + } + + case GDK_KEY_Escape: + { + SegnalazioniPrivate *priv = SEGNALAZIONI_GET_PRIVATE ((Segnalazioni *)user_data); + + gtk_button_clicked (GTK_BUTTON (gtk_builder_get_object (priv->commons->gtkbuilder, "button87"))); + return TRUE; + } + } + + return FALSE; +} + +static void +segnalazioni_on_btn_nuovo_clicked (GtkButton *button, + gpointer user_data) +{ + GtkWidget *w; + + Segnalazioni *segnalazioni = (Segnalazioni *)user_data; + SegnalazioniPrivate *priv = SEGNALAZIONI_GET_PRIVATE (segnalazioni); + + Segnalazione *c = segnalazione_new (priv->commons, 0); + + g_signal_connect (G_OBJECT (c), "aggiornato", + G_CALLBACK (segnalazioni_on_segnalazione_aggiornato), user_data); + + w = segnalazione_get_widget (c); + gtk_window_set_transient_for (GTK_WINDOW (w), GTK_WINDOW (priv->transient)); + gtk_widget_show (w); +} + +static void +segnalazioni_on_btn_modifica_clicked (GtkButton *button, + gpointer user_data) +{ + segnalazioni_modifica ((Segnalazioni *)user_data); +} + +static void +segnalazioni_on_btn_elimina_clicked (GtkButton *button, + gpointer user_data) +{ + GtkTreeIter iter; + gchar *id; + + Segnalazioni *segnalazioni = (Segnalazioni *)user_data; + SegnalazioniPrivate *priv = SEGNALAZIONI_GET_PRIVATE (segnalazioni); + + if (gtk_tree_selection_get_selected (priv->selection, NULL, &iter)) + { + if (solipa_message_dialog (priv->transient, + GTK_MESSAGE_QUESTION, + GTK_BUTTONS_YES_NO, + "Sicuro di voler eliminare la segnalazione selezionata?") == GTK_RESPONSE_YES) + { + gtk_tree_model_get (GTK_TREE_MODEL (priv->tstore_segnalazioni), &iter, + COL_ID, &id, + -1); + + gdaex_execute (priv->commons->gdaex, + g_strdup_printf ("UPDATE segnalazioni SET status = 'E' WHERE id = %d", strtol (id, NULL, 10))); + + segnalazioni_carica (segnalazioni); + } + } + else + { + solipa_message_dialog (priv->transient, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Occorre prima selezionare una segnalazione."); + } +} + +static void +segnalazioni_on_trv_segnalazioni_row_activated (GtkTreeView *tree_view, + GtkTreePath *tree_path, + GtkTreeViewColumn *column, + gpointer user_data) +{ + SegnalazioniPrivate *priv = SEGNALAZIONI_GET_PRIVATE ((Segnalazioni *)user_data); + + if (priv->selezione) + { + segnalazioni_selezionato ((Segnalazioni *)user_data); + } + else + { + segnalazioni_modifica ((Segnalazioni *)user_data); + } +} + +static void +segnalazioni_on_btn_trova_clicked (GtkButton *button, + gpointer user_data) +{ + SegnalazioniPrivate *priv = SEGNALAZIONI_GET_PRIVATE ((Segnalazioni *)user_data); + + SegnalazioniQe *c = segnalazioni_qe_new (priv->commons, priv->qe); + + g_signal_connect (G_OBJECT (c), "selezionato", + G_CALLBACK (segnalazioni_on_segnalazioni_qe_selezionato), user_data); + + segnalazioni_qe_show (c, GTK_WINDOW (priv->transient)); +} + +static void +segnalazioni_on_btn_annulla_clicked (GtkButton *button, + gpointer user_data) +{ + SegnalazioniPrivate *priv = SEGNALAZIONI_GET_PRIVATE ((Segnalazioni *)user_data); + + gtk_widget_destroy (priv->widget); + g_object_unref (G_OBJECT (user_data)); +} + +static void +segnalazioni_on_btn_seleziona_clicked (GtkButton *button, + gpointer user_data) +{ + segnalazioni_selezionato ((Segnalazioni *)user_data); +} diff --git a/src/segnalazioni.h b/src/segnalazioni.h new file mode 100644 index 0000000..fa1814b --- /dev/null +++ b/src/segnalazioni.h @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2016 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 __SEGNALAZIONI_H__ +#define __SEGNALAZIONI_H__ + +#include +#include + +#include + +#include "commons.h" + +G_BEGIN_DECLS + + +#define TYPE_SEGNALAZIONI (segnalazioni_get_type ()) +#define SEGNALAZIONI(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SEGNALAZIONI, Segnalazioni)) +#define SEGNALAZIONI_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SEGNALAZIONI, SegnalazioniClass)) +#define IS_SEGNALAZIONI(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SEGNALAZIONI)) +#define IS_SEGNALAZIONI_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SEGNALAZIONI)) +#define SEGNALAZIONI_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SEGNALAZIONI, SegnalazioniClass)) + + +typedef struct _Segnalazioni Segnalazioni; +typedef struct _SegnalazioniClass SegnalazioniClass; + +struct _Segnalazioni + { + GObject parent; + }; + +struct _SegnalazioniClass + { + GObjectClass parent_class; + + guint selezionato_signal_id; + }; + +GType segnalazioni_get_type (void) G_GNUC_CONST; + +Segnalazioni *segnalazioni_new (BCityBECommons *commons, gboolean selezione); + +GtkWidget *segnalazioni_get_widget (Segnalazioni *segnalazioni); +GtkWidget *segnalazioni_show (Segnalazioni *segnalazioni, GtkWindow *parent); + + +G_END_DECLS + +#endif /* __SEGNALAZIONI_H__ */ diff --git a/src/segnalazioniqe.c b/src/segnalazioniqe.c new file mode 100644 index 0000000..2239ab7 --- /dev/null +++ b/src/segnalazioniqe.c @@ -0,0 +1,368 @@ +/* + * Copyright (C) 2016 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 + * + */ + +#ifdef HAVE_CONFIG_H + #include +#endif + +#include + +#include + +#include +#include + +#include "segnalazioniqe.h" +#include "categoria.h" +#include "categorie.h" + +static void segnalazioni_qe_class_init (SegnalazioniQeClass *klass); +static void segnalazioni_qe_init (SegnalazioniQe *segnalazioni_qe); + +static void segnalazioni_qe_selezionato (SegnalazioniQe *segnalazioni_qe); + +static void segnalazioni_qe_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static void segnalazioni_qe_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec); + +static void segnalazioni_qe_on_btn_categoria_browse_clicked (GtkButton *button, gpointer user_data); +static void segnalazioni_qe_on_categoria_selezionato (gpointer instance, guint id, gpointer user_data); +static gchar *segnalazioni_qe_on_categoria_decode (gpointer instance, gchar *key, gpointer user_data); + +static void segnalazioni_qe_on_iwidget_init (gpointer instance, + GdaExQueryEditorIWidget *iwidget, + gchar *table_name, gchar *field_name, + gboolean from, + gpointer user_data); + +static gboolean segnalazioni_qe_on_key_release_event (GtkWidget *widget, + GdkEventKey *event, + gpointer user_data); + +static void segnalazioni_qe_on_btn_annulla_clicked (GtkButton *button, + gpointer user_data); +static void segnalazioni_qe_on_btn_seleziona_clicked (GtkButton *button, + gpointer user_data); + +#define SEGNALAZIONI_QE_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TYPE_SEGNALAZIONI_QE, SegnalazioniQePrivate)) + +typedef struct _SegnalazioniQePrivate SegnalazioniQePrivate; +struct _SegnalazioniQePrivate + { + BCityBECommons *commons; + + GtkWidget *widget; + + GdaExQueryEditor *qe; + GtkWidget *wqe; + + GtkWidget *iwidget_categoria; + }; + +G_DEFINE_TYPE (SegnalazioniQe, segnalazioni_qe, G_TYPE_OBJECT) + +static void +segnalazioni_qe_class_init (SegnalazioniQeClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (object_class, sizeof (SegnalazioniQePrivate)); + + object_class->set_property = segnalazioni_qe_set_property; + object_class->get_property = segnalazioni_qe_get_property; + + /** + * SegnalazioniQe::selezionato: + * @segnalazioni_qe: + * + */ + 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 +segnalazioni_qe_init (SegnalazioniQe *segnalazioni_qe) +{ + SegnalazioniQePrivate *priv = SEGNALAZIONI_QE_GET_PRIVATE (segnalazioni_qe); +} + +/** + * segnalazioni_qe_new: + * @commons: + * @qe: + * + * Returns: the newly created #SegnalazioniQe object. + */ +SegnalazioniQe +*segnalazioni_qe_new (BCityBECommons *commons, GdaExQueryEditor *qe) +{ + GError *error; + + SegnalazioniQe *a = SEGNALAZIONI_QE (g_object_new (segnalazioni_qe_get_type (), NULL)); + + SegnalazioniQePrivate *priv = SEGNALAZIONI_QE_GET_PRIVATE (a); + + priv->commons = commons; + + error = NULL; + gtk_builder_add_objects_from_file (priv->commons->gtkbuilder, priv->commons->guifile, + g_strsplit ("w_segnalazioni_qe", + "|", -1), + &error); + if (error != NULL) + { + g_warning ("Errore: %s.", error->message); + return NULL; + } + + priv->widget = GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, "w_segnalazioni_qe")); + + g_signal_connect (priv->widget, + "key-release-event", G_CALLBACK (segnalazioni_qe_on_key_release_event), (gpointer)a); + + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button89"), + "clicked", G_CALLBACK (segnalazioni_qe_on_btn_annulla_clicked), (gpointer)a); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button90"), + "clicked", G_CALLBACK (segnalazioni_qe_on_btn_seleziona_clicked), (gpointer)a); + + if (!GDAEX_IS_QUERY_EDITOR (qe)) + { + priv->qe = gdaex_query_editor_new (priv->commons->gdaex); + + g_signal_connect (G_OBJECT (priv->qe), "iwidget-init", + G_CALLBACK (segnalazioni_qe_on_iwidget_init), (gpointer)a); + + gdaex_query_editor_load_tables_from_file (priv->qe, g_build_filename (commons->queryeditordir, "segnalazioni.xml", NULL), TRUE); + gdaex_query_editor_set_show_visible (priv->qe, FALSE); + gdaex_query_editor_set_order_visible (priv->qe, FALSE); + } + else + { + priv->qe = qe; + } + + priv->wqe = gdaex_query_editor_get_widget (priv->qe); + gtk_box_pack_start (GTK_BOX (gtk_builder_get_object (priv->commons->gtkbuilder, "vbox14")), + priv->wqe, + TRUE, TRUE, 0); + gtk_box_reorder_child (GTK_BOX (gtk_builder_get_object (priv->commons->gtkbuilder, "vbox14")), + priv->wqe, + 0); + + return a; +} + +/** + * segnalazioni_qe_get_widget: + * @segnalazioni_qe: + * + */ +GtkWidget +*segnalazioni_qe_get_widget (SegnalazioniQe *segnalazioni_qe) +{ + SegnalazioniQePrivate *priv = SEGNALAZIONI_QE_GET_PRIVATE (segnalazioni_qe); + + return priv->widget; +} + +/** + * segnalazioni_qe_show: + * @segnalazioni_qe: + * @parent: + */ +GtkWidget +*segnalazioni_qe_show (SegnalazioniQe *segnalazioni_qe, GtkWindow *parent) +{ + GtkWidget *w; + + SegnalazioniQePrivate *priv = SEGNALAZIONI_QE_GET_PRIVATE (segnalazioni_qe); + + w = segnalazioni_qe_get_widget (segnalazioni_qe); + if (parent != NULL) + { + gtk_window_set_transient_for (GTK_WINDOW (w), parent); + } + gtk_widget_show_all (w); + + return w; +} + +/* PRIVATE */ +static void +segnalazioni_qe_selezionato (SegnalazioniQe *segnalazioni_qe) +{ + SegnalazioniQeClass *klass = SEGNALAZIONI_QE_GET_CLASS (segnalazioni_qe); + SegnalazioniQePrivate *priv = SEGNALAZIONI_QE_GET_PRIVATE (segnalazioni_qe); + + g_signal_emit (G_OBJECT (segnalazioni_qe), klass->selezionato_signal_id, 0, (gpointer)priv->qe); + + gtk_container_remove (GTK_CONTAINER (gtk_builder_get_object (priv->commons->gtkbuilder, "vbox14")), + priv->wqe); + + gtk_widget_destroy (priv->widget); + g_object_unref (G_OBJECT (segnalazioni_qe)); +} + +static void +segnalazioni_qe_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) +{ + SegnalazioniQe *segnalazioni_qe = SEGNALAZIONI_QE (object); + SegnalazioniQePrivate *priv = SEGNALAZIONI_QE_GET_PRIVATE (segnalazioni_qe); + + switch (property_id) + { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +segnalazioni_qe_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) +{ + SegnalazioniQe *segnalazioni_qe = SEGNALAZIONI_QE (object); + SegnalazioniQePrivate *priv = SEGNALAZIONI_QE_GET_PRIVATE (segnalazioni_qe); + + switch (property_id) + { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +/* CALLBACK */ +static void +segnalazioni_qe_on_btn_categoria_browse_clicked (GtkButton *button, + gpointer user_data) +{ + SegnalazioniQe *iva = (SegnalazioniQe *)user_data; + SegnalazioniQePrivate *priv = SEGNALAZIONI_QE_GET_PRIVATE (iva); + + Categorie *c = categorie_new (priv->commons, TRUE); + + g_signal_connect (G_OBJECT (c), "selezionato", + G_CALLBACK (segnalazioni_qe_on_categoria_selezionato), user_data); + + categorie_show (c, GTK_WINDOW (priv->widget)); +} + +static void +segnalazioni_qe_on_categoria_selezionato (gpointer instance, guint id, gpointer user_data) +{ + SegnalazioniQe *f = (SegnalazioniQe *)user_data; + SegnalazioniQePrivate *priv = SEGNALAZIONI_QE_GET_PRIVATE (f); + + zak_gtk_decoder_set_key (ZAK_GTK_DECODER (priv->iwidget_categoria), + g_strdup_printf ("%d", id)); +} + +static gchar +*segnalazioni_qe_on_categoria_decode (gpointer instance, gchar *key, gpointer user_data) +{ + GString *ret; + gchar *sql; + GdaDataModel *dm; + + SegnalazioniQe *f = (SegnalazioniQe *)user_data; + SegnalazioniQePrivate *priv = SEGNALAZIONI_QE_GET_PRIVATE (f); + + ret = g_string_new (""); + + g_string_append (ret, categoria_get_descrizione_with_parent (priv->commons, strtol (key, NULL, 10))); + + return ret->str; +} + +static void +segnalazioni_qe_on_iwidget_init (gpointer instance, + GdaExQueryEditorIWidget *iwidget, + gchar *table_name, + gchar *field_name, + gboolean from, + gpointer user_data) +{ + SegnalazioniQe *f = (SegnalazioniQe *)user_data; + SegnalazioniQePrivate *priv = SEGNALAZIONI_QE_GET_PRIVATE (f); + + if (from + && g_strcmp0 (table_name, "segnalazioni") == 0) + { + if (g_strcmp0 (field_name, "id_categorie") == 0) + { + priv->iwidget_categoria = GTK_WIDGET (iwidget); + + g_signal_connect (G_OBJECT (iwidget), "btn-browse-clicked", + G_CALLBACK (segnalazioni_qe_on_btn_categoria_browse_clicked), user_data); + g_signal_connect (G_OBJECT (iwidget), "decode", + G_CALLBACK (segnalazioni_qe_on_categoria_decode), user_data); + } + } +} + +static gboolean +segnalazioni_qe_on_key_release_event (GtkWidget *widget, + GdkEventKey *event, + gpointer user_data) +{ + switch (event->keyval) + { + case GDK_KEY_Escape: + { + SegnalazioniQePrivate *priv = SEGNALAZIONI_QE_GET_PRIVATE ((SegnalazioniQe *)user_data); + + gtk_button_clicked (GTK_BUTTON (gtk_builder_get_object (priv->commons->gtkbuilder, "button89"))); + return TRUE; + } + } + + return FALSE; +} + +static void +segnalazioni_qe_on_btn_annulla_clicked (GtkButton *button, + gpointer user_data) +{ + SegnalazioniQePrivate *priv = SEGNALAZIONI_QE_GET_PRIVATE ((SegnalazioniQe *)user_data); + + gtk_container_remove (GTK_CONTAINER (gtk_builder_get_object (priv->commons->gtkbuilder, "vbox14")), + priv->wqe); + + gtk_widget_destroy (priv->widget); + g_object_unref (G_OBJECT (user_data)); +} + +static void +segnalazioni_qe_on_btn_seleziona_clicked (GtkButton *button, + gpointer user_data) +{ + segnalazioni_qe_selezionato ((SegnalazioniQe *)user_data); +} diff --git a/src/segnalazioniqe.h b/src/segnalazioniqe.h new file mode 100644 index 0000000..7466ab7 --- /dev/null +++ b/src/segnalazioniqe.h @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2016 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 __SEGNALAZIONI_QE_H__ +#define __SEGNALAZIONI_QE_H__ + +#include +#include + +#include + +#include "commons.h" + +G_BEGIN_DECLS + + +#define TYPE_SEGNALAZIONI_QE (segnalazioni_qe_get_type ()) +#define SEGNALAZIONI_QE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SEGNALAZIONI_QE, SegnalazioniQe)) +#define SEGNALAZIONI_QE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SEGNALAZIONI_QE, SegnalazioniQeClass)) +#define IS_SEGNALAZIONI_QE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SEGNALAZIONI_QE)) +#define IS_SEGNALAZIONI_QE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SEGNALAZIONI_QE)) +#define SEGNALAZIONI_QE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SEGNALAZIONI_QE, SegnalazioniQeClass)) + + +typedef struct _SegnalazioniQe SegnalazioniQe; +typedef struct _SegnalazioniQeClass SegnalazioniQeClass; + +struct _SegnalazioniQe + { + GObject parent; + }; + +struct _SegnalazioniQeClass + { + GObjectClass parent_class; + + guint selezionato_signal_id; + }; + +GType segnalazioni_qe_get_type (void) G_GNUC_CONST; + +SegnalazioniQe *segnalazioni_qe_new (BCityBECommons *commons, GdaExQueryEditor *qe); + +GtkWidget *segnalazioni_qe_get_widget (SegnalazioniQe *segnalazioni_qe); +GtkWidget *segnalazioni_qe_show (SegnalazioniQe *segnalazioni_qe, GtkWindow *parent); + + +G_END_DECLS + +#endif /* __SEGNALAZIONI_QE_H__ */ -- 2.49.0