]> saetta.ns0.it Git - solipa/territorio/commitdiff
Aggiunte le funzioni TerritorioProvincia::is_in_regione,
authorAndrea Zagli <a.zagli@comune.scandicci.fi.it>
Thu, 18 Aug 2011 14:47:04 +0000 (16:47 +0200)
committerAndrea Zagli <a.zagli@comune.scandicci.fi.it>
Thu, 18 Aug 2011 14:47:04 +0000 (16:47 +0200)
TerritorioComune::is_in_provincia, TerritoriVia::is_in_comune.
Aggiunti i controlli di coerenza nel widget.

src/comune.c
src/comune.h
src/provincia.c
src/provincia.h
src/via.c
src/via.h
src/widget.c

index b62ec02384747abea34ee1b92576e2bf04990ba8..7c648bdfbe407800b2dfdfb318da5fd0e8c14f7c 100644 (file)
@@ -1,5 +1,5 @@
 /* 
- * Copyright (C) 2010 Andrea Zagli <azagli@libero.it>
+ * Copyright (C) 2010-2011 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
@@ -214,6 +214,38 @@ GtkWidget
        return priv->w;
 }
 
+gboolean
+territorio_comune_is_in_provincia (TerritorioCommons *commons, guint id_comuni, guint id_province)
+{
+       gchar *sql;
+       GdaDataModel *dm;
+
+       gboolean ret;
+
+       ret = FALSE;
+
+       sql = g_strdup_printf ("SELECT id"
+                              " FROM comuni"
+                              " WHERE id = %d"
+                              " AND id_province = %d"
+                              " AND status <> 'E'",
+                              id_comuni,
+                              id_province);
+       dm = gdaex_query (commons->gdaex, sql);
+       g_free (sql);
+       if (dm != NULL)
+               {
+                       if (gda_data_model_get_n_rows (dm) > 0)
+                               {
+                                       ret = TRUE;
+                               }
+
+                       g_object_unref (dm);
+               }
+
+       return ret;
+}
+
 /* PRIVATE */
 static void
 territorio_comune_carica (TerritorioComune *territorio_comune)
index df8fd277cbac40f4daef41fe71a87fb297cb7c79..2b02cc09401fef26f637a4416889140782fbf4e6 100644 (file)
@@ -1,5 +1,5 @@
 /* 
- * Copyright (C) 2010 Andrea Zagli <azagli@libero.it>
+ * Copyright (C) 2010-2011 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
@@ -59,6 +59,8 @@ TerritorioComune *territorio_comune_new (TerritorioCommons *commons, gint id);
 
 GtkWidget *territorio_comune_get_widget (TerritorioComune *territorio_comune);
 
+gboolean territorio_comune_is_in_provincia (TerritorioCommons *commons, guint id_comuni, guint id_province);
+
 
 G_END_DECLS
 
index 907ebe613e67c5b4ae6d52dc2b5b704f4d47da56..aab32c301cf79f5cec2afd7f534ecb0f333eff42 100644 (file)
@@ -1,5 +1,5 @@
 /* 
- * Copyright (C) 2010 Andrea Zagli <azagli@libero.it>
+ * Copyright (C) 2010-2011 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
@@ -214,6 +214,38 @@ GtkWidget
        return priv->w;
 }
 
+gboolean
+territorio_provincia_is_in_regione (TerritorioCommons *commons, guint id_province, guint id_regioni)
+{
+       gchar *sql;
+       GdaDataModel *dm;
+
+       gboolean ret;
+
+       ret = FALSE;
+
+       sql = g_strdup_printf ("SELECT id"
+                              " FROM province"
+                              " WHERE id = %d"
+                              " AND id_regioni = %d"
+                              " AND status <> 'E'",
+                              id_province,
+                              id_regioni);
+       dm = gdaex_query (commons->gdaex, sql);
+       g_free (sql);
+       if (dm != NULL)
+               {
+                       if (gda_data_model_get_n_rows (dm) > 0)
+                               {
+                                       ret = TRUE;
+                               }
+
+                       g_object_unref (dm);
+               }
+
+       return ret;
+}
+
 /* PRIVATE */
 static void
 territorio_provincia_carica (TerritorioProvincia *territorio_provincia)
