From: Dirk-Jan C. Binnema Date: Mon, 31 Jul 2006 06:38:12 +0000 (+0000) Subject: * refactored account setup wizard (assistant), with specifics for transport/store X-Git-Tag: git_migration_finished~4444 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=bc05794553fcec813da11e3ac979b45b491e1b45 * refactored account setup wizard (assistant), with specifics for transport/store going to modest-store-widget and modest-transport widget. * got assistant to work, still quite crude though * various other updates pmo-trunk-r432 --- diff --git a/src/gtk2/Makefile.am b/src/gtk2/Makefile.am index 5e874cb..c0086e4 100644 --- a/src/gtk2/Makefile.am +++ b/src/gtk2/Makefile.am @@ -1,6 +1,6 @@ # # Makefile.am -# Time-stamp: <2006-07-25 08:52:20 (djcb)> +# Time-stamp: <2006-07-29 20:47:31 (djcb)> # # # use Automake 'trick' ==> convenience static libraries, which @@ -29,7 +29,11 @@ libmodest_ui_la_SOURCES= \ modest-account-assistant.c \ modest-account-assistant.h \ modest-edit-msg-window.c \ - modest-edit-msg-window.h + modest-edit-msg-window.h \ + modest-transport-widget.c \ + modest-transport-widget.h \ + modest-store-widget.c \ + modest-store-widget.h LDADD = \ $(MODEST_GSTUFF_LIBS) \ diff --git a/src/gtk2/modest-account-assistant.c b/src/gtk2/modest-account-assistant.c index 19b5703..ddd89c9 100644 --- a/src/gtk2/modest-account-assistant.c +++ b/src/gtk2/modest-account-assistant.c @@ -28,6 +28,9 @@ */ #include "modest-account-assistant.h" +#include "modest-store-widget.h" +#include "modest-transport-widget.h" + #include /* 'private'/'protected' functions */ @@ -44,36 +47,19 @@ enum { typedef struct _ModestAccountAssistantPrivate ModestAccountAssistantPrivate; struct _ModestAccountAssistantPrivate { + ModestWidgetFactory *factory; - + ModestAccountMgr *account_mgr; + + GtkWidget *account_name; GtkWidget *fullname; GtkWidget *email; + + GtkWidget *store_widget; + GtkWidget *transport_widget; - /* sending */ - GtkWidget *servertype_s; - GtkWidget *servername_s; - GtkWidget *username_s; - GtkWidget *server_type_s; - - /* receiving */ - GtkWidget *servertype_r; - GtkWidget *servername_r; - GtkWidget *username_r; - GtkWidget *server_type_r; - - GtkWidget *remember_pwd; - GtkWidget *maildir_chooser; - GtkWidget *mbox_chooser; - - GtkWidget *maildir_config; - GtkWidget *mbox_config; - GtkWidget *imap_pop_config; - GtkWidget *smtp_config; - - GtkWidget *receiving_subwidget; - GtkWidget *sending_subwidget; - GtkWidget *receiving_child; - GtkWidget *sending_child; + GtkWidget *transport_holder; + GtkWidget *store_holder; }; #define MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ @@ -132,8 +118,7 @@ modest_account_assistant_class_init (ModestAccountAssistantClass *klass) static void add_intro_page (ModestAccountAssistant *assistant) { - GtkWidget *page; - GtkWidget *label; + GtkWidget *page, *label; page = gtk_vbox_new (FALSE, 6); @@ -195,10 +180,7 @@ identity_page_update_completeness (GtkEditable *editable, static void add_identity_page (ModestAccountAssistant *self) { - GtkWidget *page; - GtkWidget *label; - GtkWidget *table; - + GtkWidget *page, *label, *table; ModestAccountAssistantPrivate *priv; priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self); @@ -243,138 +225,6 @@ add_identity_page (ModestAccountAssistant *self) } - -static GtkWidget * -maildir_configuration (ModestAccountAssistant *self) -{ - ModestAccountAssistantPrivate *priv; - GtkWidget *label, *box, *hbox; - - priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self); - box = gtk_vbox_new (FALSE, 6); - - label = gtk_label_new (NULL); - gtk_label_set_markup (GTK_LABEL(label), - _("Maildir configuration")); - gtk_box_pack_start (GTK_BOX(box), label, FALSE, FALSE, 6); - label = gtk_label_new (NULL); - gtk_label_set_markup (GTK_LABEL(label), - _("Please select the path to your Maildir below")); - gtk_box_pack_start (GTK_BOX(box), label, FALSE, FALSE, 6); - - label = gtk_label_new (_("Path:")); - - priv->maildir_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), priv->maildir_chooser, FALSE, FALSE, 6); - - gtk_box_pack_start (GTK_BOX(box), hbox, FALSE, FALSE, 6); - - return box; -} - - -static GtkWidget* -mbox_configuration (ModestAccountAssistant *self) -{ - ModestAccountAssistantPrivate *priv; - GtkWidget *label, *box, *hbox; - - priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self); - box = gtk_vbox_new (FALSE, 6); - - label = gtk_label_new (NULL); - gtk_label_set_markup (GTK_LABEL(label), - _("Mbox configuration")); - gtk_box_pack_start (GTK_BOX(box), label, FALSE, FALSE, 6); - label = gtk_label_new (NULL); - gtk_label_set_markup (GTK_LABEL(label), - _("Please select your mbox file below")); - gtk_box_pack_start (GTK_BOX(box), label, FALSE, FALSE, 6); - - label = gtk_label_new (_("mbox:")); - - priv->mbox_chooser = - gtk_file_chooser_button_new (_("(none)"), - GTK_FILE_CHOOSER_ACTION_OPEN); - hbox = gtk_hbox_new (FALSE, 6); - gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 6); - gtk_box_pack_start (GTK_BOX(hbox), priv->mbox_chooser, FALSE, FALSE, 6); - - gtk_box_pack_start (GTK_BOX(box), hbox, FALSE, FALSE, 6); - - return box; -} - - -static GtkWidget* -imap_pop_configuration (ModestAccountAssistant *self) -{ - ModestAccountAssistantPrivate *priv; - GtkWidget *label, *box, *hbox; - - priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self); - box = gtk_vbox_new (FALSE, 6); - - label = gtk_label_new (NULL); - gtk_label_set_markup (GTK_LABEL(label),_("Server configuration")); - gtk_box_pack_start (GTK_BOX(box), label, FALSE, FALSE, 6); - - hbox = gtk_hbox_new (FALSE, 6); - label = gtk_label_new (_("Username:")); - if (!priv->username_r) - priv->username_r = gtk_entry_new_with_max_length (40); - gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX(hbox), priv->username_r,FALSE, FALSE, 6); - gtk_box_pack_start (GTK_BOX(box), hbox, FALSE, FALSE, 0); - - hbox = gtk_hbox_new (FALSE, 6); - label = gtk_label_new (_("Server:")); - if (!priv->servername_r) - priv->servername_r = gtk_entry_new_with_max_length (40); - gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX(hbox), priv->servername_r,FALSE, FALSE, 6); - gtk_box_pack_start (GTK_BOX(box), hbox, FALSE, FALSE, 0); - - label = gtk_label_new(NULL); - gtk_label_set_markup (GTK_LABEL(label),_("Security")); - gtk_box_pack_start (GTK_BOX(box), label, FALSE, FALSE, 0); - - hbox = gtk_hbox_new (FALSE, 6); - label = gtk_label_new(NULL); - gtk_label_set_text (GTK_LABEL(label),_("Connection type:")); - gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX(hbox), modest_widget_factory_get_combo_box - (priv->factory, MODEST_COMBO_BOX_TYPE_SECURITY_PROTOS), - FALSE, FALSE,0); - gtk_box_pack_start (GTK_BOX(box), hbox, FALSE, FALSE, 0); - - hbox = gtk_hbox_new (FALSE, 6); - label = gtk_label_new(NULL); - - gtk_label_set_text (GTK_LABEL(label),_("Authentication:")); - gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 6); - gtk_box_pack_start (GTK_BOX(hbox), modest_widget_factory_get_combo_box - (priv->factory, MODEST_COMBO_BOX_TYPE_AUTH_PROTOS), - FALSE, FALSE, 0); - - priv->remember_pwd = - gtk_check_button_new_with_label (_("Remember password")); - gtk_box_pack_start (GTK_BOX(hbox),priv->remember_pwd, - FALSE, FALSE, 0); - - - gtk_box_pack_start (GTK_BOX(box), hbox, FALSE, FALSE, 0); - - return box; -} - - - static void on_receiving_combo_box_changed (GtkComboBox *combo, ModestAccountAssistant *self) { @@ -384,37 +234,16 @@ on_receiving_combo_box_changed (GtkComboBox *combo, ModestAccountAssistant *self priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self); chosen = gtk_combo_box_get_active_text (GTK_COMBO_BOX(combo)); - if (priv->receiving_child) - gtk_container_remove (GTK_CONTAINER(priv->receiving_subwidget), - priv->receiving_child); + if (priv->store_widget) + gtk_container_remove (GTK_CONTAINER(priv->store_holder), + priv->store_widget); - if (strcmp (chosen, MODEST_PROTO_POP) == 0 || - strcmp (chosen, MODEST_PROTO_IMAP) == 0) { - if (!priv->imap_pop_config) - priv->imap_pop_config = imap_pop_configuration (self); - g_object_ref (G_OBJECT(priv->imap_pop_config)); - priv->receiving_child = priv->imap_pop_config; - - } else if (strcmp (chosen, MODEST_PROTO_MAILDIR) == 0) { - - if (!priv->maildir_config) - priv->maildir_config = maildir_configuration (self); - g_object_ref (G_OBJECT(priv->maildir_config)); - priv->receiving_child = priv->maildir_config; - - } else if (strcmp (chosen, MODEST_PROTO_MBOX) == 0) { - if (!priv->mbox_config) - priv->mbox_config = mbox_configuration (self); - g_object_ref (G_OBJECT(priv->mbox_config)); - priv->receiving_child = priv->mbox_config; - } else - priv->receiving_child = gtk_label_new (NULL); + priv->store_widget = modest_store_widget_new (priv->factory, chosen); + gtk_container_add (GTK_CONTAINER(priv->store_holder), + priv->store_widget); - gtk_container_add (GTK_CONTAINER(priv->receiving_subwidget), - priv->receiving_child); - - gtk_widget_show_all (priv->receiving_subwidget); + gtk_widget_show_all (priv->store_holder); } @@ -447,8 +276,8 @@ add_receiving_page (ModestAccountAssistant *self) gtk_box_pack_start (GTK_BOX(page), gtk_hseparator_new(), FALSE, FALSE, 0); - priv->receiving_subwidget = gtk_hbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX(page), priv->receiving_subwidget, + priv->store_holder = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX(page), priv->store_holder, TRUE, TRUE, 0); gtk_assistant_append_page (GTK_ASSISTANT(self), page); @@ -457,29 +286,12 @@ add_receiving_page (ModestAccountAssistant *self) _("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); gtk_widget_show_all (page); } -static GtkWidget* -smtp_configuration (ModestAccountAssistant *self) -{ - ModestAccountAssistantPrivate *priv; - GtkWidget *label, *box; - - priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self); - box = gtk_vbox_new (FALSE, 6); - - label = gtk_label_new (NULL); - gtk_label_set_markup (GTK_LABEL(label), - _("SMTP configuration")); - gtk_box_pack_start (GTK_BOX(box), label, FALSE, FALSE, 6); - - return box; -} static void @@ -492,24 +304,17 @@ on_sending_combo_box_changed (GtkComboBox *combo, ModestAccountAssistant *self) chosen = gtk_combo_box_get_active_text (GTK_COMBO_BOX(combo)); - if (priv->sending_child) - gtk_container_remove (GTK_CONTAINER(priv->sending_subwidget), - priv->sending_child); + if (priv->transport_widget) + gtk_container_remove (GTK_CONTAINER(priv->transport_holder), + priv->transport_widget); - if (strcmp (chosen, MODEST_PROTO_SENDMAIL) == 0) { - priv->sending_child = gtk_label_new (NULL); + priv->transport_widget = modest_transport_widget_new (priv->factory, + chosen); - } else if (strcmp (chosen, MODEST_PROTO_SMTP) == 0) { - if (!priv->smtp_config) - priv->smtp_config = smtp_configuration (self); - g_object_ref (G_OBJECT(priv->smtp_config)); - priv->sending_child = priv->smtp_config; - } else - g_assert_not_reached (); - - gtk_container_add (GTK_CONTAINER(priv->sending_subwidget), - priv->sending_child); - gtk_widget_show_all (priv->sending_subwidget); + gtk_container_add (GTK_CONTAINER(priv->transport_holder), + priv->transport_widget); + + gtk_widget_show_all (priv->transport_holder); } @@ -527,25 +332,25 @@ add_sending_page (ModestAccountAssistant *self) gtk_box_pack_start (GTK_BOX(page), gtk_label_new ( _("Please select among the following options")), - FALSE, FALSE, 6); - box = gtk_hbox_new (FALSE, 6); + FALSE, FALSE, 0); + box = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX(box), gtk_label_new(_("Server type")), - FALSE,FALSE,6); + FALSE,FALSE,0); combo = modest_widget_factory_get_combo_box (priv->factory, MODEST_COMBO_BOX_TYPE_TRANSPORT_PROTOS); g_signal_connect (G_OBJECT(combo), "changed", G_CALLBACK(on_sending_combo_box_changed), self); - gtk_box_pack_start (GTK_BOX(box), combo, FALSE,FALSE,6); - gtk_box_pack_start (GTK_BOX(page), box, FALSE,FALSE, 6); + gtk_box_pack_start (GTK_BOX(box), combo, FALSE,FALSE,0); + gtk_box_pack_start (GTK_BOX(page), box, FALSE,FALSE, 0); gtk_box_pack_start (GTK_BOX(page), gtk_hseparator_new(), FALSE, FALSE, 0); - priv->sending_subwidget = gtk_hbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX(page), priv->sending_subwidget, - TRUE, TRUE, 0); + priv->transport_holder = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX(page), priv->transport_holder, + FALSE, FALSE, 0); gtk_assistant_append_page (GTK_ASSISTANT(self), page); @@ -553,11 +358,50 @@ add_sending_page (ModestAccountAssistant *self) _("Sending mail")); gtk_assistant_set_page_type (GTK_ASSISTANT(self), page, GTK_ASSISTANT_PAGE_INTRO); + gtk_assistant_set_page_complete (GTK_ASSISTANT(self), + page, TRUE); + gtk_widget_show_all (page); +} + + + +static void +add_final_page (ModestAccountAssistant *self) +{ + GtkWidget *page, *box; + ModestAccountAssistantPrivate *priv; + + priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self); + page = gtk_vbox_new (FALSE, 6); + + gtk_box_pack_start (GTK_BOX(page), + gtk_label_new ( + _("We're almost done. Press 'Apply' to store this new account")), + FALSE, FALSE, 6); + box = gtk_hbox_new (FALSE, 6); + priv->account_name = + gtk_entry_new_with_max_length (40); + gtk_entry_set_text (GTK_ENTRY(priv->account_name), + gtk_entry_get_text(GTK_ENTRY(priv->email))); + gtk_box_pack_start (GTK_BOX(box),gtk_label_new(_("Account name:")), + FALSE,FALSE,6); + gtk_box_pack_start (GTK_BOX(box),priv->account_name , FALSE,FALSE,6); + + gtk_box_pack_start (GTK_BOX(page), box, FALSE, FALSE, 6); + + gtk_assistant_append_page (GTK_ASSISTANT(self), page); + + gtk_assistant_set_page_title (GTK_ASSISTANT(self), page, + _("Account Management")); + gtk_assistant_set_page_type (GTK_ASSISTANT(self), page, + GTK_ASSISTANT_PAGE_CONFIRM); gtk_assistant_set_page_complete (GTK_ASSISTANT(self), page, TRUE); gtk_widget_show_all (page); } + + static void @@ -565,17 +409,12 @@ modest_account_assistant_init (ModestAccountAssistant *obj) { ModestAccountAssistantPrivate *priv; - priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(obj); - + priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(obj); priv->factory = NULL; + priv->account_mgr = NULL; - priv->maildir_config = NULL; - priv->mbox_config = NULL; - priv->imap_pop_config = NULL; - priv->smtp_config = NULL; - - priv->receiving_child = NULL; - priv->sending_child = NULL; + priv->store_widget = NULL; + priv->transport_widget = NULL; } static void @@ -589,6 +428,13 @@ modest_account_assistant_finalize (GObject *obj) g_object_unref (G_OBJECT(priv->factory)); priv->factory = NULL; } + + if (priv->account_mgr) { + g_object_unref (G_OBJECT(priv->account_mgr)); + priv->account_mgr = NULL; + } + + G_OBJECT_CLASS(parent_class)->finalize (obj); } @@ -630,31 +476,112 @@ on_cancel (ModestAccountAssistant *self, gpointer user_data) break; default: g_assert_not_reached (); - }; - + }; +} + +static const gchar* +get_account_name (ModestAccountAssistant *self) +{ + ModestAccountAssistantPrivate *priv; + priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self); + + return gtk_entry_get_text (GTK_ENTRY(priv->account_name)); +} + +static const gchar* +get_fullname (ModestAccountAssistant *self) +{ + ModestAccountAssistantPrivate *priv; + priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self); + + return gtk_entry_get_text (GTK_ENTRY(priv->fullname)); +} + + + +static const gchar* +get_email (ModestAccountAssistant *self) +{ + ModestAccountAssistantPrivate *priv; + priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self); + + return gtk_entry_get_text (GTK_ENTRY(priv->email)); } + +static void +on_apply (ModestAccountAssistant *self, gpointer user_data) +{ + ModestAccountAssistantPrivate *priv; + gchar *store_name; + const gchar *account_name; + ModestStoreWidget *store; + + priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self); + + /* create account */ + + /* create server account -> store */ + store = MODEST_STORE_WIDGET(priv->store_widget); + store_name = g_strdup_printf ("%s:%s@%s", + modest_store_widget_get_proto (store), + modest_store_widget_get_username (store), + modest_store_widget_get_servername (store)); + + modest_account_mgr_add_server_account (priv->account_mgr, + store_name, + modest_store_widget_get_servername (store), + modest_store_widget_get_username (store), + NULL, + modest_store_widget_get_proto (store)); + + /* create server account -> transport */ + account_name = get_account_name (self); + modest_account_mgr_add_account (priv->account_mgr, + account_name, + store_name, + NULL, NULL); + modest_account_mgr_set_string (priv->account_mgr, + account_name, + MODEST_ACCOUNT_FULLNAME, + get_fullname(self), FALSE, NULL); + modest_account_mgr_set_string (priv->account_mgr, + account_name, + MODEST_ACCOUNT_EMAIL, + get_email(self), FALSE, NULL); + + g_free (store_name); +} + + + GtkWidget* -modest_account_assistant_new (ModestWidgetFactory *factory) +modest_account_assistant_new (ModestAccountMgr *account_mgr, ModestWidgetFactory *factory) { GObject *obj; ModestAccountAssistant *self; ModestAccountAssistantPrivate *priv; g_return_val_if_fail (factory, NULL); + g_return_val_if_fail (account_mgr, 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; + g_object_ref (account_mgr); + priv->account_mgr = account_mgr; + add_intro_page (self); add_identity_page (self); add_receiving_page (self); - add_sending_page (self); + add_sending_page (self); + add_final_page (self); gtk_assistant_set_current_page (GTK_ASSISTANT(self), 0); gtk_window_set_title (GTK_WINDOW(self), @@ -664,6 +591,8 @@ modest_account_assistant_new (ModestWidgetFactory *factory) gtk_window_set_modal (GTK_WINDOW(self), TRUE); + g_signal_connect (G_OBJECT(self), "apply", + G_CALLBACK(on_apply), NULL); g_signal_connect (G_OBJECT(self), "cancel", G_CALLBACK(on_cancel), NULL); diff --git a/src/gtk2/modest-account-assistant.h b/src/gtk2/modest-account-assistant.h index 9f4f9e8..9fce688 100644 --- a/src/gtk2/modest-account-assistant.h +++ b/src/gtk2/modest-account-assistant.h @@ -33,6 +33,7 @@ #include #include #include +#include G_BEGIN_DECLS @@ -61,7 +62,8 @@ struct _ModestAccountAssistantClass { /* member functions */ GType modest_account_assistant_get_type (void) G_GNUC_CONST; -GtkWidget* modest_account_assistant_new (ModestWidgetFactory *factory); +GtkWidget* modest_account_assistant_new (ModestAccountMgr* account_mgr, + ModestWidgetFactory *factory); G_END_DECLS diff --git a/src/gtk2/modest-account-view-window.c b/src/gtk2/modest-account-view-window.c index dd4d48f..0109396 100644 --- a/src/gtk2/modest-account-view-window.c +++ b/src/gtk2/modest-account-view-window.c @@ -45,7 +45,7 @@ enum { typedef struct _ModestAccountViewWindowPrivate ModestAccountViewWindowPrivate; struct _ModestAccountViewWindowPrivate { - ModestConf *conf; + ModestAccountMgr *account_mgr; ModestWidgetFactory *widget_factory; GtkWidget *edit_button, *remove_button; }; @@ -107,7 +107,7 @@ modest_account_view_window_init (ModestAccountViewWindow *obj) priv = MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE(obj); - priv->conf = NULL; + priv->account_mgr = NULL; priv->widget_factory = NULL; } @@ -118,9 +118,9 @@ modest_account_view_window_finalize (GObject *obj) priv = MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE(obj); - if (priv->conf) { - g_object_unref (G_OBJECT(priv->conf)); - priv->conf = NULL; + if (priv->account_mgr) { + g_object_unref (G_OBJECT(priv->account_mgr)); + priv->account_mgr = NULL; } if (priv->widget_factory) { @@ -171,7 +171,8 @@ on_add_button_clicked (GtkWidget *button, ModestAccountViewWindow *self) priv = MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE(self); - assistant = modest_account_assistant_new (priv->widget_factory); + assistant = modest_account_assistant_new (priv->account_mgr, + priv->widget_factory); gtk_window_set_transient_for (GTK_WINDOW(assistant), GTK_WINDOW(self)); @@ -220,7 +221,7 @@ button_box_new (ModestAccountViewWindow *self) gtk_widget_set_sensitive (edit_button, FALSE); gtk_widget_set_sensitive (remove_button, FALSE); - /* remember these, so we can deactivate them when nothing i + /* remember these, so we can deactivate them when nothing is * selected */ priv->remove_button = remove_button; priv->edit_button = edit_button; @@ -275,19 +276,19 @@ window_vbox_new (ModestAccountViewWindow *self) GtkWidget* -modest_account_view_window_new (ModestConf *conf, ModestWidgetFactory *factory) +modest_account_view_window_new (ModestAccountMgr *account_mgr, ModestWidgetFactory *factory) { GObject *obj; ModestAccountViewWindowPrivate *priv; - g_return_val_if_fail (conf, NULL); + g_return_val_if_fail (account_mgr, NULL); g_return_val_if_fail (factory, NULL); obj = g_object_new(MODEST_TYPE_ACCOUNT_VIEW_WINDOW, NULL); priv = MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE(obj); - g_object_ref (G_OBJECT(conf)); - priv->conf = conf; + g_object_ref (G_OBJECT(account_mgr)); + priv->account_mgr = account_mgr; g_object_ref (G_OBJECT(factory)); priv->widget_factory = factory; diff --git a/src/gtk2/modest-account-view-window.h b/src/gtk2/modest-account-view-window.h index 12bd393..8db09c4 100644 --- a/src/gtk2/modest-account-view-window.h +++ b/src/gtk2/modest-account-view-window.h @@ -35,8 +35,7 @@ struct _ModestAccountViewWindowClass { /* member functions */ GType modest_account_view_window_get_type (void) G_GNUC_CONST; - -GtkWidget* modest_account_view_window_new (ModestConf *conf, +GtkWidget* modest_account_view_window_new (ModestAccountMgr *account_mgr, ModestWidgetFactory *factory); G_END_DECLS diff --git a/src/gtk2/modest-edit-msg-window.c b/src/gtk2/modest-edit-msg-window.c index 5811350..86c86d2 100644 --- a/src/gtk2/modest-edit-msg-window.c +++ b/src/gtk2/modest-edit-msg-window.c @@ -32,9 +32,9 @@ #include /* 'private'/'protected' functions */ -static void modest_edit_msg_window_class_init (ModestEditMsgWindowClass *klass); -static void modest_edit_msg_window_init (ModestEditMsgWindow *obj); -static void modest_edit_msg_window_finalize (GObject *obj); +static void modest_edit_msg_window_class_init (ModestEditMsgWindowClass *klass); +static void modest_edit_msg_window_init (ModestEditMsgWindow *obj); +static void modest_edit_msg_window_finalize (GObject *obj); /* list my signals */ enum { @@ -124,10 +124,14 @@ modest_edit_msg_window_init (ModestEditMsgWindow *obj) priv->subject_field = gtk_entry_new_with_max_length (40); header_table = gtk_table_new (4,2, FALSE); - gtk_table_attach_defaults (GTK_TABLE(header_table), to_button, 0,1,0,1); - gtk_table_attach_defaults (GTK_TABLE(header_table), cc_button, 0,1,1,2); - gtk_table_attach_defaults (GTK_TABLE(header_table), bcc_button, 0,1,2,3); - gtk_table_attach_defaults (GTK_TABLE(header_table), subject_label, 0,1,3,4); + gtk_table_attach (GTK_TABLE(header_table), to_button, 0,1,0,1, + GTK_SHRINK, 0, 0, 0); + gtk_table_attach (GTK_TABLE(header_table), cc_button, 0,1,1,2, + GTK_SHRINK, 0, 0, 0); + gtk_table_attach (GTK_TABLE(header_table), bcc_button, 0,1,2,3, + GTK_SHRINK, 0, 0, 0); + gtk_table_attach (GTK_TABLE(header_table), subject_label, 0,1,3,4, + GTK_SHRINK, 0, 0, 0); gtk_table_attach_defaults (GTK_TABLE(header_table), priv->to_field, 1,2,0,1); gtk_table_attach_defaults (GTK_TABLE(header_table), priv->cc_field, 1,2,1,2); @@ -138,7 +142,7 @@ modest_edit_msg_window_init (ModestEditMsgWindow *obj) main_vbox = gtk_vbox_new (FALSE, 6); - gtk_box_pack_start (GTK_BOX(main_vbox), header_table, TRUE, TRUE, 6); + gtk_box_pack_start (GTK_BOX(main_vbox), header_table, FALSE, FALSE, 6); gtk_box_pack_start (GTK_BOX(main_vbox), priv->msg_body, TRUE, TRUE, 6); gtk_widget_show_all (GTK_WIDGET(main_vbox)); @@ -159,6 +163,21 @@ modest_edit_msg_window_finalize (GObject *obj) } +static gboolean +on_delete_event (GtkWidget *widget, GdkEvent *event, ModestEditMsgWindow *self) +{ + ModestEditMsgWindowPrivate *priv; + priv = MODEST_EDIT_MSG_WINDOW_GET_PRIVATE(self); + + modest_widget_memory_save_settings (priv->conf, + GTK_WIDGET(priv->msg_body), + "modest-edit-msg-body"); + gtk_widget_destroy (GTK_WIDGET(self)); + return TRUE; +} + + + GtkWidget* modest_edit_msg_window_new (ModestConf *conf, ModestEditType type, @@ -181,5 +200,9 @@ modest_edit_msg_window_new (ModestConf *conf, ModestEditType type, modest_widget_memory_restore_settings (priv->conf, GTK_WIDGET(priv->msg_body), "modest-edit-msg-body"); + + g_signal_connect (G_OBJECT(obj), "delete-event", + G_CALLBACK(on_delete_event), obj); + return GTK_WIDGET (obj); } diff --git a/src/gtk2/modest-main-window.c b/src/gtk2/modest-main-window.c index d53359c..90db766 100644 --- a/src/gtk2/modest-main-window.c +++ b/src/gtk2/modest-main-window.c @@ -59,6 +59,7 @@ struct _ModestMainWindowPrivate { ModestWidgetFactory *widget_factory; ModestConf *conf; + ModestAccountMgr *account_mgr; ModestHeaderView *header_view; ModestFolderView *folder_view; @@ -90,6 +91,7 @@ modest_main_window_get_type (void) sizeof(ModestMainWindow), 1, /* n_preallocs */ (GInstanceInitFunc) modest_main_window_init, + NULL }; my_type = g_type_register_static (GTK_TYPE_WINDOW, "ModestMainWindow", @@ -125,6 +127,8 @@ modest_main_window_init (ModestMainWindow *obj) priv = MODEST_MAIN_WINDOW_GET_PRIVATE(obj); priv->widget_factory = NULL; + priv->conf = NULL; + priv->account_mgr = NULL; } static void @@ -136,10 +140,16 @@ modest_main_window_finalize (GObject *obj) g_object_unref (G_OBJECT(priv->widget_factory)); priv->widget_factory = NULL; } - if (priv->conf) { + if (priv->conf) { g_object_unref (G_OBJECT(priv->conf)); priv->conf = NULL; } + + if (priv->account_mgr) { + g_object_unref (G_OBJECT(priv->account_mgr)); + priv->account_mgr = NULL; + } + G_OBJECT_CLASS(parent_class)->finalize (obj); } @@ -148,7 +158,10 @@ static void on_menu_about (GtkWidget *widget, gpointer data) { GtkWidget *about; - + const gchar *authors[] = { + "Dirk-Jan C. Binnema ", + NULL + }; about = gtk_about_dialog_new (); gtk_about_dialog_set_name (GTK_ABOUT_DIALOG(about), PACKAGE_NAME); gtk_about_dialog_set_version (GTK_ABOUT_DIALOG(about),PACKAGE_VERSION); @@ -157,7 +170,13 @@ on_menu_about (GtkWidget *widget, gpointer data) _("Copyright (c) 2006, Nokia Corporation\n" "All rights reserved.")); gtk_about_dialog_set_comments ( GTK_ABOUT_DIALOG(about), - _("a modest e-mail client")); + _("a modest e-mail client\n\n" + "design and implementation: Dirk-Jan C. Binnema\n" + "contributions from the fine people at KernelConcepts\n\n" + "uses the tinymail email framework written by Philip van Hoof")); + gtk_about_dialog_set_authors (GTK_ABOUT_DIALOG(about), authors); + gtk_about_dialog_set_website (GTK_ABOUT_DIALOG(about), "http://modest.garage.maemo.org"); + gtk_dialog_run (GTK_DIALOG (about)); gtk_widget_destroy(about); } @@ -173,7 +192,7 @@ on_menu_accounts (ModestMainWindow *self, guint action, GtkWidget *widget) g_return_if_fail (self); priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); - account_win = modest_account_view_window_new (priv->conf, + account_win = modest_account_view_window_new (priv->account_mgr, priv->widget_factory); gtk_window_set_transient_for (GTK_WINDOW(account_win), @@ -189,7 +208,6 @@ on_menu_new_message (ModestMainWindow *self, guint action, GtkWidget *widget) GtkWidget *msg_win; ModestMainWindowPrivate *priv; - priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); msg_win = modest_edit_msg_window_new (priv->conf, @@ -284,9 +302,7 @@ header_view_new (ModestMainWindow *self) ModestHeaderViewColumn cols[] = { MODEST_HEADER_VIEW_COLUMN_MSGTYPE, MODEST_HEADER_VIEW_COLUMN_ATTACH, - MODEST_HEADER_VIEW_COLUMN_FROM, - MODEST_HEADER_VIEW_COLUMN_SUBJECT, - MODEST_HEADER_VIEW_COLUMN_RECEIVED_DATE + MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER }; priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); @@ -367,6 +383,8 @@ static gboolean on_delete_event (GtkWidget *widget, GdkEvent *event, ModestMainWindow *self) { save_sizes (self); + gtk_widget_destroy (GTK_WIDGET(self)); + return TRUE; } @@ -374,7 +392,8 @@ on_delete_event (GtkWidget *widget, GdkEvent *event, ModestMainWindow *self) GtkWidget* -modest_main_window_new (ModestWidgetFactory *factory, ModestConf *conf) +modest_main_window_new (ModestConf *conf, ModestAccountMgr *account_mgr, + ModestWidgetFactory *factory) { GObject *obj; ModestMainWindowPrivate *priv; @@ -394,6 +413,10 @@ modest_main_window_new (ModestWidgetFactory *factory, ModestConf *conf) g_object_ref (conf); priv->conf = conf; + + g_object_ref (account_mgr); + priv->account_mgr = account_mgr; + /* widgets from factory */ priv->folder_view = modest_widget_factory_get_folder_view (factory); @@ -421,33 +444,37 @@ modest_main_window_new (ModestWidgetFactory *factory, ModestConf *conf) gtk_paned_add2 (GTK_PANED(priv->msg_paned), GTK_WIDGET(priv->msg_preview)); gtk_widget_show (GTK_WIDGET(priv->header_view)); - + gtk_tree_view_columns_autosize (GTK_TREE_VIEW(priv->header_view)); + + /* status bar / progress */ - status_hbox = gtk_hbox_new (TRUE, 6); + status_hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX(status_hbox), modest_widget_factory_get_status_bar(factory), - TRUE, TRUE, 6); + TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX(status_hbox), modest_widget_factory_get_progress_bar(factory), - TRUE, FALSE, 6); - gtk_box_pack_end (GTK_BOX(status_hbox), + FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX(status_hbox), modest_widget_factory_get_online_toggle(factory), - FALSE, FALSE, 6); + FALSE, FALSE, 0); /* putting it all together... */ main_vbox = gtk_vbox_new (FALSE, 6); - gtk_box_pack_start (GTK_BOX(main_vbox), priv->menubar, FALSE, FALSE, 6); - gtk_box_pack_start (GTK_BOX(main_vbox), priv->toolbar, FALSE, FALSE, 6); - gtk_box_pack_start (GTK_BOX(main_vbox), priv->main_paned, TRUE, TRUE, 6); - gtk_box_pack_start (GTK_BOX(main_vbox), status_hbox, FALSE, FALSE, 6); + gtk_box_pack_start (GTK_BOX(main_vbox), priv->menubar, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX(main_vbox), priv->toolbar, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX(main_vbox), priv->main_paned, TRUE, TRUE,0); + gtk_box_pack_start (GTK_BOX(main_vbox), status_hbox, FALSE, FALSE, 0); gtk_container_add (GTK_CONTAINER(obj), main_vbox); restore_sizes (MODEST_MAIN_WINDOW(obj)); + gtk_window_set_title (GTK_WINDOW(obj), "Modest"); + gtk_widget_show_all (main_vbox); + g_signal_connect (G_OBJECT(obj), "delete-event", G_CALLBACK(on_delete_event), obj); - return GTK_WIDGET(obj); } diff --git a/src/gtk2/modest-main-window.h b/src/gtk2/modest-main-window.h index 578caf0..94c02ac 100644 --- a/src/gtk2/modest-main-window.h +++ b/src/gtk2/modest-main-window.h @@ -7,6 +7,8 @@ #include #include #include +#include +#include #ifdef HAVE_CONFIG_H #include @@ -40,7 +42,8 @@ struct _ModestMainWindowClass { GType modest_main_window_get_type (void) G_GNUC_CONST; -GtkWidget* modest_main_window_new (ModestWidgetFactory *factory, ModestConf *conf); +GtkWidget* modest_main_window_new (ModestConf *conf, ModestAccountMgr *account_mgr, + ModestWidgetFactory *factory); G_END_DECLS diff --git a/src/gtk2/modest-store-widget.c b/src/gtk2/modest-store-widget.c new file mode 100644 index 0000000..a537831 --- /dev/null +++ b/src/gtk2/modest-store-widget.c @@ -0,0 +1,354 @@ +/* Copyright (c) 2006, Nokia Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the Nokia Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "modest-store-widget.h" +#include + +/* 'private'/'protected' functions */ +static void modest_store_widget_class_init (ModestStoreWidgetClass *klass); +static void modest_store_widget_init (ModestStoreWidget *obj); +static void modest_store_widget_finalize (GObject *obj); +/* list my signals */ +enum { + /* MY_SIGNAL_1, */ + /* MY_SIGNAL_2, */ + LAST_SIGNAL +}; + +typedef struct _ModestStoreWidgetPrivate ModestStoreWidgetPrivate; +struct _ModestStoreWidgetPrivate { + + gchar* proto; + + GtkWidget *servername; + GtkWidget *username; + GtkWidget *security; + GtkWidget *auth; + GtkWidget *chooser; + GtkWidget *remember_pwd; + + ModestWidgetFactory *factory; +}; +#define MODEST_STORE_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ + MODEST_TYPE_STORE_WIDGET, \ + ModestStoreWidgetPrivate)) +/* globals */ +static GtkContainerClass *parent_class = NULL; + +/* uncomment the following if you have defined any signals */ +/* static guint signals[LAST_SIGNAL] = {0}; */ + +GType +modest_store_widget_get_type (void) +{ + static GType my_type = 0; + if (!my_type) { + static const GTypeInfo my_info = { + sizeof(ModestStoreWidgetClass), + NULL, /* base init */ + NULL, /* base finalize */ + (GClassInitFunc) modest_store_widget_class_init, + NULL, /* class finalize */ + NULL, /* class data */ + sizeof(ModestStoreWidget), + 1, /* n_preallocs */ + (GInstanceInitFunc) modest_store_widget_init, + NULL + }; + my_type = g_type_register_static (GTK_TYPE_VBOX, + "ModestStoreWidget", + &my_info, 0); + } + return my_type; +} + +static void +modest_store_widget_class_init (ModestStoreWidgetClass *klass) +{ + GObjectClass *gobject_class; + gobject_class = (GObjectClass*) klass; + + parent_class = g_type_class_peek_parent (klass); + gobject_class->finalize = modest_store_widget_finalize; + + g_type_class_add_private (gobject_class, sizeof(ModestStoreWidgetPrivate)); + + /* 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 +modest_store_widget_init (ModestStoreWidget *obj) +{ + ModestStoreWidgetPrivate *priv; + + priv = MODEST_STORE_WIDGET_GET_PRIVATE(obj); + + priv->proto = NULL; +} + + + +static GtkWidget * +maildir_configuration (ModestStoreWidget *self) +{ + ModestStoreWidgetPrivate *priv; + GtkWidget *label, *box, *hbox; + + priv = MODEST_STORE_WIDGET_GET_PRIVATE(self); + box = gtk_vbox_new (FALSE, 6); + + label = gtk_label_new (NULL); + gtk_label_set_markup (GTK_LABEL(label), + _("Maildir configuration")); + gtk_box_pack_start (GTK_BOX(box), label, FALSE, FALSE, 6); + label = gtk_label_new (NULL); + gtk_label_set_markup (GTK_LABEL(label), + _("Please select the path to your Maildir below")); + gtk_box_pack_start (GTK_BOX(box), label, FALSE, FALSE, 6); + + label = gtk_label_new (_("Path:")); + + priv->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), priv->chooser, FALSE, FALSE, 6); + + gtk_box_pack_start (GTK_BOX(box), hbox, FALSE, FALSE, 6); + + return box; +} + + +static GtkWidget* +mbox_configuration (ModestStoreWidget *self) +{ + ModestStoreWidgetPrivate *priv; + GtkWidget *label, *box, *hbox; + + priv = MODEST_STORE_WIDGET_GET_PRIVATE(self); + box = gtk_vbox_new (FALSE, 6); + + label = gtk_label_new (NULL); + gtk_label_set_markup (GTK_LABEL(label), + _("Mbox configuration")); + gtk_box_pack_start (GTK_BOX(box), label, FALSE, FALSE, 6); + label = gtk_label_new (NULL); + gtk_label_set_markup (GTK_LABEL(label), + _("Please select your mbox file below")); + gtk_box_pack_start (GTK_BOX(box), label, FALSE, FALSE, 6); + + label = gtk_label_new (_("mbox:")); + + priv->chooser = + gtk_file_chooser_button_new (_("(none)"), + GTK_FILE_CHOOSER_ACTION_OPEN); + hbox = gtk_hbox_new (FALSE, 6); + gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 6); + gtk_box_pack_start (GTK_BOX(hbox), priv->chooser, FALSE, FALSE, 6); + + gtk_box_pack_start (GTK_BOX(box), hbox, FALSE, FALSE, 6); + + return box; +} + + +static GtkWidget* +imap_pop_configuration (ModestStoreWidget *self) +{ + ModestStoreWidgetPrivate *priv; + GtkWidget *label, *box, *hbox; + + priv = MODEST_STORE_WIDGET_GET_PRIVATE(self); + box = gtk_vbox_new (FALSE, 6); + + label = gtk_label_new (NULL); + gtk_label_set_markup (GTK_LABEL(label),_("Server configuration")); + gtk_box_pack_start (GTK_BOX(box), label, FALSE, FALSE, 6); + + hbox = gtk_hbox_new (FALSE, 6); + label = gtk_label_new (_("Username:")); + if (!priv->username) + priv->username = gtk_entry_new_with_max_length (40); + gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX(hbox), priv->username,FALSE, FALSE, 6); + gtk_box_pack_start (GTK_BOX(box), hbox, FALSE, FALSE, 0); + + hbox = gtk_hbox_new (FALSE, 6); + label = gtk_label_new (_("Server:")); + if (!priv->servername) + priv->servername = gtk_entry_new_with_max_length (40); + gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX(hbox), priv->servername,FALSE, FALSE, 6); + gtk_box_pack_start (GTK_BOX(box), hbox, FALSE, FALSE, 0); + + label = gtk_label_new(NULL); + gtk_label_set_markup (GTK_LABEL(label),_("Security")); + gtk_box_pack_start (GTK_BOX(box), label, FALSE, FALSE, 0); + + hbox = gtk_hbox_new (FALSE, 6); + label = gtk_label_new(NULL); + gtk_label_set_text (GTK_LABEL(label),_("Connection type:")); + gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX(hbox), modest_widget_factory_get_combo_box + (priv->factory, MODEST_COMBO_BOX_TYPE_SECURITY_PROTOS), + FALSE, FALSE,0); + gtk_box_pack_start (GTK_BOX(box), hbox, FALSE, FALSE, 0); + + hbox = gtk_hbox_new (FALSE, 6); + label = gtk_label_new(NULL); + + gtk_label_set_text (GTK_LABEL(label),_("Authentication:")); + gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 6); + gtk_box_pack_start (GTK_BOX(hbox), modest_widget_factory_get_combo_box + (priv->factory, MODEST_COMBO_BOX_TYPE_AUTH_PROTOS), + FALSE, FALSE, 0); + + priv->remember_pwd = + gtk_check_button_new_with_label (_("Remember password")); + gtk_box_pack_start (GTK_BOX(hbox),priv->remember_pwd, + FALSE, FALSE, 0); + + gtk_box_pack_start (GTK_BOX(box), hbox, FALSE, FALSE, 0); + + return box; +} + + +static void +modest_store_widget_finalize (GObject *obj) +{ + ModestStoreWidgetPrivate *priv; + priv = MODEST_STORE_WIDGET_GET_PRIVATE(obj); + + if (priv->factory) { + g_object_unref (priv->factory); + priv->factory = NULL; + } + + if (priv->proto) { + g_free (priv->proto); + priv->proto = NULL; + } + + G_OBJECT_CLASS(parent_class)->finalize (obj); +} + + + +GtkWidget* +modest_store_widget_new (ModestWidgetFactory *factory, const gchar *proto) +{ + GObject *obj; + GtkWidget *w; + ModestStoreWidget *self; + ModestStoreWidgetPrivate *priv; + + g_return_val_if_fail (proto, NULL); + g_return_val_if_fail (factory, NULL); + + obj = g_object_new(MODEST_TYPE_STORE_WIDGET, NULL); + self = MODEST_STORE_WIDGET(obj); + priv = MODEST_STORE_WIDGET_GET_PRIVATE(self); + + g_object_ref (factory); + priv->factory = factory; + + priv->proto = g_strdup (proto); + + if (strcmp (proto, MODEST_PROTO_POP) == 0 || + strcmp (proto, MODEST_PROTO_IMAP) == 0) { + w = imap_pop_configuration (self); + } else if (strcmp (proto, MODEST_PROTO_MAILDIR) == 0) { + w = maildir_configuration (self); + } else if (strcmp (proto, MODEST_PROTO_MBOX) == 0) { + w = mbox_configuration (self); + } else + w = gtk_label_new (""); + + gtk_widget_show_all (w); + gtk_box_pack_start (GTK_BOX(self), w, FALSE, FALSE, 2); + + return GTK_WIDGET(self); +} + + +gboolean +modest_store_widget_get_remember_password (ModestStoreWidget *self) +{ + ModestStoreWidgetPrivate *priv; + + g_return_val_if_fail (self, FALSE); + priv = MODEST_STORE_WIDGET_GET_PRIVATE(self); + + return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(priv->remember_pwd)); +} + + +const gchar* +modest_store_widget_get_username (ModestStoreWidget *self) +{ + ModestStoreWidgetPrivate *priv; + + g_return_val_if_fail (self, NULL); + priv = MODEST_STORE_WIDGET_GET_PRIVATE(self); + + return gtk_entry_get_text (GTK_ENTRY(priv->username)); +} + +const gchar* +modest_store_widget_get_servername (ModestStoreWidget *self) +{ + ModestStoreWidgetPrivate *priv; + + g_return_val_if_fail (self, NULL); + priv = MODEST_STORE_WIDGET_GET_PRIVATE(self); + + return gtk_entry_get_text (GTK_ENTRY(priv->servername)); +} + + +const gchar* +modest_store_widget_get_proto (ModestStoreWidget *self) +{ + ModestStoreWidgetPrivate *priv; + + g_return_val_if_fail (self, FALSE); + priv = MODEST_STORE_WIDGET_GET_PRIVATE(self); + + return priv->proto; +} + diff --git a/src/gtk2/modest-store-widget.h b/src/gtk2/modest-store-widget.h new file mode 100644 index 0000000..4a3cbb8 --- /dev/null +++ b/src/gtk2/modest-store-widget.h @@ -0,0 +1,53 @@ +/* modest-store-widget.h */ +/* insert (c)/licensing information) */ + +#ifndef __MODEST_STORE_WIDGET_H__ +#define __MODEST_STORE_WIDGET_H__ + +#include +#include +#include + +G_BEGIN_DECLS + +/* convenience macros */ +#define MODEST_TYPE_STORE_WIDGET (modest_store_widget_get_type()) +#define MODEST_STORE_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_STORE_WIDGET,ModestStoreWidget)) +#define MODEST_STORE_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_STORE_WIDGET,GtkContainer)) +#define MODEST_IS_STORE_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_STORE_WIDGET)) +#define MODEST_IS_STORE_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_STORE_WIDGET)) +#define MODEST_STORE_WIDGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_STORE_WIDGET,ModestStoreWidgetClass)) + +typedef struct _ModestStoreWidget ModestStoreWidget; +typedef struct _ModestStoreWidgetClass ModestStoreWidgetClass; + +struct _ModestStoreWidget { + GtkVBox parent; + /* insert public members, if any */ +}; + +struct _ModestStoreWidgetClass { + GtkVBoxClass parent_class; + /* insert signal callback declarations, eg. */ + /* void (* my_event) (ModestStoreWidget* obj); */ +}; + +/* member functions */ +GType modest_store_widget_get_type (void) G_GNUC_CONST; + +GtkWidget* modest_store_widget_new (ModestWidgetFactory *factory, + const gchar* proto); + +gboolean modest_store_widget_get_remember_password (ModestStoreWidget *self); +const gchar* modest_store_widget_get_username (ModestStoreWidget *self); +const gchar* modest_store_widget_get_servername (ModestStoreWidget *self); +const gchar* modest_store_widget_get_proto (ModestStoreWidget *self); + + + + + +G_END_DECLS + +#endif /* __MODEST_STORE_WIDGET_H__ */ + diff --git a/src/gtk2/modest-transport-widget.c b/src/gtk2/modest-transport-widget.c new file mode 100644 index 0000000..c1ef272 --- /dev/null +++ b/src/gtk2/modest-transport-widget.c @@ -0,0 +1,244 @@ +/* modest-transport-widget.c */ + +/* insert (c)/licensing information) */ + +#include "modest-transport-widget.h" +#include + +/* 'private'/'protected' functions */ +static void modest_transport_widget_class_init (ModestTransportWidgetClass *klass); +static void modest_transport_widget_init (ModestTransportWidget *obj); +static void modest_transport_widget_finalize (GObject *obj); +/* list my signals */ +enum { + /* MY_SIGNAL_1, */ + /* MY_SIGNAL_2, */ + LAST_SIGNAL +}; + +typedef struct _ModestTransportWidgetPrivate ModestTransportWidgetPrivate; +struct _ModestTransportWidgetPrivate { + + gchar *proto; + ModestWidgetFactory *factory; + + GtkWidget *servername; + GtkWidget *username; + GtkWidget *auth; + GtkWidget *remember_pwd; + +}; +#define MODEST_TRANSPORT_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ + MODEST_TYPE_TRANSPORT_WIDGET, \ + ModestTransportWidgetPrivate)) +/* globals */ +static GtkContainerClass *parent_class = NULL; + +/* uncomment the following if you have defined any signals */ +/* static guint signals[LAST_SIGNAL] = {0}; */ + +GType +modest_transport_widget_get_type (void) +{ + static GType my_type = 0; + if (!my_type) { + static const GTypeInfo my_info = { + sizeof(ModestTransportWidgetClass), + NULL, /* base init */ + NULL, /* base finalize */ + (GClassInitFunc) modest_transport_widget_class_init, + NULL, /* class finalize */ + NULL, /* class data */ + sizeof(ModestTransportWidget), + 1, /* n_preallocs */ + (GInstanceInitFunc) modest_transport_widget_init, + }; + my_type = g_type_register_static (GTK_TYPE_VBOX, + "ModestTransportWidget", + &my_info, 0); + } + return my_type; +} + +static void +modest_transport_widget_class_init (ModestTransportWidgetClass *klass) +{ + GObjectClass *gobject_class; + gobject_class = (GObjectClass*) klass; + + parent_class = g_type_class_peek_parent (klass); + gobject_class->finalize = modest_transport_widget_finalize; + + g_type_class_add_private (gobject_class, sizeof(ModestTransportWidgetPrivate)); + + /* 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 +modest_transport_widget_init (ModestTransportWidget *obj) +{ + ModestTransportWidgetPrivate *priv; + priv = MODEST_TRANSPORT_WIDGET_GET_PRIVATE(obj); + + priv->proto = NULL; +} + +static void +modest_transport_widget_finalize (GObject *obj) +{ + ModestTransportWidgetPrivate *priv; + priv = MODEST_TRANSPORT_WIDGET_GET_PRIVATE(obj); + + if (priv->factory) { + g_object_unref (priv->factory); + priv->factory = NULL; + } + + if (priv->proto) { + g_free (priv->proto); + priv->proto = NULL; + } + + G_OBJECT_CLASS(parent_class)->finalize (obj); +} + + +static GtkWidget* +smtp_configuration (ModestTransportWidget *self) +{ + ModestTransportWidgetPrivate *priv; + GtkWidget *label, *box, *hbox; + + priv = MODEST_TRANSPORT_WIDGET_GET_PRIVATE(self); + box = gtk_vbox_new (FALSE, 6); + + label = gtk_label_new (NULL); + gtk_label_set_markup (GTK_LABEL(label), + _("SMTP configuration")); + gtk_box_pack_start (GTK_BOX(box), label, FALSE, FALSE, 6); + + priv->servername = gtk_entry_new_with_max_length (40); + + hbox = gtk_hbox_new (FALSE, 6); + gtk_box_pack_start (GTK_BOX(hbox), gtk_label_new (_("Servername: ")), + FALSE, FALSE, 6); + gtk_box_pack_start (GTK_BOX(hbox), priv->servername, + TRUE, TRUE, 6); + gtk_box_pack_start (GTK_BOX(box), hbox, TRUE, TRUE, 6); + + priv->auth = gtk_check_button_new_with_label (_("Requires authentication")); + gtk_box_pack_start (GTK_BOX(box), priv->auth, TRUE, FALSE, 6); + + label = gtk_label_new(NULL); + gtk_label_set_markup (GTK_LABEL(label),_("Security")); + gtk_box_pack_start (GTK_BOX(box), label, FALSE, FALSE, 0); + + hbox = gtk_hbox_new (FALSE, 6); + label = gtk_label_new(NULL); + gtk_label_set_text (GTK_LABEL(label),_("Connection type:")); + gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX(hbox), modest_widget_factory_get_combo_box + (priv->factory, MODEST_COMBO_BOX_TYPE_SECURITY_PROTOS), + FALSE, FALSE,0); + gtk_box_pack_start (GTK_BOX(box), hbox, FALSE, FALSE, 0); + + hbox = gtk_hbox_new (FALSE, 6); + label = gtk_label_new(NULL); + + gtk_label_set_text (GTK_LABEL(label),_("Authentication:")); + gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 6); + gtk_box_pack_start (GTK_BOX(hbox), modest_widget_factory_get_combo_box + (priv->factory, MODEST_COMBO_BOX_TYPE_AUTH_PROTOS), + FALSE, FALSE, 0); + priv->remember_pwd = + gtk_check_button_new_with_label (_("Remember password")); + gtk_box_pack_start (GTK_BOX(hbox),priv->remember_pwd, + FALSE, FALSE, 0); + return box; +} + + + +GtkWidget* +modest_transport_widget_new (ModestWidgetFactory *factory, const gchar* proto) +{ + GObject *obj; + GtkWidget *w; + ModestTransportWidget *self; + ModestTransportWidgetPrivate *priv; + + g_return_val_if_fail (proto, NULL); + g_return_val_if_fail (factory, NULL); + + obj = g_object_new(MODEST_TYPE_TRANSPORT_WIDGET, NULL); + self = MODEST_TRANSPORT_WIDGET(obj); + priv = MODEST_TRANSPORT_WIDGET_GET_PRIVATE(self); + + g_object_ref (factory); + priv->factory = factory; + + priv->proto = g_strdup (proto); + + if (strcmp (proto, MODEST_PROTO_SMTP) == 0) { + w = smtp_configuration (self); + } else + w = gtk_label_new (""); + + gtk_widget_show_all (w); + gtk_box_pack_start (GTK_BOX(self), w, FALSE, FALSE, 2); + + return GTK_WIDGET(self); +} + + +gboolean +modest_transport_widget_get_remember_password (ModestTransportWidget *self) +{ + ModestTransportWidgetPrivate *priv; + + g_return_val_if_fail (self, FALSE); + priv = MODEST_TRANSPORT_WIDGET_GET_PRIVATE(self); + + return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(priv->remember_pwd)); +} + + +const gchar* +modest_transport_widget_get_username (ModestTransportWidget *self) +{ + ModestTransportWidgetPrivate *priv; + + g_return_val_if_fail (self, NULL); + priv = MODEST_TRANSPORT_WIDGET_GET_PRIVATE(self); + + return gtk_entry_get_text (GTK_ENTRY(priv->username)); +} + +const gchar* +modest_transport_widget_get_servername (ModestTransportWidget *self) +{ + ModestTransportWidgetPrivate *priv; + + g_return_val_if_fail (self, NULL); + priv = MODEST_TRANSPORT_WIDGET_GET_PRIVATE(self); + + return gtk_entry_get_text (GTK_ENTRY(priv->servername)); +} + + +const gchar* +modest_transport_widget_get_proto (ModestTransportWidget *self) +{ + ModestTransportWidgetPrivate *priv; + + g_return_val_if_fail (self, FALSE); + priv = MODEST_TRANSPORT_WIDGET_GET_PRIVATE(self); + + return priv->proto; +} + diff --git a/src/gtk2/modest-transport-widget.h b/src/gtk2/modest-transport-widget.h new file mode 100644 index 0000000..f72e971 --- /dev/null +++ b/src/gtk2/modest-transport-widget.h @@ -0,0 +1,47 @@ +/* modest-transport-widget.h */ +/* insert (c)/licensing information) */ + +#ifndef __MODEST_TRANSPORT_WIDGET_H__ +#define __MODEST_TRANSPORT_WIDGET_H__ + +#include +#include + +G_BEGIN_DECLS + +/* convenience macros */ +#define MODEST_TYPE_TRANSPORT_WIDGET (modest_transport_widget_get_type()) +#define MODEST_TRANSPORT_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_TRANSPORT_WIDGET,ModestTransportWidget)) +#define MODEST_TRANSPORT_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_TRANSPORT_WIDGET,GtkContainer)) +#define MODEST_IS_TRANSPORT_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_TRANSPORT_WIDGET)) +#define MODEST_IS_TRANSPORT_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_TRANSPORT_WIDGET)) +#define MODEST_TRANSPORT_WIDGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_TRANSPORT_WIDGET,ModestTransportWidgetClass)) + +typedef struct _ModestTransportWidget ModestTransportWidget; +typedef struct _ModestTransportWidgetClass ModestTransportWidgetClass; + +struct _ModestTransportWidget { + GtkVBox parent; + /* insert public members, if any */ +}; + +struct _ModestTransportWidgetClass { + GtkVBoxClass parent_class; + /* insert signal callback declarations, eg. */ + /* void (* my_event) (ModestTransportWidget* obj); */ +}; + +/* member functions */ +GType modest_transport_widget_get_type (void) G_GNUC_CONST; + +GtkWidget* modest_transport_widget_new (ModestWidgetFactory *factory, const gchar *proto); + +gboolean modest_transport_widget_get_remember_password (ModestTransportWidget *self); +const gchar* modest_transport_widget_get_username (ModestTransportWidget *self); +const gchar* modest_transport_widget_get_servername (ModestTransportWidget *self); +const gchar* modest_transport_widget_get_proto (ModestTransportWidget *self); + +G_END_DECLS + +#endif /* __MODEST_TRANSPORT_WIDGET_H__ */ + diff --git a/src/gtk2/modest-ui.c b/src/gtk2/modest-ui.c index 2440089..9c221dc 100644 --- a/src/gtk2/modest-ui.c +++ b/src/gtk2/modest-ui.c @@ -89,6 +89,7 @@ modest_ui_get_type (void) sizeof(ModestUI), 1, /* n_preallocs */ (GInstanceInitFunc) modest_ui_init, + NULL }; my_type = g_type_register_static (G_TYPE_OBJECT, "ModestUI", @@ -201,9 +202,12 @@ modest_ui_main_window (ModestUI *modest_ui) g_return_val_if_fail (modest_ui, NULL); priv = MODEST_UI_GET_PRIVATE(modest_ui); - win = modest_main_window_new (priv->widget_factory, priv->conf); + win = modest_main_window_new (priv->conf, priv->account_mgr, + priv->widget_factory); if (!win) g_printerr ("modest: could not create main window\n"); return win; } + +