X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fgtk-glade%2Fmodest-ui-wizard.c;h=3edf494e3d1ac037075673f967a74f2770bf3ae3;hp=7cf1314b51a55114896d94feeaf2b47861d45872;hb=b0bf67c67967f06a50ab68befeb8d52d34001e0b;hpb=ea1ab72d2666dd157e8012e2cd9b21e34d0f04b9 diff --git a/src/gtk-glade/modest-ui-wizard.c b/src/gtk-glade/modest-ui-wizard.c index 7cf1314..3edf494 100644 --- a/src/gtk-glade/modest-ui-wizard.c +++ b/src/gtk-glade/modest-ui-wizard.c @@ -12,12 +12,30 @@ #endif /*HAVE_CONFIG_H*/ #include "../modest-account-mgr.h" +#include "../modest-identity-mgr.h" #include "modest-ui-glade.h" #include "modest-ui-wizard.h" -void wizard_missing_notification(GtkWindow *parent, gchar *info_message) -{ + +static void wizard_incoming_button_toggled(GtkWidget *button, + gpointer userdata) { + GtkWidget *awidget; + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(button))==TRUE) { + awidget=glade_xml_get_widget(GLADE_XML(userdata), "AWOutUserNameEntry"); + gtk_widget_set_sensitive(GTK_WIDGET(awidget), FALSE); + awidget=glade_xml_get_widget(GLADE_XML(userdata), "AWOutPasswordEntry"); + gtk_widget_set_sensitive(GTK_WIDGET(awidget), FALSE); + } + else { + awidget=glade_xml_get_widget(GLADE_XML(userdata), "AWOutUserNameEntry"); + gtk_widget_set_sensitive(GTK_WIDGET(awidget), TRUE); + awidget=glade_xml_get_widget(GLADE_XML(userdata), "AWOutPasswordEntry"); + gtk_widget_set_sensitive(GTK_WIDGET(awidget), TRUE); + } +} + +void wizard_missing_notification(GtkWindow *parent, gchar *info_message) { GtkWidget *DenyDialog; DenyDialog=gtk_message_dialog_new(parent, @@ -32,8 +50,7 @@ void wizard_missing_notification(GtkWindow *parent, gchar *info_message) gtk_widget_destroy(DenyDialog); } -gchar *get_text_from_combobox (GtkWidget *combobox) -{ +gchar *get_text_from_combobox (GtkWidget *combobox){ /* Remember to free the returned variable after usage! */ GtkTreeModel *model = gtk_combo_box_get_model(GTK_COMBO_BOX(combobox)); @@ -41,8 +58,7 @@ gchar *get_text_from_combobox (GtkWidget *combobox) gchar *value; - if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(combobox), &iter)) - { + if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(combobox), &iter)) { gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 0, &value, @@ -53,18 +69,15 @@ gchar *get_text_from_combobox (GtkWidget *combobox) } -gboolean advance_sanity_check(GtkWindow *parent, GladeXML *glade_xml, gint cp) -{ - GtkDialog *DenyDialog; +gboolean advance_sanity_check(GladeXML *glade_xml, gint cp) { gchar *tmptext; /* FIXME: * all calls to wizard_missing_notification lack the parent window. */ - switch (cp) - { - case 0: + switch (cp) { + case 1: /* Only needed if the "mailbox name" field is used in the first page of the wizard. * if (strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWMailboxnameEntry"))))==0) * { @@ -72,39 +85,41 @@ gboolean advance_sanity_check(GtkWindow *parent, GladeXML *glade_xml, gint cp) * return FALSE; * } */ + if (strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWEMailAddressEntry"))))==0) { + wizard_missing_notification(NULL, "Please enter the E-Mail address."); + return FALSE; + } + return TRUE; + break; + case 2: tmptext=gtk_combo_box_get_active_text(GTK_COMBO_BOX(glade_xml_get_widget(glade_xml, "AWMailboxtypeComboBox"))); - if (tmptext==NULL) - { + if (tmptext==NULL) { wizard_missing_notification(NULL, "Please select mailbox type."); return FALSE; } - free(tmptext); - return TRUE; - break; - case 1: - if (strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWUserNameEntry"))))==0) - { - wizard_missing_notification(NULL, "Please enter user name."); + g_free(tmptext); + if (strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWInServerComboEntry"))))==0) { + wizard_missing_notification(NULL, "Please specify incoming server adress."); return FALSE; } - if (strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWEMailAddressEntry"))))==0) - { - wizard_missing_notification(NULL, "Please enter the E-Mail address."); + if (strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWUserNameEntry"))))==0) { + wizard_missing_notification(NULL, "Please enter user name."); return FALSE; } return TRUE; break; - case 2: - if (strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWInServerComboEntry"))))==0) - { - wizard_missing_notification(NULL, "Please specify incoming server adress."); - return FALSE; - } - if (strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWOutServerComboEntry"))))==0) - { + case 3: + if (strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWOutServerComboEntry"))))==0) { wizard_missing_notification(NULL, "Please specify outgoing server address."); return FALSE; } + /* smtp servers may work without a username + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(glade_xml, "AWUseIncomingCheckButton")))==FALSE + && strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWOutUserNameEntry"))))==0) { + wizard_missing_notification(NULL, "Please enter user name."); + return FALSE; + } */ + return TRUE; break; } @@ -112,61 +127,83 @@ gboolean advance_sanity_check(GtkWindow *parent, GladeXML *glade_xml, gint cp) return FALSE; } -gboolean wizard_account_add(GladeXML *glade_xml, ModestUIPrivate *priv) +gchar *search_unused_account_or_identity_name(gpointer mgr, gchar *draft) { + GString *tmpaccount_name; + gint counter; + + tmpaccount_name=g_string_new(""); + g_string_printf(tmpaccount_name, "%s", draft); + if(MODEST_IS_ACCOUNT_MGR(mgr)) { + for(counter=0; modest_account_mgr_server_account_exists(mgr, tmpaccount_name->str, NULL); counter++) + g_string_printf(tmpaccount_name, "%s%d", draft, counter); + } + else + for(counter=0; modest_identity_mgr_identity_exists(mgr, tmpaccount_name->str, NULL); counter++) + g_string_printf(tmpaccount_name, "%s%d", draft, counter); + + return g_string_free(tmpaccount_name, FALSE); +} + +gboolean wizard_account_add(GladeXML *glade_xml, ModestUI *modest_ui) { ModestAccountMgr *acc_mgr; ModestIdentityMgr *id_mgr; - const gchar *account_name="default"; - ModestConf *conf=priv->modest_conf; + gchar *store; + gchar *transport; + gchar *identity; + ModestUIPrivate *priv; + ModestConf *conf; gchar *tmptext; + gchar *tmptext2; - g_return_if_fail (conf); - - acc_mgr = MODEST_ACCOUNT_MGR(modest_account_mgr_new (conf)); - if (!acc_mgr) { - g_warning ("failed to instantiate account mgr"); - return; - } - - if (modest_account_mgr_account_exists (acc_mgr, account_name, NULL)) { - if (!modest_account_mgr_remove_account(acc_mgr, account_name, NULL)) { - g_warning ("could not delete existing account"); - } - } - - if (!modest_account_mgr_add_account (acc_mgr, account_name, "defaultstore", "defaulttransport", NULL)) - g_warning ("failed to add default account"); - else - { - tmptext=get_text_from_combobox(glade_xml_get_widget(glade_xml, "AWMailboxtypeComboBox")); - modest_account_mgr_add_server_account (acc_mgr, "defaultstore", - gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWInServerComboEntry"))), + g_return_val_if_fail (MODEST_IS_UI(modest_ui), FALSE); + priv = MODEST_UI_GET_PRIVATE(MODEST_UI(modest_ui)); + conf = priv->modest_conf; + + acc_mgr = priv->modest_acc_mgr; + id_mgr = priv->modest_id_mgr; + + tmptext2=get_text_from_combobox(glade_xml_get_widget(glade_xml, "AWMailboxtypeComboBox")); + tmptext=g_utf8_strdown(tmptext2, -1); + g_free(tmptext2); + + store=search_unused_account_or_identity_name(acc_mgr, "incoming"); + modest_account_mgr_add_server_account (acc_mgr, + store, + gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWInServerComboEntry"))), + gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWUserNameEntry"))), + gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWPasswordEntry"))), + tmptext); + g_free(store); + g_free(tmptext); + + transport=search_unused_account_or_identity_name(acc_mgr, "outgoing"); + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(glade_xml, "AWUseIncomingCheckButton")))==TRUE) + modest_account_mgr_add_server_account (acc_mgr, + transport, + gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWOutServerComboEntry"))), gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWUserNameEntry"))), - NULL, - tmptext); - free(tmptext); - modest_account_mgr_add_server_account (acc_mgr, "defaulttransport", + gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWPasswordEntry"))), + "smtp"); + else + modest_account_mgr_add_server_account (acc_mgr, + transport, gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWOutServerComboEntry"))), - NULL, - NULL, + gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWOutUserNameEntry"))), + gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWOutPasswordEntry"))), "smtp"); - } - id_mgr = MODEST_IDENTITY_MGR(modest_identity_mgr_new (conf)); - if (modest_identity_mgr_identity_exists(id_mgr, "defaultidentity", NULL)) { - if (!modest_identity_mgr_remove_identity(id_mgr, "defaultidentity", NULL)) { - g_warning ("could not delete existing default identity"); - } - } + identity=search_unused_account_or_identity_name(id_mgr, MODEST_IDENTITY_DEFAULT_IDENTITY); if (!modest_identity_mgr_add_identity (id_mgr, - MODEST_IDENTITY_DEFAULT_IDENTITY, + identity, + gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWRealNameEntry"))), gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWEMailAddressEntry"))), - "", "", FALSE, NULL, FALSE )) + "", "", FALSE, transport, FALSE )) g_warning ("failed to add default identity"); - g_object_unref (G_OBJECT(acc_mgr)); - g_object_unref (G_OBJECT(id_mgr)); - + g_free(transport); + g_free(identity); + return TRUE; } @@ -174,71 +211,77 @@ void wizard_account_dialog(ModestUI *modest_ui) { GladeXML *glade_xml; GtkWidget *dialog; - ModestUIPrivate *priv; - GtkWidget *FinishButton; - GtkWidget *BackButton; - GtkWidget *NextButton; - GtkWidget *CancelButton; - GtkWidget *Notebook; - GtkWidget *awidget; - gint cp; - gint result; - gint finishallowed=0; - gboolean account_added_successfully; - + ModestUIPrivate *priv; + GtkWidget *finish_button; + GtkWidget *back_button; + GtkWidget *next_button; + GtkWidget *cancel_button; + GtkWidget *notebook; + GtkWidget *use_incoming_button; + gint cp; + gint result; + gboolean account_added_successfully=FALSE; + + g_return_if_fail(MODEST_IS_UI(modest_ui)); priv = MODEST_UI_GET_PRIVATE(MODEST_UI(modest_ui)); glade_xml = glade_xml_new(MODEST_GLADE, "account_wizard", NULL); - dialog = glade_xml_get_widget(glade_xml, "account_wizard"); - - gtk_widget_show_all(dialog); - - FinishButton=glade_xml_get_widget(glade_xml, "AWFinishButton"); - BackButton=glade_xml_get_widget(glade_xml, "AWBackButton"); - NextButton=glade_xml_get_widget(glade_xml, "AWNextButton"); - CancelButton=glade_xml_get_widget(glade_xml, "AWCancelButton"); - Notebook=glade_xml_get_widget(glade_xml, "AWNotebook"); - - gtk_widget_set_sensitive(FinishButton, FALSE); - - do - { - cp=gtk_notebook_get_current_page(GTK_NOTEBOOK(Notebook)); - switch (cp) - { - case 0: - gtk_widget_set_sensitive(BackButton, FALSE); - break; - case 1: - gtk_widget_set_sensitive(BackButton, TRUE); - break; - case 2: - gtk_widget_set_sensitive(FinishButton, FALSE); - gtk_widget_set_sensitive(NextButton, TRUE); - break; - case 3: - gtk_widget_set_sensitive(FinishButton, TRUE); - gtk_widget_set_sensitive(NextButton, FALSE); - break; - default: - g_error("I'm on page %d of notebook AWNotebook, which shouldn't have happened. Pulling Emeregency breaks.", cp); - break; - } + dialog = glade_xml_get_widget(glade_xml, "account_wizard"); + + gtk_widget_show_all(dialog); + + finish_button=glade_xml_get_widget(glade_xml, "AWFinishButton"); + back_button=glade_xml_get_widget(glade_xml, "AWBackButton"); + next_button=glade_xml_get_widget(glade_xml, "AWNextButton"); + cancel_button=glade_xml_get_widget(glade_xml, "AWCancelButton"); + notebook=glade_xml_get_widget(glade_xml, "AWNotebook"); + + gtk_widget_set_sensitive(finish_button, FALSE); + + use_incoming_button=glade_xml_get_widget(glade_xml, "AWUseIncomingCheckButton"); + g_signal_connect(use_incoming_button, + "toggled", + G_CALLBACK(wizard_incoming_button_toggled), + glade_xml); + + /* First page not used currently. It's reserved for the account preset. */ + gtk_notebook_set_current_page (GTK_NOTEBOOK(notebook), 1); + + do { + cp=gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook)); + switch (cp) { + case 1: + gtk_widget_set_sensitive(back_button, FALSE); + break; + case 2: + gtk_widget_set_sensitive(back_button, TRUE); + break; + case 3: + gtk_widget_set_sensitive(finish_button, FALSE); + gtk_widget_set_sensitive(next_button, TRUE); + break; + case 4: + gtk_widget_set_sensitive(finish_button, TRUE); + gtk_widget_set_sensitive(next_button, FALSE); + break; + default: + g_error("I'm on page %d of notebook AWNotebook, which shouldn't have happened. Pulling emergency breaks.", cp); + break; + } - result=gtk_dialog_run(GTK_DIALOG(dialog)); + result=gtk_dialog_run(GTK_DIALOG(dialog)); - switch (result) - { - case 1: - if (advance_sanity_check(NULL, glade_xml, cp)==TRUE) - gtk_notebook_next_page(GTK_NOTEBOOK(Notebook)); - break; - case 2: - gtk_notebook_prev_page(GTK_NOTEBOOK(Notebook)); + switch (result) { + case 1: + if (advance_sanity_check(glade_xml, cp)==TRUE) + gtk_notebook_next_page(GTK_NOTEBOOK(notebook)); + break; + case 2: + gtk_notebook_prev_page(GTK_NOTEBOOK(notebook)); break; case GTK_RESPONSE_ACCEPT: - account_added_successfully=wizard_account_add(glade_xml, priv); + account_added_successfully=wizard_account_add(glade_xml, modest_ui); break; default: account_added_successfully=FALSE; @@ -253,7 +296,8 @@ void wizard_account_dialog(ModestUI *modest_ui) void new_wizard_account (GtkWidget *widget, gpointer user_data) { - /* for now: */ + /* This will probably never be used to modify any existing account. */ wizard_account_dialog(MODEST_UI(user_data)); } +