index ee21fe2473e50641f2ec5a44f1f93488047be320..d4ba1dd9eaa915d208348930f0b10adb11c855ad 100644 (file)
@@ -1,5 +1,5 @@
 /* 
- * Copyright (C) 2010 Andrea Zagli <azagli@libero.it>
+ * Copyright (C) 2010-2011 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
@@ -59,6 +59,8 @@ TerritorioProvincia *territorio_provincia_new (TerritorioCommons *commons, gint
 
 GtkWidget *territorio_provincia_get_widget (TerritorioProvincia *territorio_provincia);
 
+gboolean territorio_provincia_is_in_regione (TerritorioCommons *commons, guint id_province, guint id_regioni);
+
 
 G_END_DECLS
 
index 22bf79444691304ed202d6135aa150afb96df42b..909cdbbc27143d5c75f01267d316a5285434f47a 100644 (file)
--- a/src/via.c
+++ b/src/via.c
@@ -1,5 +1,5 @@
 /* 
- * Copyright (C) 2010 Andrea Zagli <azagli@libero.it>
+ * Copyright (C) 2010-2011 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
@@ -219,6 +219,38 @@ GtkWidget
        return priv->w;
 }
 
+gboolean
+territorio_via_is_in_comune (TerritorioCommons *commons, guint id_vie, guint id_comuni)
+{
+       gchar *sql;
+       GdaDataModel *dm;
+
+       gboolean ret;
+
+       ret = FALSE;
+
+       sql = g_strdup_printf ("SELECT id"
+                              " FROM vie"
+                              " WHERE id = %d"
+                              " AND id_comuni = %d"
+                              " AND status <> 'E'",
+                              id_vie,
+                              id_comuni);
+       dm = gdaex_query (commons->gdaex, sql);
+       g_free (sql);
+       if (dm != NULL)
+               {
+                       if (gda_data_model_get_n_rows (dm) > 0)
+                               {
+                                       ret = TRUE;
+                               }
+
+                       g_object_unref (dm);
+               }
+
+       return ret;
+}
+
 /* PRIVATE */
 static void
 territorio_via_carica (TerritorioVia *territorio_via)
index 935bba2e8a6fc482c94bbfa2290d33da054c5d3c..30de0a508d021387b5edf12139102066e260f7fc 100644 (file)
--- a/src/via.h
+++ b/src/via.h
@@ -1,5 +1,5 @@
 /* 
- * Copyright (C) 2010 Andrea Zagli <azagli@libero.it>
+ * Copyright (C) 2010-2011 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
@@ -59,6 +59,8 @@ TerritorioVia *territorio_via_new (TerritorioCommons *commons, gint id);
 
 GtkWidget *territorio_via_get_widget (TerritorioVia *territorio_via);
 
+gboolean territorio_via_is_in_comune (TerritorioCommons *commons, guint id_vie, guint id_comuni);
+
 
 G_END_DECLS
 
index d2842cbaf96ac8adb7fc48f31c3285cc10102f46..541b2d2b0f69e3257ff0a95f9ee7a136171f769e 100644 (file)
@@ -82,6 +82,8 @@ static void territorio_widget_get_property (GObject *object,
 
 static void territorio_widget_set_transient (TerritorioWidget *twidget);
 
+static void territorio_widget_controllo_coerenza (TerritorioWidget *widget);
+
 static void territorio_widget_on_stato_aggiornato (gpointer instance, gpointer user_data);
 static void territorio_widget_on_regione_aggiornato (gpointer instance, gpointer user_data);
 static void territorio_widget_on_provincia_aggiornato (gpointer instance, gpointer user_data);
@@ -933,6 +935,37 @@ territorio_widget_set_transient (TerritorioWidget *twidget)
                }
 }
 
+static void
+territorio_widget_controllo_coerenza (TerritorioWidget *widget)
+{
+       TerritorioWidgetPrivate *priv = TERRITORIO_WIDGET_GET_PRIVATE (widget);
+
+       if (strtol (gtk_form_decoder_get_key (GTK_FORM_DECODER (priv->dec_regione)), NULL, 10) > 0
+           && !territorio_provincia_is_in_regione (priv->commons,
+                                                strtol (gtk_form_decoder_get_key (GTK_FORM_DECODER (priv->dec_provincia)), NULL, 10),
+                                                strtol (gtk_form_decoder_get_key (GTK_FORM_DECODER (priv->dec_regione)), NULL, 10)))
+               {
+                       gtk_form_decoder_set_key (GTK_FORM_DECODER (priv->dec_provincia), "0");
+                       gtk_form_decoder_set_key (GTK_FORM_DECODER (priv->dec_comune), "0");
+                       gtk_form_decoder_set_key (GTK_FORM_DECODER (priv->dec_via), "0");
+               }
+       else if (strtol (gtk_form_decoder_get_key (GTK_FORM_DECODER (priv->dec_provincia)), NULL, 10) > 0
+                && !territorio_comune_is_in_provincia (priv->commons,
+                                                    strtol (gtk_form_decoder_get_key (GTK_FORM_DECODER (priv->dec_comune)), NULL, 10),
+                                                    strtol (gtk_form_decoder_get_key (GTK_FORM_DECODER (priv->dec_provincia)), NULL, 10)))
+               {
+                       gtk_form_decoder_set_key (GTK_FORM_DECODER (priv->dec_comune), "0");
+                       gtk_form_decoder_set_key (GTK_FORM_DECODER (priv->dec_via), "0");
+               }
+       else if (strtol (gtk_form_decoder_get_key (GTK_FORM_DECODER (priv->dec_comune)), NULL, 10) > 0
+                && !territorio_via_is_in_comune (priv->commons,
+                                              strtol (gtk_form_decoder_get_key (GTK_FORM_DECODER (priv->dec_via)), NULL, 10),
+                                              strtol (gtk_form_decoder_get_key (GTK_FORM_DECODER (priv->dec_comune)), NULL, 10)))
+               {
+                       gtk_form_decoder_set_key (GTK_FORM_DECODER (priv->dec_via), "0");
+               }
+}
+
 /* CALLBACK */
 static void
 territorio_widget_on_stato_aggiornato (gpointer instance, gpointer user_data)
