36ff802624f9b2a331d4fb55b5a3043d908d5a3d
[modest] / src / gtk-glade / modest-ui-wizard.c
1 /* modest-ui-wizard.c */
2
3 /* insert (c)/licensing information) */
4
5 #include <gtk/gtk.h>
6 #include <glade/glade.h>
7 #include <glib/gi18n.h>
8 #include <string.h>
9
10 #ifdef HAVE_CONFIG_H
11 #include <config.h>
12 #endif /*HAVE_CONFIG_H*/
13
14 #include "../modest-account-mgr.h"
15
16 #include "modest-ui-glade.h"
17 #include "modest-ui-wizard.h"
18
19 void wizard_missing_notification(GtkWindow *parent, gchar *info_message)
20 {
21         GtkWidget *DenyDialog;
22
23         DenyDialog=gtk_message_dialog_new(parent,
24                                           GTK_DIALOG_MODAL,
25                                           GTK_MESSAGE_INFO,
26                                           GTK_BUTTONS_OK,
27                                           "%s",
28                                           info_message);
29
30         gtk_dialog_run(GTK_DIALOG(DenyDialog));
31
32         gtk_widget_destroy(DenyDialog);
33 }
34
35 gchar *get_text_from_combo_box (GtkWidget *combobox)
36 {
37         /* Remember to free the returned variable after usage! */
38
39         GtkTreeModel *model = gtk_combo_box_get_model(GTK_COMBO_BOX(combobox));
40         GtkTreeIter iter;
41
42         gchar *value;
43
44         if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(combobox), &iter))
45         {
46                 gtk_tree_model_get(GTK_TREE_MODEL(model),
47                                    &iter,
48                                    0, &value,
49                                    -1);
50         }
51
52         return value;
53 }
54
55
56 gboolean advance_sanity_check(GtkWindow *parent, GladeXML *glade_xml, gint cp)
57 {
58         GtkDialog *DenyDialog;
59         gchar *tmptext;
60
61         /* FIXME:
62          * all calls to wizard_missing_notification lack the parent window.
63          */
64
65         switch (cp)
66         {
67         case 0:
68                 /* Only needed if the "mailbox name" field is used in the first page of the wizard.
69                  * if (strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWMailboxnameEntry"))))==0)
70                  * {
71                  *         wizard_missing_notification(NULL, "Please enter mailbox name");
72                  *         return FALSE;
73                  * }
74                  */
75                 tmptext=gtk_combo_box_get_active_text(GTK_COMBO_BOX(glade_xml_get_widget(glade_xml, "AWMailboxtypeComboBox")));
76                 if (tmptext==NULL)
77                 {
78                         wizard_missing_notification(NULL, "Please select mailbox type.");
79                         return FALSE;
80                 }
81                 free(tmptext);
82                 return TRUE;
83                 break;
84         case 1:
85                 if (strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWUserNameEntry"))))==0)
86                 {
87                         wizard_missing_notification(NULL, "Please enter user name.");
88                         return FALSE;
89                 }
90                 if (strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWEMailAddressEntry"))))==0)
91                 {
92                         wizard_missing_notification(NULL, "Please enter the E-Mail address.");
93                         return FALSE;
94                 }
95                 return TRUE;
96                 break;
97         case 2:
98                 if (strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWInServerComboEntry"))))==0)
99                 {
100                         wizard_missing_notification(NULL, "Please specify incoming server adress.");
101                         return FALSE;
102                 }
103                 if (strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWOutServerComboEntry"))))==0)
104                 {
105                         wizard_missing_notification(NULL, "Please specify outgoing server address.");
106                         return FALSE;
107                 }
108                 return TRUE;
109                 break;
110         }
111
112         return FALSE;
113 }
114
115 void on_new_account1_activate (GtkMenuItem *menuitem,
116                                gpointer user_data)
117 {
118         GladeXML *glade_xml;
119         GtkWidget *dialog;
120         ModestUIPrivate *priv;
121         GtkWidget *FinishButton;
122         GtkWidget *BackButton;
123         GtkWidget *NextButton;
124         GtkWidget *CancelButton;
125         GtkWidget *Notebook;
126         GtkWidget *awidget;
127         gint cp;
128         gint result;
129         gint finishallowed=0;
130
131         priv = MODEST_UI_GET_PRIVATE(MODEST_UI(user_data));
132
133         glade_xml = glade_xml_new(MODEST_GLADE, "account_wizard", NULL);
134
135         dialog = glade_xml_get_widget(glade_xml, "account_wizard");
136
137         gtk_widget_show_all(dialog);
138
139         FinishButton=glade_xml_get_widget(glade_xml, "AWFinishButton");
140         BackButton=glade_xml_get_widget(glade_xml, "AWBackButton");
141         NextButton=glade_xml_get_widget(glade_xml, "AWNextButton");
142         CancelButton=glade_xml_get_widget(glade_xml, "AWCancelButton");
143         Notebook=glade_xml_get_widget(glade_xml, "AWNotebook");
144
145         gtk_widget_set_sensitive(FinishButton, FALSE);
146
147         do
148         {
149                 cp=gtk_notebook_get_current_page(GTK_NOTEBOOK(Notebook));
150                 switch (cp)
151                 {
152                 case 0:
153                         gtk_widget_set_sensitive(BackButton, FALSE);
154                         break;
155                 case 1:
156                         gtk_widget_set_sensitive(BackButton, TRUE);
157                         break;
158                 case 2:
159                         gtk_widget_set_sensitive(FinishButton, FALSE);
160                         gtk_widget_set_sensitive(NextButton, TRUE);
161                         break;
162                 case 3:
163                         gtk_widget_set_sensitive(FinishButton, TRUE);
164                         gtk_widget_set_sensitive(NextButton, FALSE);
165                         break;
166                 default:
167                         g_error("I'm on page %d of notebook AWNotebook, which shouldn't have happened. Pulling Emeregency breaks.", cp);
168                         break;
169                 }
170
171                 result=gtk_dialog_run(GTK_DIALOG(dialog));
172
173                 switch (result)
174                 {
175                 case 1:
176                         if (advance_sanity_check(NULL, glade_xml, cp)==TRUE)
177                                 gtk_notebook_next_page(GTK_NOTEBOOK(Notebook));
178                         break;
179                 case 2:
180                         gtk_notebook_prev_page(GTK_NOTEBOOK(Notebook));
181                         break;
182                 }
183         }
184         while(result!=GTK_RESPONSE_DELETE_EVENT && result!=GTK_RESPONSE_ACCEPT && result!=GTK_RESPONSE_CANCEL);
185
186         if (result==GTK_RESPONSE_ACCEPT)
187         {
188                 ModestAccountMgr *acc_mgr;
189                 ModestIdentityMgr *id_mgr;
190                 const gchar *account_name="default";
191                 ModestConf *conf=priv->modest_conf;
192
193                 g_return_if_fail (conf);
194
195                 acc_mgr = MODEST_ACCOUNT_MGR(modest_account_mgr_new (conf));
196                 if (!acc_mgr) {
197                         g_warning ("failed to instantiate account mgr");
198                         return;
199                 }
200
201                 if (modest_account_mgr_account_exists (acc_mgr, account_name, NULL)) {
202                         if (!modest_account_mgr_remove_account(acc_mgr, account_name, NULL)) {
203                                 g_warning ("could not delete existing account");
204                         }
205                 }
206
207                 if (!modest_account_mgr_add_account (acc_mgr, account_name, "defaultstore", "defaulttransport", NULL))
208                         g_warning ("failed to add default account");
209                 else
210                 {
211                         modest_account_mgr_add_server_account (acc_mgr, "defaultstore",
212                                                                gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWInServerComboEntry"))),
213                                                                gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWUserNameEntry"))),
214                                                                NULL,
215                                                                gtk_combo_box_get_active_text (GTK_COMBO_BOX(glade_xml_get_widget(glade_xml, "AWMailboxtypeComboBox"))));
216                         modest_account_mgr_add_server_account (acc_mgr, "defaulttransport",
217                                                                gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWOutServerComboEntry"))),
218                                                                NULL,
219                                                                NULL,
220                                                                "smtp");
221
222                 }
223                 id_mgr = MODEST_IDENTITY_MGR(modest_identity_mgr_new (conf));
224                 if (modest_identity_mgr_identity_exists(id_mgr, "defaultidentity", NULL)) {
225                         if (!modest_identity_mgr_remove_identity(id_mgr, "defaultidentity", NULL)) {
226                                 g_warning ("could not delete existing default identity");
227                         }
228                 }
229                 if (!modest_identity_mgr_add_identity (id_mgr,
230                                                        MODEST_IDENTITY_DEFAULT_IDENTITY,
231                                                        gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWEMailAddressEntry"))),
232                                                        "", "", FALSE, NULL, FALSE ))
233                         g_warning ("failed to add default identity");
234
235                 g_object_unref (G_OBJECT(acc_mgr));
236                 g_object_unref (G_OBJECT(id_mgr));
237
238         }
239
240         gtk_widget_destroy(dialog);
241         g_object_unref(glade_xml);
242 }
243