From 8aa594e35304130fe5e913a1c4999c533f2cf52e Mon Sep 17 00:00:00 2001 From: Andrea Zagli Date: Fri, 29 Apr 2011 13:32:21 +0200 Subject: [PATCH] Inizio sviluppo SolipaMailUI (interfaccia grafica per l'invio di mail). --- data/libsolipa/gui/libsolipa.ui | 237 +++++++++++++++++++++++- src/Makefile.am | 2 + src/mailui.c | 315 ++++++++++++++++++++++++++++++++ src/mailui.h | 63 +++++++ tests/Makefile.am | 1 + tests/mailui.c | 85 +++++++++ tests/tests.ui | 63 +++++++ 7 files changed, 764 insertions(+), 2 deletions(-) create mode 100644 src/mailui.c create mode 100644 src/mailui.h create mode 100644 tests/mailui.c diff --git a/data/libsolipa/gui/libsolipa.ui b/data/libsolipa/gui/libsolipa.ui index 17ede5a..3dde99d 100644 --- a/data/libsolipa/gui/libsolipa.ui +++ b/data/libsolipa/gui/libsolipa.ui @@ -465,10 +465,10 @@ True vertical - False save - False False + False + False @@ -536,4 +536,237 @@ button2 + + 5 + True + 550 + 400 + True + normal + + + True + vertical + 2 + + + True + 7 + 2 + 5 + 5 + + + True + 0 + Da: + + + GTK_FILL + GTK_FILL + + + + + True + 0 + A: + + + 1 + 2 + GTK_FILL + GTK_FILL + + + + + True + True + + + + 1 + 2 + GTK_FILL + + + + + True + True + + + + 1 + 2 + 1 + 2 + GTK_FILL + + + + + True + 0 + Oggetto: + + + 4 + 5 + GTK_FILL + GTK_FILL + + + + + True + True + + + + 1 + 2 + 4 + 5 + GTK_FILL + + + + + True + + + 2 + 5 + 6 + GTK_FILL + + + + + True + True + automatic + automatic + etched-in + + + True + True + word + + + + + 2 + 6 + 7 + + + + + True + 0 + Cc: + + + 2 + 3 + GTK_FILL + GTK_FILL + + + + + True + 0 + Ccn: + + + 3 + 4 + GTK_FILL + GTK_FILL + + + + + True + True + + + + 1 + 2 + 2 + 3 + GTK_FILL + + + + + True + True + + + + 1 + 2 + 3 + 4 + GTK_FILL + + + + + 1 + + + + + True + end + + + gtk-cancel + True + True + True + True + + + False + False + 0 + + + + + gtk-ok + True + True + True + True + + + False + False + 1 + + + + + False + end + 0 + + + + + + button6 + button7 + + diff --git a/src/Makefile.am b/src/Makefile.am index b663c20..5a1e1fa 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -12,6 +12,7 @@ libsolipa_la_SOURCES = solipa.c \ allegato.c \ camelsession.c \ mail.c \ + mailui.c \ utils.c libsolipa_la_LDFLAGS = -no-undefined @@ -21,6 +22,7 @@ libsolipa_include_HEADERS = libsolipa.h \ allegato.h \ camelsession.h \ mail.h \ + mailui.h \ utils.h libsolipa_includedir = $(includedir)/libsolipa diff --git a/src/mailui.c b/src/mailui.c new file mode 100644 index 0000000..faa3243 --- /dev/null +++ b/src/mailui.c @@ -0,0 +1,315 @@ +/* + * 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 + */ + +#ifdef HAVE_CONFIG_H + #include +#endif + +#include "mailui.h" +#include "mail.h" + +enum +{ + PROP_0, + PROP_SMTP_URI, + PROP_FROM, + PROP_TO, + PROP_CC, + PROP_BCC, + PROP_SUBJECT, + PROP_BODY +}; + +static void solipa_mail_ui_class_init (SolipaMailUIClass *class); +static void solipa_mail_ui_init (SolipaMailUI *solipa_mail_ui); + +static void solipa_mail_ui_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static void solipa_mail_ui_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec); + +#define SOLIPA_MAIL_UI_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TYPE_SOLIPA_MAIL_UI, SolipaMailUIPrivate)) + +typedef struct _SolipaMailUIPrivate SolipaMailUIPrivate; +struct _SolipaMailUIPrivate + { + Solipa *solipa; + + gchar *smtp_uri; + + GtkWidget *dialog; + GtkWidget *vbox; + GtkWidget *widget; + + GtkWidget *from; + GtkWidget *to; + GtkWidget *cc; + GtkWidget *bcc; + GtkWidget *subject; + GtkWidget *body; + }; + +G_DEFINE_TYPE (SolipaMailUI, solipa_mail_ui, G_TYPE_OBJECT) + +static void +solipa_mail_ui_class_init (SolipaMailUIClass *class) +{ + GObjectClass *object_class = G_OBJECT_CLASS (class); + + object_class->set_property = solipa_mail_ui_set_property; + object_class->get_property = solipa_mail_ui_get_property; + + g_object_class_install_property (object_class, PROP_SMTP_URI, + g_param_spec_string ("smtp-uri", + "Smtp URI", + "Smtp URI", + "", + G_PARAM_READWRITE)); + + g_object_class_install_property (object_class, PROP_FROM, + g_param_spec_string ("from", + "From", + "From", + "", + G_PARAM_READWRITE)); + + g_object_class_install_property (object_class, PROP_TO, + g_param_spec_string ("to", + "To", + "To", + "", + G_PARAM_READWRITE)); + + g_object_class_install_property (object_class, PROP_CC, + g_param_spec_string ("cc", + "Cc", + "Cc", + "", + G_PARAM_READWRITE)); + + g_object_class_install_property (object_class, PROP_BCC, + g_param_spec_string ("bcc", + "Bcc", + "Bcc", + "", + G_PARAM_READWRITE)); + + g_object_class_install_property (object_class, PROP_SUBJECT, + g_param_spec_string ("subject", + "Subject", + "Subject", + "", + G_PARAM_READWRITE)); + + g_object_class_install_property (object_class, PROP_BODY, + g_param_spec_string ("body", + "Body", + "Body", + "", + G_PARAM_READWRITE)); + + g_type_class_add_private (object_class, sizeof (SolipaMailUIPrivate)); +} + +static void +solipa_mail_ui_init (SolipaMailUI *solipa_mail_ui) +{ + SolipaMailUIPrivate *priv = SOLIPA_MAIL_UI_GET_PRIVATE (solipa_mail_ui); +} + +/** + * solipa_mail_ui_new: + * @solipa: + * + * Returns: the newly created #SolipaMailUI object. + */ +SolipaMailUI +*solipa_mail_ui_new (Solipa *solipa) +{ + GtkBuilder *builder; + GError *error; + + SolipaMailUI *solipa_mail_ui; + SolipaMailUIPrivate *priv; + + g_return_val_if_fail (IS_SOLIPA (solipa), NULL); + + solipa_mail_ui = SOLIPA_MAIL_UI (g_object_new (solipa_mail_ui_get_type (), NULL)); + + priv = SOLIPA_MAIL_UI_GET_PRIVATE (solipa_mail_ui); + + priv->solipa = solipa; + + builder = solipa_get_gtkbuilder (solipa); + + if (!GTK_IS_BUILDER (builder)) + { + g_warning ("GtkBuilder non inizializzato."); + return NULL; + } + + error = NULL; + gtk_builder_add_objects_from_file (builder, + solipa_get_guifile (solipa), + g_strsplit ("diag_mail", + "|", -1), + &error); + if (error != NULL) + { + g_warning ("Errore nell'inzializzazione della gui: %s.", + error->message != NULL ? error->message : "no details"); + return NULL; + } + + priv->dialog = GTK_WIDGET (gtk_builder_get_object (builder, "diag_mail")); + priv->vbox = GTK_WIDGET (gtk_builder_get_object (builder, "dialog-vbox2")); + priv->widget = GTK_WIDGET (gtk_builder_get_object (builder, "table2")); + + priv->from = GTK_WIDGET (gtk_builder_get_object (builder, "entry3")); + priv->to = GTK_WIDGET (gtk_builder_get_object (builder, "entry4")); + priv->cc = GTK_WIDGET (gtk_builder_get_object (builder, "entry6")); + priv->bcc = GTK_WIDGET (gtk_builder_get_object (builder, "entry7")); + priv->subject = GTK_WIDGET (gtk_builder_get_object (builder, "entry5")); + priv->body = GTK_WIDGET (gtk_builder_get_object (builder, "textview1")); + + return solipa_mail_ui; +} + +GtkWidget +*solipa_mail_ui_get_dialog (SolipaMailUI *mailui) +{ + SolipaMailUIPrivate *priv = SOLIPA_MAIL_UI_GET_PRIVATE (mailui); + + if (gtk_widget_get_parent (priv->widget) == NULL) + { + gtk_container_add (GTK_CONTAINER (priv->vbox), priv->widget); + } + + return priv->dialog; +} + +GtkWidget +*solipa_mail_ui_get_widget (SolipaMailUI *mailui) +{ + SolipaMailUIPrivate *priv = SOLIPA_MAIL_UI_GET_PRIVATE (mailui); + + if (gtk_widget_get_parent (priv->widget) != NULL) + { + g_object_ref (priv->widget); + gtk_container_remove (GTK_CONTAINER (priv->vbox), priv->widget); + } + + return priv->widget; +} + +/* PRIVATE */ +static void +solipa_mail_ui_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + SolipaMailUI *solipa_mail_ui = (SolipaMailUI *)object; + + SolipaMailUIPrivate *priv = SOLIPA_MAIL_UI_GET_PRIVATE (solipa_mail_ui); + + switch (property_id) + { + case PROP_SMTP_URI: + priv->smtp_uri = g_strstrip (g_value_dup_string (value)); + break; + + case PROP_FROM: + gtk_entry_set_text (GTK_ENTRY (priv->from), g_strstrip (g_value_dup_string (value))); + break; + + case PROP_TO: + gtk_entry_set_text (GTK_ENTRY (priv->to), g_strstrip (g_value_dup_string (value))); + break; + + case PROP_CC: + gtk_entry_set_text (GTK_ENTRY (priv->cc), g_strstrip (g_value_dup_string (value))); + break; + + case PROP_BCC: + gtk_entry_set_text (GTK_ENTRY (priv->bcc), g_strstrip (g_value_dup_string (value))); + break; + + case PROP_SUBJECT: + gtk_entry_set_text (GTK_ENTRY (priv->subject), g_strstrip (g_value_dup_string (value))); + break; + + case PROP_BODY: + gtk_entry_set_text (GTK_ENTRY (priv->body), g_strstrip (g_value_dup_string (value))); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +solipa_mail_ui_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + SolipaMailUI *solipa_mail_ui = (SolipaMailUI *)object; + + SolipaMailUIPrivate *priv = SOLIPA_MAIL_UI_GET_PRIVATE (solipa_mail_ui); + + switch (property_id) + { + case PROP_SMTP_URI: + g_value_set_string (value, priv->smtp_uri); + break; + + case PROP_FROM: + g_value_set_string (value, gtk_entry_get_text (GTK_ENTRY (priv->from))); + break; + + case PROP_TO: + g_value_set_string (value, gtk_entry_get_text (GTK_ENTRY (priv->to))); + break; + + case PROP_CC: + g_value_set_string (value, gtk_entry_get_text (GTK_ENTRY (priv->cc))); + break; + + case PROP_BCC: + g_value_set_string (value, gtk_entry_get_text (GTK_ENTRY (priv->bcc))); + break; + + case PROP_SUBJECT: + g_value_set_string (value, gtk_entry_get_text (GTK_ENTRY (priv->subject))); + break; + + case PROP_BODY: + g_value_set_string (value, gtk_entry_get_text (GTK_ENTRY (priv->body))); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} diff --git a/src/mailui.h b/src/mailui.h new file mode 100644 index 0000000..e531990 --- /dev/null +++ b/src/mailui.h @@ -0,0 +1,63 @@ +/* + * 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 + */ + +#ifndef __SOLIPA_MAIL_UI_H__ +#define __SOLIPA_MAIL_UI_H__ + +#include +#include + +#include "solipa.h" + + +G_BEGIN_DECLS + + +#define TYPE_SOLIPA_MAIL_UI (solipa_mail_ui_get_type ()) +#define SOLIPA_MAIL_UI(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SOLIPA_MAIL_UI, SolipaMailUI)) +#define SOLIPA_MAIL_UI_UI_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SOLIPA_MAIL_UI, SolipaMailUIClass)) +#define IS_SOLIPA_MAIL_UI(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SOLIPA_MAIL_UI)) +#define IS_SOLIPA_MAIL_UI_UI_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SOLIPA_MAIL_UI)) +#define SOLIPA_MAIL_UI_UI_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SOLIPA_MAIL_UI, SolipaMailUIClass)) + +typedef struct _SolipaMailUI SolipaMailUI; +typedef struct _SolipaMailUIClass SolipaMailUIClass; + +struct _SolipaMailUI + { + GObject parent; + }; + +struct _SolipaMailUIClass + { + GObjectClass parent_class; + }; + +GType solipa_mail_ui_get_type (void) G_GNUC_CONST; + + +SolipaMailUI *solipa_mail_ui_new (Solipa *solipa); + +GtkWidget *solipa_mail_ui_get_dialog (SolipaMailUI *mailui); +GtkWidget *solipa_mail_ui_get_widget (SolipaMailUI *mailui); + + +G_END_DECLS + + +#endif /* __SOLIPA_MAIL_UI_H__ */ diff --git a/tests/Makefile.am b/tests/Makefile.am index 535ef49..60b78f5 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -11,6 +11,7 @@ LDADD = $(top_builddir)/src/libsolipa.la noinst_PROGRAMS = allegato \ mail \ + mailui \ utils \ utils_codfisc_piva \ utils_format_money \ diff --git a/tests/mailui.c b/tests/mailui.c new file mode 100644 index 0000000..e27bb66 --- /dev/null +++ b/tests/mailui.c @@ -0,0 +1,85 @@ +/* + * 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 + +GtkWidget *w; + +gboolean +on_w_delete_event (GtkWidget *widget, + GdkEvent *event, + gpointer user_data) +{ + return FALSE; +} + +int +main (int argc, char *argv[]) +{ + GError *error; + GtkBuilder *builder; + + Solipa *solipa; + SolipaMailUI *mailui; + + gtk_init (&argc, &argv); + + solipa = solipa_new (); + if (solipa == NULL) + { + g_error ("Errore nell'inizializzazione di Solipa."); + return 0; + } + + mailui = solipa_mail_ui_new (solipa); + if (mailui == NULL) + { + g_error ("Errore nell'inizializzazione di SolipaMailUI."); + return 0; + } + + builder = gtk_builder_new (); + error = NULL; + gtk_builder_add_objects_from_file (builder, GUIDIR "/tests.ui", + g_strsplit ("w_mail", + "|", -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_mail")); + g_signal_connect (w, "delete-event", G_CALLBACK (on_w_delete_event), (gpointer)solipa); + + gtk_box_pack_start (GTK_BOX (gtk_builder_get_object (builder, "vbox3")), + solipa_mail_ui_get_widget (mailui), + TRUE, TRUE, 5); + + gtk_widget_show (w); + + gtk_main (); + + g_object_unref (solipa); + + return 0; +} diff --git a/tests/tests.ui b/tests/tests.ui index 8d97153..47a76e5 100644 --- a/tests/tests.ui +++ b/tests/tests.ui @@ -15,4 +15,67 @@ + + Test SolipaMailUI + + + + True + 5 + vertical + 5 + + + True + vertical + + + + + + 0 + + + + + True + 5 + end + + + gtk-cancel + True + True + True + True + + + False + False + 0 + + + + + gtk-ok + True + True + True + True + + + False + False + 1 + + + + + False + 1 + + + + + -- 2.49.0