@@ -952,6 +985,8 @@ territorio_widget_on_regione_aggiornato (gpointer instance, gpointer user_data)
 
        gtk_form_decoder_set_key (GTK_FORM_DECODER (priv->dec_regione),
                                  gtk_form_decoder_get_key (GTK_FORM_DECODER (priv->dec_regione)));
+
+       territorio_widget_controllo_coerenza (f);
 }
 
 static void
@@ -962,6 +997,8 @@ territorio_widget_on_provincia_aggiornato (gpointer instance, gpointer user_data
 
        gtk_form_decoder_set_key (GTK_FORM_DECODER (priv->dec_provincia),
                                  gtk_form_decoder_get_key (GTK_FORM_DECODER (priv->dec_provincia)));
+
+       territorio_widget_controllo_coerenza (f);
 }
 
 static void
@@ -972,6 +1009,8 @@ territorio_widget_on_comune_aggiornato (gpointer instance, gpointer user_data)
 
        gtk_form_decoder_set_key (GTK_FORM_DECODER (priv->dec_comune),
                                  gtk_form_decoder_get_key (GTK_FORM_DECODER (priv->dec_comune)));
+
+       territorio_widget_controllo_coerenza (f);
 }
 
 static void
@@ -1000,6 +1039,8 @@ territorio_widget_on_regione_selezionato (gpointer instance, guint id, gpointer
        TerritorioWidgetPrivate *priv = TERRITORIO_WIDGET_GET_PRIVATE (f);
 
        gtk_form_decoder_set_key (GTK_FORM_DECODER (priv->dec_regione), g_strdup_printf ("%d", id));
+
+       territorio_widget_controllo_coerenza (f);
 }
 
 static void
@@ -1009,6 +1050,8 @@ territorio_widget_on_provincia_selezionato (gpointer instance, guint id, gpointe
        TerritorioWidgetPrivate *priv = TERRITORIO_WIDGET_GET_PRIVATE (f);
 
        gtk_form_decoder_set_key (GTK_FORM_DECODER (priv->dec_provincia), g_strdup_printf ("%d", id));
+
+       territorio_widget_controllo_coerenza (f);
 }
 
 static void
@@ -1018,6 +1061,8 @@ territorio_widget_on_comune_selezionato (gpointer instance, guint id, gpointer u
        TerritorioWidgetPrivate *priv = TERRITORIO_WIDGET_GET_PRIVATE (f);
 
        gtk_form_decoder_set_key (GTK_FORM_DECODER (priv->dec_comune), g_strdup_printf ("%d", id));
+
+       territorio_widget_controllo_coerenza (f);
 }
 
 static void