* new account wizard, based on GtkAssistant. Not finished yet.
authorDirk-Jan C. Binnema <dirk-jan.binnema@nokia.com>
Mon, 24 Jul 2006 14:40:08 +0000 (14:40 +0000)
committerDirk-Jan C. Binnema <dirk-jan.binnema@nokia.com>
Mon, 24 Jul 2006 14:40:08 +0000 (14:40 +0000)
pmo-trunk-r417

src/gtk2/Makefile.am
src/gtk2/modest-account-assistant.c [new file with mode: 0644]
src/gtk2/modest-account-assistant.h [new file with mode: 0644]

index 07b7508..a5e3c19 100644 (file)
@@ -26,8 +26,8 @@ libmodest_ui_la_SOURCES=              \
        modest-main-window.c          \
        modest-account-view-window.c  \
        modest-account-view-window.h  \
        modest-main-window.c          \
        modest-account-view-window.c  \
        modest-account-view-window.h  \
-       modest-account-wizard.c       \
-       modest-account-wizard.h       \
+       modest-account-assistant.c    \
+       modest-account-assistant.h    \
        modest-msg-window.c           \
        modest-msg-window.h
 
        modest-msg-window.c           \
        modest-msg-window.h
 
diff --git a/src/gtk2/modest-account-assistant.c b/src/gtk2/modest-account-assistant.c
new file mode 100644 (file)
index 0000000..2823f63
--- /dev/null
@@ -0,0 +1,382 @@
+/* modest-account-assistant.c */
+
+/* insert (c)/licensing information) */
+
+#include "modest-account-assistant.h"
+#include <string.h>
+
+/* 'private'/'protected' functions */
+static void                          modest_account_assistant_class_init    (ModestAccountAssistantClass *klass);
+static void                          modest_account_assistant_init          (ModestAccountAssistant *obj);
+static void                          modest_account_assistant_finalize      (GObject *obj);
+
+/* list my signals */
+enum {
+       /* MY_SIGNAL_1, */
+       /* MY_SIGNAL_2, */
+       LAST_SIGNAL
+};
+
+typedef struct _ModestAccountAssistantPrivate ModestAccountAssistantPrivate;
+struct _ModestAccountAssistantPrivate {
+       ModestWidgetFactory *factory;
+       
+       GtkWidget *entry_full_name;
+       GtkWidget *entry_email;
+       GtkWidget *entry_server_name;
+
+       GtkWidget *pop_imap_config;
+       GtkWidget *mbox_maildir_config;
+       
+
+};
+#define MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
+                                                      MODEST_TYPE_ACCOUNT_ASSISTANT, \
+                                                      ModestAccountAssistantPrivate))
+/* globals */
+static GtkAssistantClass *parent_class = NULL;
+
+/* uncomment the following if you have defined any signals */
+/* static guint signals[LAST_SIGNAL] = {0}; */
+
+GType
+modest_account_assistant_get_type (void)
+{
+       static GType my_type = 0;
+       if (!my_type) {
+               static const GTypeInfo my_info = {
+                       sizeof(ModestAccountAssistantClass),
+                       NULL,           /* base init */
+                       NULL,           /* base finalize */
+                       (GClassInitFunc) modest_account_assistant_class_init,
+                       NULL,           /* class finalize */
+                       NULL,           /* class data */
+                       sizeof(ModestAccountAssistant),
+                       1,              /* n_preallocs */
+                       (GInstanceInitFunc) modest_account_assistant_init,
+               };
+               my_type = g_type_register_static (GTK_TYPE_ASSISTANT,
+                                                 "ModestAccountAssistant",
+                                                 &my_info, 0);
+       }
+       return my_type;
+}
+
+static void
+modest_account_assistant_class_init (ModestAccountAssistantClass *klass)
+{
+       GObjectClass *gobject_class;
+       gobject_class = (GObjectClass*) klass;
+
+       parent_class            = g_type_class_peek_parent (klass);
+       gobject_class->finalize = modest_account_assistant_finalize;
+
+       g_type_class_add_private (gobject_class, sizeof(ModestAccountAssistantPrivate));
+
+       /* signal definitions go here, e.g.: */
+/*     signals[MY_SIGNAL_1] = */
+/*             g_signal_new ("my_signal_1",....); */
+/*     signals[MY_SIGNAL_2] = */
+/*             g_signal_new ("my_signal_2",....); */
+/*     etc. */
+}
+
+
+
+static void
+add_intro_page (ModestAccountAssistant *assistant)
+{
+       GtkWidget *page;
+       GtkWidget *label;
+       
+       page = gtk_vbox_new (FALSE, 6);
+       
+       label = gtk_label_new (
+               _("Welcome to the account assistant\n\n"
+                 "It will help to set up a new e-mail account\n"));
+       gtk_box_pack_start (GTK_BOX(page), label, FALSE, FALSE, 6);
+       gtk_widget_show_all (page);
+       
+       gtk_assistant_append_page (GTK_ASSISTANT(assistant), page);
+               
+       gtk_assistant_set_page_title (GTK_ASSISTANT(assistant), page,
+                                     _("Modest Account Assistant"));
+       gtk_assistant_set_page_type (GTK_ASSISTANT(assistant), page,
+                                    GTK_ASSISTANT_PAGE_INTRO);
+       gtk_assistant_set_page_complete (GTK_ASSISTANT(assistant),
+                                        page, TRUE);
+}
+
+
+static void
+set_current_page_complete (ModestAccountAssistant *self, gboolean complete)
+{
+       GtkWidget *page;
+       gint pageno;
+
+       pageno = gtk_assistant_get_current_page (GTK_ASSISTANT(self));
+       page   = gtk_assistant_get_nth_page (GTK_ASSISTANT(self), pageno);
+
+       gtk_assistant_set_page_complete (GTK_ASSISTANT(self), page, complete);
+}
+
+
+static void
+identity_page_update_completeness (GtkEditable *editable,
+                                  ModestAccountAssistant *self)
+{
+       ModestAccountAssistantPrivate *priv;
+       const gchar *txt;
+
+       priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
+
+       txt = gtk_entry_get_text (GTK_ENTRY(priv->entry_full_name));
+       if (!txt || strlen(txt) == 0) {
+               set_current_page_complete (self, FALSE);
+               return;
+       }
+
+       /* FIXME: regexp check for email address */
+       txt = gtk_entry_get_text (GTK_ENTRY(priv->entry_email));
+       if (!txt || strlen(txt) == 0) {
+               set_current_page_complete (self, FALSE);
+               return;
+       }
+       set_current_page_complete (self, TRUE);
+}
+
+
+static void
+add_identity_page (ModestAccountAssistant *self)
+{
+       GtkWidget *page;
+       GtkWidget *label;
+       GtkWidget *table;
+
+       ModestAccountAssistantPrivate *priv;
+
+       priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
+
+       priv->entry_full_name = gtk_entry_new_with_max_length (40);
+       priv->entry_email     = gtk_entry_new_with_max_length (40);
+
+       page = gtk_vbox_new (FALSE, 6);
+
+       label = gtk_label_new (
+               _("Please enter your name and your e-mail address below.\n\n"));
+       gtk_box_pack_start (GTK_BOX(page), label, FALSE, FALSE, 6);
+       
+       table = gtk_table_new (2,2, FALSE);
+       gtk_table_attach_defaults (GTK_TABLE(table),gtk_label_new (_("Full name")),
+                                  0,1,0,1);
+       gtk_table_attach_defaults (GTK_TABLE(table),gtk_label_new (_("E-mail address")),
+                                  0,1,1,2);
+
+       gtk_table_attach_defaults (GTK_TABLE(table),priv->entry_full_name,
+                                  1,2,0,1);
+       gtk_table_attach_defaults (GTK_TABLE(table),priv->entry_email,
+                                  1,2,1,2);
+
+       g_signal_connect (G_OBJECT(priv->entry_full_name), "changed",
+                         G_CALLBACK(identity_page_update_completeness),
+                         self);
+       g_signal_connect (G_OBJECT(priv->entry_email), "changed",
+                         G_CALLBACK(identity_page_update_completeness),
+                         self);
+       
+       gtk_box_pack_start (GTK_BOX(page), table, FALSE, FALSE, 6);
+       gtk_widget_show_all (page);
+       
+       gtk_assistant_append_page (GTK_ASSISTANT(self), page);
+       
+       gtk_assistant_set_page_title (GTK_ASSISTANT(self), page,
+                                     _("Identity"));
+       gtk_assistant_set_page_type (GTK_ASSISTANT(self), page,
+                                    GTK_ASSISTANT_PAGE_INTRO);
+       gtk_assistant_set_page_complete (GTK_ASSISTANT(self),
+                                        page, FALSE);
+}      
+
+
+/*
+
+static void
+mbox_maildir_configuration (ModestAccountAssistant *self)
+{
+       ModestAccountAssistantPrivate *priv;
+       GtkLabel *label;
+       GtkWidget *box, *hbox, *chooser;
+       
+       priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
+
+       box = gtk_vbox_new (FALSE, 6);
+       
+       label = gtk_label_new (NULL);
+       gtk_label_set_markup (_("Configuration"));
+
+       gtk_box_pack_start (GTK_BOX(box), label, FALSE, FALSE, 6);
+
+       label = gtk_label_new (_("Path"));
+       chooser = gtk_file_chooser_button_new (_("(none)"),
+                                                GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
+       hbox = gtk_hbox_new (FALSE, 6);
+       gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 6);
+       gtk_box_pack_start (GTK_BOX(hbox), chooser, FALSE, FALSE, 6);
+
+       gtk_box_pack_start (GTK_BOX(box), hbox, FALSE, FALSE, 6);
+       
+       gtk_box_pack_start (GTK_BOX(page), box, FALSE, FALSE, 6);
+       
+       table = gtk_table_new (2,2, FALSE);
+}
+
+*/
+
+
+static void
+add_receiving_page (ModestAccountAssistant *self)
+{
+       GtkWidget *page;
+       GtkWidget *label;
+       GtkWidget *table;
+       GtkWidget *box;
+
+       ModestAccountAssistantPrivate *priv;
+
+       priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
+       priv->entry_server_name   = gtk_entry_new_with_max_length (40);
+       
+       page = gtk_vbox_new (FALSE, 6);
+
+       gtk_box_pack_start (GTK_BOX(page),
+                           gtk_label_new (
+                                   _("Please select among the following options.\n")),
+                           FALSE, FALSE, 6);
+
+       box = gtk_hbox_new (FALSE, 6);
+       gtk_box_pack_start (GTK_BOX(box),
+                           gtk_label_new(_("Server type")),
+                           FALSE,FALSE,6);
+       gtk_box_pack_start (GTK_BOX(box),
+                           modest_widget_factory_get_store_combo (priv->factory),
+                           FALSE,FALSE,6);
+       gtk_box_pack_start (GTK_BOX(page), box, FALSE,FALSE, 6);
+
+       gtk_box_pack_start (GTK_BOX(page), gtk_hseparator_new(), TRUE, TRUE, 6);
+
+
+       gtk_widget_show_all (page);
+       gtk_assistant_append_page (GTK_ASSISTANT(self), page);
+               
+       gtk_assistant_set_page_title (GTK_ASSISTANT(self), page,
+                                     _("Receiving mail"));
+       gtk_assistant_set_page_type (GTK_ASSISTANT(self), page,
+                                    GTK_ASSISTANT_PAGE_INTRO);
+
+       gtk_assistant_set_page_complete (GTK_ASSISTANT(self),
+                                        page, TRUE);
+
+}
+
+
+
+static void
+add_sending_page (ModestAccountAssistant *self)
+{
+       GtkWidget *page;
+       GtkWidget *label;
+       GtkWidget *table;
+
+       ModestAccountAssistantPrivate *priv;
+
+       priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
+
+       //priv->combo_server_type   = gtk_entry_new_with_max_length (40);
+       priv->entry_server_name   = gtk_entry_new_with_max_length (40);
+
+       page = gtk_vbox_new (FALSE, 6);
+
+       label = gtk_label_new (
+               _("Please enter your name and your e-mail address below.\n"));
+       gtk_box_pack_start (GTK_BOX(page), label, FALSE, FALSE, 6);
+       
+       label = gtk_label_new(NULL);
+       gtk_label_set_markup (GTK_LABEL(label),_("<b>Required</b>"));
+       gtk_box_pack_start (GTK_BOX(page), label, FALSE, FALSE, 6);
+
+       gtk_widget_show_all (page);
+
+       gtk_assistant_append_page (GTK_ASSISTANT(self), page);
+
+       gtk_assistant_set_page_title (GTK_ASSISTANT(self), page,
+                                     _("Sending mail"));
+       gtk_assistant_set_page_type (GTK_ASSISTANT(self), page,
+                                    GTK_ASSISTANT_PAGE_CONFIRM);
+
+       gtk_assistant_set_page_complete (GTK_ASSISTANT(self),
+                                        page, FALSE);
+
+}
+
+
+
+
+
+static void
+modest_account_assistant_init (ModestAccountAssistant *obj)
+{      
+       ModestAccountAssistantPrivate *priv;
+               
+       priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(obj);
+
+       priv->factory = NULL;   
+}
+
+static void
+modest_account_assistant_finalize (GObject *obj)
+{
+       ModestAccountAssistantPrivate *priv;
+               
+       priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(obj);
+
+       if (priv->factory) {
+               g_object_unref (G_OBJECT(priv->factory));
+               priv->factory = NULL;
+       }
+
+       G_OBJECT_CLASS(parent_class)->finalize (obj);
+}
+
+
+
+GtkWidget*
+modest_account_assistant_new (ModestWidgetFactory *factory)
+{
+       GObject *obj;
+       ModestAccountAssistant *self;
+       ModestAccountAssistantPrivate *priv;
+               
+       g_return_val_if_fail (factory, NULL);
+       
+       obj  = g_object_new(MODEST_TYPE_ACCOUNT_ASSISTANT, NULL);
+       self = MODEST_ACCOUNT_ASSISTANT(obj);
+
+       priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
+       g_object_ref (factory);
+       priv->factory = factory;
+       
+       add_intro_page (self);
+       add_identity_page (self); 
+       add_receiving_page (self); 
+       add_sending_page (self); 
+
+       gtk_assistant_set_current_page (GTK_ASSISTANT(self), 0);
+       gtk_window_set_title (GTK_WINDOW(self),
+                             _("Modest Account Wizard"));
+       gtk_window_set_resizable (GTK_WINDOW(self), TRUE);      
+       gtk_window_set_default_size (GTK_WINDOW(self), 400, 400);
+
+       gtk_window_set_modal (GTK_WINDOW(self), TRUE);
+
+       return GTK_WIDGET(self);
+}
diff --git a/src/gtk2/modest-account-assistant.h b/src/gtk2/modest-account-assistant.h
new file mode 100644 (file)
index 0000000..aa09b5c
--- /dev/null
@@ -0,0 +1,44 @@
+/* modest-account-assistant.h */
+/* insert (c)/licensing information) */
+
+#ifndef __MODEST_ACCOUNT_ASSISTANT_H__
+#define __MODEST_ACCOUNT_ASSISTANT_H__
+
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+#include <modest-widget-factory.h>
+
+G_BEGIN_DECLS
+
+/* standard convenience macros */
+#define MODEST_TYPE_ACCOUNT_ASSISTANT             (modest_account_assistant_get_type())
+#define MODEST_ACCOUNT_ASSISTANT(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_ACCOUNT_ASSISTANT,ModestAccountAssistant))
+#define MODEST_ACCOUNT_ASSISTANT_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_ACCOUNT_ASSISTANT,ModestAccountAssistantClass))
+#define MODEST_IS_ACCOUNT_ASSISTANT(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_ACCOUNT_ASSISTANT))
+#define MODEST_IS_ACCOUNT_ASSISTANT_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_ACCOUNT_ASSISTANT))
+#define MODEST_ACCOUNT_ASSISTANT_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_ACCOUNT_ASSISTANT,ModestAccountAssistantClass))
+
+typedef struct _ModestAccountAssistant      ModestAccountAssistant;
+typedef struct _ModestAccountAssistantClass ModestAccountAssistantClass;
+
+struct _ModestAccountAssistant {
+        GtkAssistant parent;
+       /* insert public members, if any */
+};
+
+struct _ModestAccountAssistantClass {
+       GtkAssistantClass parent_class;
+       /* insert signal callback declarations, eg. */
+       /* void (* my_event) (ModestAccountAssistant* obj); */
+};
+
+/* member functions */
+GType        modest_account_assistant_get_type    (void) G_GNUC_CONST;
+
+GtkWidget*    modest_account_assistant_new        (ModestWidgetFactory *factory);
+
+
+G_END_DECLS
+
+#endif /* __MODEST_ACCOUNT_ASSISTANT_H__ */
+