From: Andrea Zagli Date: Sat, 29 Jan 2011 16:02:26 +0000 (+0100) Subject: Continuo sviluppo SolipaAllegato. X-Git-Tag: Pre_EvolutionDataServer_2.32~7 X-Git-Url: https://saetta.ns0.it/gitweb?a=commitdiff_plain;h=a40922f741cb625a4a1641659ac0f9ea56e2218e;p=solipa%2Flibsolipa Continuo sviluppo SolipaAllegato. --- diff --git a/.gitignore b/.gitignore index 224f903..407fff9 100644 --- a/.gitignore +++ b/.gitignore @@ -47,6 +47,7 @@ stamp-it intltool-* Rules-quot *.exe +tests/allegato tests/mail tests/utils tests/utils_format_money diff --git a/data/libsolipa/gui/libsolipa.ui b/data/libsolipa/gui/libsolipa.ui index a0739a2..17ede5a 100644 --- a/data/libsolipa/gui/libsolipa.ui +++ b/data/libsolipa/gui/libsolipa.ui @@ -19,7 +19,7 @@ True 0 - Percorso del file + Percorso GTK_FILL @@ -44,6 +44,23 @@ 0 + + + True + True + True + + + True + gtk-open + + + + + False + 1 + + ... @@ -53,7 +70,7 @@ False - 1 + 2 @@ -67,11 +84,11 @@ True 0 - Data del file + Data - 2 - 3 + 1 + 2 GTK_FILL GTK_FILL @@ -86,8 +103,8 @@ 1 2 - 2 - 3 + 1 + 2 GTK_FILL @@ -95,11 +112,11 @@ True 0 - Dimensione del file + Dimensione - 3 - 4 + 2 + 3 GTK_FILL GTK_FILL @@ -114,8 +131,8 @@ 1 2 - 3 - 4 + 2 + 3 GTK_FILL @@ -130,8 +147,8 @@ 1 2 - 1 - 2 + 3 + 4 GTK_FILL @@ -142,8 +159,8 @@ Salva nel database - 1 - 2 + 3 + 4 GTK_FILL GTK_FILL @@ -449,8 +466,8 @@ True vertical False - False save + False False diff --git a/src/allegato.c b/src/allegato.c index 7d0e43a..a150d7b 100644 --- a/src/allegato.c +++ b/src/allegato.c @@ -34,12 +34,33 @@ static void solipa_allegato_get_property (GObject *object, GValue *value, GParamSpec *pspec); +static void solipa_allegato_on_file_pulisci (GtkEntry *entry, + GtkEntryIconPosition icon_pos, + GdkEvent *event, + gpointer user_data); +static void solipa_allegato_on_btn_file_clicked (GtkButton *button, + gpointer user_data); + +static void solipa_allegato_apri_allegato (GtkWindow *transient, const gchar *filename); + +static void solipa_allegato_on_btn_apri_clicked (GtkButton *button, + gpointer user_data); + #define SOLIPA_ALLEGATO_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TYPE_SOLIPA_ALLEGATO, SolipaAllegatoPrivate)) typedef struct _SolipaAllegatoPrivate SolipaAllegatoPrivate; struct _SolipaAllegatoPrivate { Solipa *solipa; + + GtkBuilder *gtkbuilder; + + GtkWidget *widget; + + GtkWidget *txt_percorso; + GtkWidget *txt_data; + GtkWidget *txt_dimensione; + GtkWidget *chk_salva_nel_db; }; G_DEFINE_TYPE (SolipaAllegato, solipa_allegato, G_TYPE_OBJECT) @@ -70,6 +91,8 @@ solipa_allegato_init (SolipaAllegato *solipa_allegato) SolipaAllegato *solipa_allegato_new (Solipa *solipa) { + GError *error; + SolipaAllegato *solipa_allegato; SolipaAllegatoPrivate *priv; @@ -81,9 +104,54 @@ SolipaAllegato priv->solipa = solipa; + priv->gtkbuilder = solipa_get_gtkbuilder (solipa); + + if (!GTK_IS_BUILDER (priv->gtkbuilder)) + { + g_warning ("GtkBuilder non inizializzato."); + return NULL; + } + + error = NULL; + gtk_builder_add_objects_from_file (priv->gtkbuilder, + solipa_get_guifile (priv->solipa), + g_strsplit ("table22", + "|", -1), + &error); + if (error != NULL) + { + g_warning ("Errore nell'inzializzazione della gui: %s.", + error->message != NULL ? error->message : "nessun dettaglio"); + return NULL; + } + + priv->widget = GTK_WIDGET (gtk_builder_get_object (priv->gtkbuilder, "table22")); + + priv->txt_percorso = GTK_WIDGET (gtk_builder_get_object (priv->gtkbuilder, "entry42")); + priv->txt_data = GTK_WIDGET (gtk_builder_get_object (priv->gtkbuilder, "entry44")); + priv->txt_dimensione = GTK_WIDGET (gtk_builder_get_object (priv->gtkbuilder, "entry45")); + priv->chk_salva_nel_db = GTK_WIDGET (gtk_builder_get_object (priv->gtkbuilder, "checkbutton2")); + + g_signal_connect (priv->txt_percorso, + "icon-press", G_CALLBACK (solipa_allegato_on_file_pulisci), (gpointer *)solipa_allegato); + g_signal_connect (gtk_builder_get_object (priv->gtkbuilder, "button5"), + "clicked", G_CALLBACK (solipa_allegato_on_btn_apri_clicked), (gpointer *)solipa_allegato); + g_signal_connect (gtk_builder_get_object (priv->gtkbuilder, "button144"), + "clicked", G_CALLBACK (solipa_allegato_on_btn_file_clicked), (gpointer *)solipa_allegato); + return solipa_allegato; } +GtkWidget +*solipa_allegato_get_widget (SolipaAllegato *solipa_allegato) +{ + SolipaAllegatoPrivate *priv; + + priv = SOLIPA_ALLEGATO_GET_PRIVATE (solipa_allegato); + + return priv->widget; +} + /* PRIVATE */ static void solipa_allegato_set_property (GObject *object, @@ -100,7 +168,7 @@ solipa_allegato_set_property (GObject *object, default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; - } + } } static void @@ -118,5 +186,144 @@ solipa_allegato_get_property (GObject *object, default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; - } + } +} +static void +solipa_allegato_on_file_pulisci (GtkEntry *entry, + GtkEntryIconPosition icon_pos, + GdkEvent *event, + gpointer user_data) +{ + SolipaAllegato *f = (SolipaAllegato *)user_data; + SolipaAllegatoPrivate *priv = SOLIPA_ALLEGATO_GET_PRIVATE (f); + + gtk_entry_set_text (GTK_ENTRY (priv->txt_percorso), ""); + gtk_entry_set_text (GTK_ENTRY (priv->txt_data), ""); + gtk_entry_set_text (GTK_ENTRY (priv->txt_dimensione), ""); +} + +static void +solipa_allegato_on_btn_file_clicked (GtkButton *button, + gpointer user_data) +{ + SolipaAllegato *allegato = (SolipaAllegato *)user_data; + SolipaAllegatoPrivate *priv = SOLIPA_ALLEGATO_GET_PRIVATE (allegato); + + GtkWidget *dialog; + + dialog = gtk_file_chooser_dialog_new ("Apri file", + GTK_WINDOW (gtk_widget_get_ancestor (priv->widget, GTK_TYPE_WINDOW)), + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, + NULL); + if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) + { + char *filename; + struct stat buf; + + filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); + + if (g_stat (filename, &buf) == 0) + { + struct tm *tm; + + tm = localtime (&buf.st_mtime); + + gtk_entry_set_text (GTK_ENTRY (priv->txt_percorso), filename); + gtk_entry_set_text (GTK_ENTRY (priv->txt_data), + g_strdup_printf ("%02d/%02d/%04d %02d.%02d.%02d", + tm->tm_mday, tm->tm_mon + 1, tm->tm_year + 1900, + tm->tm_hour, tm->tm_min, tm->tm_sec)); + gtk_entry_set_text (GTK_ENTRY (priv->txt_dimensione), g_strdup_printf ("%d", buf.st_size)); + } + else + { + /* file non esistente */ + /* non dovrebbe succedere */ + gtk_widget_destroy (dialog); + dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_ancestor (priv->widget, GTK_TYPE_WINDOW)), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Il file selezionato non esiste."); + gtk_dialog_run (GTK_DIALOG (dialog)); + + gtk_entry_set_text (GTK_ENTRY (priv->txt_percorso), ""); + gtk_entry_set_text (GTK_ENTRY (priv->txt_data), ""); + gtk_entry_set_text (GTK_ENTRY (priv->txt_dimensione), ""); + } + + g_free (filename); + } + gtk_widget_destroy (dialog); +} + +static void +solipa_allegato_apri_allegato (GtkWindow *transient, const gchar *filename) +{ + GtkWidget *dialog; + GFile *gfile; + GAppInfo *gappinfo; + GError *error; + GList *lfiles; + + gfile = g_file_new_for_commandline_arg (filename); + if (gfile == NULL) + { + dialog = gtk_message_dialog_new (transient, + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Impossibile aprire l'allegato selezionato."); + gtk_dialog_run (GTK_DIALOG (dialog)); + return; + } + + error = NULL; + gappinfo = g_file_query_default_handler (gfile, NULL, &error); + if (gappinfo == NULL) + { + dialog = gtk_message_dialog_new (transient, + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Impossibile aprire l'allegato selezionato: %s.", + (error != NULL & error->message != NULL ? error->message : "nessun dettaglio")); + gtk_dialog_run (GTK_DIALOG (dialog)); + return; + } + + lfiles = NULL; + lfiles = g_list_append (lfiles, (gpointer)gfile); + + error = NULL; + if (!g_app_info_launch (gappinfo, lfiles, NULL, &error)) + { + dialog = gtk_message_dialog_new (transient, + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Impossibile aprire l'allegato selezionato: %s.", + (error != NULL & error->message != NULL ? error->message : "nessun dettaglio")); + gtk_dialog_run (GTK_DIALOG (dialog)); + } +} + +static void +solipa_allegato_on_btn_apri_clicked (GtkButton *button, + gpointer user_data) +{ + SolipaAllegato *allegato = (SolipaAllegato *)user_data; + SolipaAllegatoPrivate *priv = SOLIPA_ALLEGATO_GET_PRIVATE (allegato); + + gchar *percorso; + + percorso = (gchar *)gtk_entry_get_text (GTK_ENTRY (priv->txt_percorso)); + if (percorso == NULL) return; + + percorso = g_strdup (percorso); + if (g_strcmp0 (g_strstrip (percorso), "") == 0) return; + + solipa_allegato_apri_allegato (GTK_WINDOW (gtk_widget_get_ancestor (priv->widget, GTK_TYPE_WINDOW)), percorso); } diff --git a/src/allegato.h b/src/allegato.h index 2bae299..e61b45b 100644 --- a/src/allegato.h +++ b/src/allegato.h @@ -53,6 +53,8 @@ GType solipa_allegato_get_type (void) G_GNUC_CONST; SolipaAllegato *solipa_allegato_new (Solipa *solipa); +GtkWidget *solipa_allegato_get_widget (SolipaAllegato *solipa_allegato); + G_END_DECLS diff --git a/tests/Makefile.am b/tests/Makefile.am index f63d05b..4b9b506 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -9,6 +9,7 @@ LIBS = $(SOLIPA_LIBS) \ LDADD = $(top_builddir)/src/libsolipa.la -noinst_PROGRAMS = mail \ +noinst_PROGRAMS = allegato \ + mail \ utils \ utils_format_money diff --git a/tests/allegato.c b/tests/allegato.c new file mode 100644 index 0000000..0aa255b --- /dev/null +++ b/tests/allegato.c @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2011 Andrea Zagli + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include + +int +main (int argc, char *argv[]) +{ + GError *error; + GtkBuilder *builder; + + Solipa *solipa; + SolipaAllegato *allegato; + + GtkWidget *w; + + gtk_init (&argc, &argv); + + solipa = solipa_new (); + if (solipa == NULL) + { + g_error ("Errore nell'inizializzazione di Solipa."); + return 0; + } + + allegato = solipa_allegato_new (solipa); + if (allegato == NULL) + { + g_error ("Errore nell'inizializzazione di SolipaAllegato."); + return 0; + } + + builder = gtk_builder_new (); + error = NULL; + gtk_builder_add_objects_from_file (builder, GUIDIR "/tests.ui", + g_strsplit ("w_allegato", + "|", -1), + &error); + if (error != NULL) + { + g_error ("Errore nel caricamento della gui: %s.", + error != NULL && error->message != NULL ? error->message : "nessun dettaglio"); + return 0; + } + + gtk_builder_connect_signals (builder, NULL); + + w = GTK_WIDGET (gtk_builder_get_object (builder, "w_allegato")); + + gtk_box_pack_start (GTK_BOX (gtk_builder_get_object (builder, "vbox1")), + solipa_allegato_get_widget (allegato), + TRUE, TRUE, 5); + + gtk_widget_show (w); + + gtk_main (); + + return 0; +} diff --git a/tests/tests.ui b/tests/tests.ui new file mode 100644 index 0000000..68fe913 --- /dev/null +++ b/tests/tests.ui @@ -0,0 +1,19 @@ + + + + + + Test SolipaAllegato + + + + + True + vertical + + + + + + +