From 6dcc44974d4cc5f99f4ef25a557cb584c8a1dee4 Mon Sep 17 00:00:00 2001 From: Andrea Zagli <a.zagli@comune.scandicci.fi.it> Date: Thu, 23 May 2013 15:05:16 +0200 Subject: [PATCH] Trasformata la tabella uffici in albero. --- data/organigramma/form/ufficio.form | 19 +- data/organigramma/gui/organigramma.gui | 233 ++++++++++++++++--------- src/nodi.c | 6 +- src/titoli.c | 6 +- src/uffici.c | 43 +++-- src/ufficio.c | 61 ++++++- 6 files changed, 270 insertions(+), 98 deletions(-) diff --git a/data/organigramma/form/ufficio.form b/data/organigramma/form/ufficio.form index d2ab817..04e82ea 100644 --- a/data/organigramma/form/ufficio.form +++ b/data/organigramma/form/ufficio.form @@ -10,6 +10,24 @@ </field> </widget> + <widget type="entry" name="entry48"> + <field type="text" name="ufficio_superiore"> + <to-load>f</to-load> + <to-save>f</to-save> + </field> + </widget> + + <widget type="label" name="label169" label="label170"> + <on-change what="update" when="after"> + <widget-name>entry48</widget-name> + <sql> + SELECT nome FROM uffici WHERE id = ##label169::gint + </sql> + </on-change> + <field type="integer" name="id_uffici"> + </field> + </widget> + <widget type="entry" name="entry7"> <field type="text" name="struttura"> <to-load>f</to-load> @@ -25,7 +43,6 @@ </sql> </on-change> <field type="integer" name="id_strutture"> - <obligatory>t</obligatory> </field> </widget> diff --git a/data/organigramma/gui/organigramma.gui b/data/organigramma/gui/organigramma.gui index ccf416f..7982b82 100644 --- a/data/organigramma/gui/organigramma.gui +++ b/data/organigramma/gui/organigramma.gui @@ -260,14 +260,6 @@ <column type="gchararray"/> </columns> </object> - <object class="GtkListStore" id="lstore_uffici"> - <columns> - <!-- column-name id --> - <column type="guint"/> - <!-- column-name nome --> - <column type="gchararray"/> - </columns> - </object> <object class="GtkListStore" id="lstore_ufficio_nodi"> <columns> <!-- column-name tipo --> @@ -324,6 +316,14 @@ <column type="gchararray"/> </columns> </object> + <object class="GtkTreeStore" id="tstore_uffici"> + <columns> + <!-- column-name id --> + <column type="guint"/> + <!-- column-name nome --> + <column type="gchararray"/> + </columns> + </object> <object class="GtkWindow" id="w_main"> <property name="can_focus">False</property> <property name="title" translatable="yes">Gestione organigramma</property> @@ -7197,9 +7197,10 @@ <object class="GtkTreeView" id="treeview4"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="model">lstore_uffici</property> + <property name="model">tstore_uffici</property> <property name="headers_clickable">False</property> - <property name="search_column">0</property> + <property name="rules_hint">True</property> + <property name="search_column">1</property> <child> <object class="GtkTreeViewColumn" id="treeviewcolumn4"> <property name="title">Nome</property> @@ -7323,7 +7324,7 @@ <object class="GtkTable" id="table4"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="n_rows">8</property> + <property name="n_rows">9</property> <property name="n_columns">2</property> <property name="column_spacing">5</property> <property name="row_spacing">5</property> @@ -7335,8 +7336,8 @@ <property name="label" translatable="yes">Nome</property> </object> <packing> - <property name="top_attach">4</property> - <property name="bottom_attach">5</property> + <property name="top_attach">5</property> + <property name="bottom_attach">6</property> <property name="x_options">GTK_FILL</property> <property name="y_options">GTK_FILL</property> </packing> @@ -7355,8 +7356,8 @@ <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> - <property name="top_attach">4</property> - <property name="bottom_attach">5</property> + <property name="top_attach">5</property> + <property name="bottom_attach">6</property> <property name="y_options">GTK_FILL</property> </packing> </child> @@ -7369,8 +7370,8 @@ <property name="label" translatable="yes">Descrizione</property> </object> <packing> - <property name="top_attach">5</property> - <property name="bottom_attach">6</property> + <property name="top_attach">6</property> + <property name="bottom_attach">7</property> <property name="x_options">GTK_FILL</property> <property name="y_options">GTK_FILL</property> </packing> @@ -7392,8 +7393,8 @@ <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> - <property name="top_attach">5</property> - <property name="bottom_attach">6</property> + <property name="top_attach">6</property> + <property name="bottom_attach">7</property> </packing> </child> <child> @@ -7429,67 +7430,12 @@ <property name="label" translatable="yes">Struttura</property> </object> <packing> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> <property name="x_options">GTK_FILL</property> <property name="y_options">GTK_FILL</property> </packing> </child> - <child> - <object class="GtkHBox" id="hbox3"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="spacing">5</property> - <child> - <object class="GtkEntry" id="entry7"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">False</property> - <property name="invisible_char">â</property> - <property name="primary_icon_activatable">False</property> - <property name="secondary_icon_activatable">False</property> - <property name="primary_icon_sensitive">True</property> - <property name="secondary_icon_sensitive">True</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton" id="button31"> - <property name="label" translatable="yes">...</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label25"> - <property name="can_focus">False</property> - <property name="label" translatable="yes">lbl_id_strutture</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="y_options">GTK_FILL</property> - </packing> - </child> <child> <object class="GtkFrame" id="frame1"> <property name="visible">True</property> @@ -7618,8 +7564,8 @@ </object> <packing> <property name="right_attach">2</property> - <property name="top_attach">6</property> - <property name="bottom_attach">7</property> + <property name="top_attach">7</property> + <property name="bottom_attach">8</property> </packing> </child> <child> @@ -7873,8 +7819,8 @@ </object> <packing> <property name="right_attach">2</property> - <property name="top_attach">7</property> - <property name="bottom_attach">8</property> + <property name="top_attach">8</property> + <property name="bottom_attach">9</property> </packing> </child> <child> @@ -8017,9 +7963,136 @@ </child> </object> <packing> + <property name="right_attach">2</property> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">5</property> + <child> + <object class="GtkEntry" id="entry7"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">False</property> + <property name="invisible_char">â</property> + <property name="invisible_char_set">True</property> + <property name="primary_icon_activatable">False</property> + <property name="secondary_icon_activatable">False</property> + <property name="primary_icon_sensitive">True</property> + <property name="secondary_icon_sensitive">True</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="button31"> + <property name="label" translatable="yes">...</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label25"> + <property name="can_focus">False</property> + <property name="label" translatable="yes">lbl_id_strutture</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">1</property> <property name="right_attach">2</property> <property name="top_attach">3</property> <property name="bottom_attach">4</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox20"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">5</property> + <child> + <object class="GtkEntry" id="entry48"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">False</property> + <property name="invisible_char">â</property> + <property name="invisible_char_set">True</property> + <property name="secondary_icon_stock">gtk-clear</property> + <property name="primary_icon_activatable">False</property> + <property name="secondary_icon_activatable">True</property> + <property name="primary_icon_sensitive">True</property> + <property name="secondary_icon_sensitive">True</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="button164"> + <property name="label" translatable="yes">...</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label169"> + <property name="can_focus">False</property> + <property name="label" translatable="yes">lbl_id_uffici</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label170"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Ufficio</property> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> </packing> </child> </object> diff --git a/src/nodi.c b/src/nodi.c index 44936b9..c616d6c 100644 --- a/src/nodi.c +++ b/src/nodi.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2012 Andrea Zagli <azagli@libero.it> + * Copyright (C) 2010-2013 Andrea Zagli <azagli@libero.it> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -17,6 +17,10 @@ * */ +#ifdef HAVE_CONFIG_H + #include <config.h> +#endif + #include <libautoz/autoz.h> #include <libsolipa/utils.h> diff --git a/src/titoli.c b/src/titoli.c index 6d26654..a0a3757 100644 --- a/src/titoli.c +++ b/src/titoli.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2012 Andrea Zagli <azagli@libero.it> + * Copyright (C) 2010-2013 Andrea Zagli <azagli@libero.it> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -17,6 +17,10 @@ * */ +#ifdef HAVE_CONFIG_H + #include <config.h> +#endif + #include <libautoz/autoz.h> #include <libsolipa/utils.h> diff --git a/src/uffici.c b/src/uffici.c index 6581814..24efa31 100644 --- a/src/uffici.c +++ b/src/uffici.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2012 Andrea Zagli <azagli@libero.it> + * Copyright (C) 2010-2013 Andrea Zagli <azagli@libero.it> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -17,6 +17,10 @@ * */ +#ifdef HAVE_CONFIG_H + #include <config.h> +#endif + #include <libautoz/autoz.h> #include <libsolipa/utils.h> @@ -77,7 +81,7 @@ struct _OrganigrammaUfficiPrivate GtkWidget *widget; GtkTreeSelection *selection; - GtkListStore *lstore_uffici; + GtkTreeStore *tstore_uffici; gboolean selezione; GtkWindow *wtransient; @@ -156,7 +160,7 @@ OrganigrammaUffici error = NULL; gtk_builder_add_objects_from_file (priv->commons->gtkbuilder, priv->commons->guifile, - g_strsplit (g_strconcat ("lstore_uffici|", + g_strsplit (g_strconcat ("tstore_uffici|", (selezione ? "w_uffici" : "vbx_uffici"), NULL), "|", -1), @@ -169,7 +173,7 @@ OrganigrammaUffici priv->widget = GTK_WIDGET (gtk_builder_get_object (priv->commons->gtkbuilder, (selezione ? "w_uffici" : "vbx_uffici"))); priv->selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (gtk_builder_get_object (priv->commons->gtkbuilder, "treeview4"))); - priv->lstore_uffici = GTK_LIST_STORE (gtk_builder_get_object (priv->commons->gtkbuilder, "lstore_uffici")); + priv->tstore_uffici = GTK_TREE_STORE (gtk_builder_get_object (priv->commons->gtkbuilder, "tstore_uffici")); if (priv->selezione) { @@ -233,7 +237,7 @@ GtkWidget /* PRIVATE */ static void -organigramma_uffici_carica (OrganigrammaUffici *uffici) +organigramma_uffici_carica_figli (OrganigrammaUffici *uffici, GtkTreeIter *iter_parent, guint id_uffici) { GtkTreeIter iter; @@ -249,12 +253,12 @@ organigramma_uffici_carica (OrganigrammaUffici *uffici) OrganigrammaUfficiClass *klass = ORGANIGRAMMA_UFFICI_GET_CLASS (uffici); OrganigrammaUfficiPrivate *priv = ORGANIGRAMMA_UFFICI_GET_PRIVATE (uffici); - gtk_list_store_clear (priv->lstore_uffici); - sql = g_strdup_printf ("SELECT c.id, c.nome" " FROM uffici AS c" " WHERE c.status <> 'E'" - " ORDER BY c.nome"); + " AND id_uffici = %d" + " ORDER BY c.nome", + id_uffici); dm = gdaex_query (priv->commons->gdaex, sql); g_free (sql); if (dm != NULL) @@ -274,11 +278,13 @@ organigramma_uffici_carica (OrganigrammaUffici *uffici) if (toshow) { - gtk_list_store_append (priv->lstore_uffici, &iter); - gtk_list_store_set (priv->lstore_uffici, &iter, + gtk_tree_store_append (priv->tstore_uffici, &iter, iter_parent); + gtk_tree_store_set (priv->tstore_uffici, &iter, COL_ID, id, COL_NOME, gdaex_data_model_get_field_value_stringify_at (dm, row, "nome"), -1); + + organigramma_uffici_carica_figli (uffici, &iter, id); } } @@ -286,6 +292,17 @@ organigramma_uffici_carica (OrganigrammaUffici *uffici) } } +static void +organigramma_uffici_carica (OrganigrammaUffici *uffici) +{ + OrganigrammaUfficiClass *klass = ORGANIGRAMMA_UFFICI_GET_CLASS (uffici); + OrganigrammaUfficiPrivate *priv = ORGANIGRAMMA_UFFICI_GET_PRIVATE (uffici); + + gtk_tree_store_clear (priv->tstore_uffici); + + organigramma_uffici_carica_figli (uffici, NULL, 0); +} + static void organigramma_uffici_modifica (OrganigrammaUffici *uffici) { @@ -298,7 +315,7 @@ organigramma_uffici_modifica (OrganigrammaUffici *uffici) { GtkWidget *w; - gtk_tree_model_get (GTK_TREE_MODEL (priv->lstore_uffici), &iter, + gtk_tree_model_get (GTK_TREE_MODEL (priv->tstore_uffici), &iter, COL_ID, &id, -1); @@ -331,7 +348,7 @@ organigramma_uffici_selezionato (OrganigrammaUffici *uffici) if (gtk_tree_selection_get_selected (priv->selection, NULL, &iter)) { - gtk_tree_model_get (GTK_TREE_MODEL (priv->lstore_uffici), &iter, + gtk_tree_model_get (GTK_TREE_MODEL (priv->tstore_uffici), &iter, COL_ID, &id, -1); @@ -435,7 +452,7 @@ organigramma_uffici_on_btn_elimina_clicked (GtkButton *button, GTK_BUTTONS_YES_NO, "Sicuro di voler eliminare l'ufficio selezionato?") == GTK_RESPONSE_YES) { - gtk_tree_model_get (GTK_TREE_MODEL (priv->lstore_uffici), &iter, + gtk_tree_model_get (GTK_TREE_MODEL (priv->tstore_uffici), &iter, COL_ID, &id, -1); diff --git a/src/ufficio.c b/src/ufficio.c index d6cdf42..c297a62 100644 --- a/src/ufficio.c +++ b/src/ufficio.c @@ -26,6 +26,7 @@ #include <libsolipa/utils.h> #include "ufficio.h" +#include "uffici.h" #include "strutture.h" #include "ufficionodo.h" #include "ufficioorario.h" @@ -64,13 +65,22 @@ static void organigramma_ufficio_on_stanza_aggiornato (gpointer instance, gpoint static void organigramma_ufficio_on_recapito_aggiornato (gpointer instance, gpointer user_data); static void organigramma_ufficio_on_orario_aggiornato (gpointer instance, gpointer user_data); +static void organigramma_ufficio_on_organigramma_ufficio_selezionato (gpointer instance, guint id, gpointer user_data); + +static void organigramma_ufficio_on_organigramma_ufficio_pulisci (GtkEntry *entry, + GtkEntryIconPosition icon_pos, + GdkEvent *event, + gpointer user_data); +static void organigramma_ufficio_on_btn_organigramma_ufficio_clicked (GtkButton *button, + gpointer user_data); + static void organigramma_ufficio_on_struttura_selezionato (gpointer instance, guint id, gpointer user_data); static gboolean organigramma_ufficio_on_w_organigramma_ufficio_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data); -static void organigramma_ufficio_on_btn_organigramma_ufficio_clicked (GtkButton *button, +static void organigramma_ufficio_on_btn_organigramma_struttura_clicked (GtkButton *button, gpointer user_data); static void organigramma_ufficio_on_btn_nodo_nuovo_clicked (GtkButton *button, @@ -272,9 +282,14 @@ OrganigrammaUfficio g_signal_connect (priv->w, "delete-event", G_CALLBACK (organigramma_ufficio_on_w_organigramma_ufficio_delete_event), (gpointer)a); - g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button31"), + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "entry48"), + "icon-press", G_CALLBACK (organigramma_ufficio_on_organigramma_ufficio_pulisci), (gpointer)a); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button164"), "clicked", G_CALLBACK (organigramma_ufficio_on_btn_organigramma_ufficio_clicked), (gpointer)a); + g_signal_connect (gtk_builder_get_object (priv->commons->gtkbuilder, "button31"), + "clicked", G_CALLBACK (organigramma_ufficio_on_btn_organigramma_struttura_clicked), (gpointer)a); + g_signal_connect (G_OBJECT (gtk_builder_get_object (priv->commons->gtkbuilder, "button28")), "clicked", G_CALLBACK (organigramma_ufficio_on_btn_nodo_nuovo_clicked), (gpointer)a); g_signal_connect (G_OBJECT (gtk_builder_get_object (priv->commons->gtkbuilder, "button42")), @@ -805,6 +820,28 @@ organigramma_ufficio_conferma_chiusura (OrganigrammaUfficio *ufficio) } /* CALLBACK */ +static void +organigramma_ufficio_on_organigramma_ufficio_selezionato (gpointer instance, guint id, gpointer user_data) +{ + OrganigrammaUfficio *f = (OrganigrammaUfficio *)user_data; + OrganigrammaUfficioPrivate *priv = ORGANIGRAMMA_UFFICIO_GET_PRIVATE (f); + + gtk_form_widget_set_value_stringify (gtk_form_get_form_widget_from_name (priv->form, "label169"), g_strdup_printf ("%d", id)); +} + +static void +organigramma_ufficio_on_organigramma_ufficio_pulisci (GtkEntry *entry, + GtkEntryIconPosition icon_pos, + GdkEvent *event, + gpointer user_data) +{ + OrganigrammaUfficio *f = (OrganigrammaUfficio *)user_data; + OrganigrammaUfficioPrivate *priv = ORGANIGRAMMA_UFFICIO_GET_PRIVATE (f); + + gtk_label_set_text (GTK_LABEL (gtk_builder_get_object (priv->commons->gtkbuilder, "label169")), ""); + gtk_entry_set_text (GTK_ENTRY (gtk_builder_get_object (priv->commons->gtkbuilder, "entry48")), ""); +} + static void organigramma_ufficio_on_struttura_selezionato (gpointer instance, guint id, gpointer user_data) { @@ -868,6 +905,26 @@ organigramma_ufficio_on_btn_organigramma_ufficio_clicked (GtkButton *button, OrganigrammaUfficioPrivate *priv = ORGANIGRAMMA_UFFICIO_GET_PRIVATE (rf); + OrganigrammaUffici *c = organigramma_uffici_new (priv->commons, TRUE); + + g_signal_connect (G_OBJECT (c), "selezionato", + G_CALLBACK (organigramma_ufficio_on_organigramma_ufficio_selezionato), user_data); + + w = organigramma_uffici_get_widget (c); + gtk_window_set_transient_for (GTK_WINDOW (w), GTK_WINDOW (priv->w)); + gtk_widget_show (w); +} + +static void +organigramma_ufficio_on_btn_organigramma_struttura_clicked (GtkButton *button, + gpointer user_data) +{ + GtkWidget *w; + + OrganigrammaUfficio *rf = (OrganigrammaUfficio *)user_data; + + OrganigrammaUfficioPrivate *priv = ORGANIGRAMMA_UFFICIO_GET_PRIVATE (rf); + OrganigrammaStrutture *c = organigramma_strutture_new (priv->commons, TRUE); g_signal_connect (G_OBJECT (c), "selezionato", -- 2.49.0