2823f63a92d88579f957d4a4605fb3cc21587e15
[modest] / src / gtk2 / modest-account-assistant.c
1 /* modest-account-assistant.c */
2
3 /* insert (c)/licensing information) */
4
5 #include "modest-account-assistant.h"
6 #include <string.h>
7
8 /* 'private'/'protected' functions */
9 static void                          modest_account_assistant_class_init    (ModestAccountAssistantClass *klass);
10 static void                          modest_account_assistant_init          (ModestAccountAssistant *obj);
11 static void                          modest_account_assistant_finalize      (GObject *obj);
12
13 /* list my signals */
14 enum {
15         /* MY_SIGNAL_1, */
16         /* MY_SIGNAL_2, */
17         LAST_SIGNAL
18 };
19
20 typedef struct _ModestAccountAssistantPrivate ModestAccountAssistantPrivate;
21 struct _ModestAccountAssistantPrivate {
22         ModestWidgetFactory *factory;
23         
24         GtkWidget *entry_full_name;
25         GtkWidget *entry_email;
26         GtkWidget *entry_server_name;
27
28         GtkWidget *pop_imap_config;
29         GtkWidget *mbox_maildir_config;
30         
31
32 };
33 #define MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
34                                                       MODEST_TYPE_ACCOUNT_ASSISTANT, \
35                                                       ModestAccountAssistantPrivate))
36 /* globals */
37 static GtkAssistantClass *parent_class = NULL;
38
39 /* uncomment the following if you have defined any signals */
40 /* static guint signals[LAST_SIGNAL] = {0}; */
41
42 GType
43 modest_account_assistant_get_type (void)
44 {
45         static GType my_type = 0;
46         if (!my_type) {
47                 static const GTypeInfo my_info = {
48                         sizeof(ModestAccountAssistantClass),
49                         NULL,           /* base init */
50                         NULL,           /* base finalize */
51                         (GClassInitFunc) modest_account_assistant_class_init,
52                         NULL,           /* class finalize */
53                         NULL,           /* class data */
54                         sizeof(ModestAccountAssistant),
55                         1,              /* n_preallocs */
56                         (GInstanceInitFunc) modest_account_assistant_init,
57                 };
58                 my_type = g_type_register_static (GTK_TYPE_ASSISTANT,
59                                                   "ModestAccountAssistant",
60                                                   &my_info, 0);
61         }
62         return my_type;
63 }
64
65 static void
66 modest_account_assistant_class_init (ModestAccountAssistantClass *klass)
67 {
68         GObjectClass *gobject_class;
69         gobject_class = (GObjectClass*) klass;
70
71         parent_class            = g_type_class_peek_parent (klass);
72         gobject_class->finalize = modest_account_assistant_finalize;
73
74         g_type_class_add_private (gobject_class, sizeof(ModestAccountAssistantPrivate));
75
76         /* signal definitions go here, e.g.: */
77 /*      signals[MY_SIGNAL_1] = */
78 /*              g_signal_new ("my_signal_1",....); */
79 /*      signals[MY_SIGNAL_2] = */
80 /*              g_signal_new ("my_signal_2",....); */
81 /*      etc. */
82 }
83
84
85
86 static void
87 add_intro_page (ModestAccountAssistant *assistant)
88 {
89         GtkWidget *page;
90         GtkWidget *label;
91         
92         page = gtk_vbox_new (FALSE, 6);
93         
94         label = gtk_label_new (
95                 _("Welcome to the account assistant\n\n"
96                   "It will help to set up a new e-mail account\n"));
97         gtk_box_pack_start (GTK_BOX(page), label, FALSE, FALSE, 6);
98         gtk_widget_show_all (page);
99         
100         gtk_assistant_append_page (GTK_ASSISTANT(assistant), page);
101                 
102         gtk_assistant_set_page_title (GTK_ASSISTANT(assistant), page,
103                                       _("Modest Account Assistant"));
104         gtk_assistant_set_page_type (GTK_ASSISTANT(assistant), page,
105                                      GTK_ASSISTANT_PAGE_INTRO);
106         gtk_assistant_set_page_complete (GTK_ASSISTANT(assistant),
107                                          page, TRUE);
108 }
109
110
111 static void
112 set_current_page_complete (ModestAccountAssistant *self, gboolean complete)
113 {
114         GtkWidget *page;
115         gint pageno;
116
117         pageno = gtk_assistant_get_current_page (GTK_ASSISTANT(self));
118         page   = gtk_assistant_get_nth_page (GTK_ASSISTANT(self), pageno);
119
120         gtk_assistant_set_page_complete (GTK_ASSISTANT(self), page, complete);
121 }
122
123
124 static void
125 identity_page_update_completeness (GtkEditable *editable,
126                                    ModestAccountAssistant *self)
127 {
128         ModestAccountAssistantPrivate *priv;
129         const gchar *txt;
130
131         priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
132
133         txt = gtk_entry_get_text (GTK_ENTRY(priv->entry_full_name));
134         if (!txt || strlen(txt) == 0) {
135                 set_current_page_complete (self, FALSE);
136                 return;
137         }
138
139         /* FIXME: regexp check for email address */
140         txt = gtk_entry_get_text (GTK_ENTRY(priv->entry_email));
141         if (!txt || strlen(txt) == 0) {
142                 set_current_page_complete (self, FALSE);
143                 return;
144         }
145         set_current_page_complete (self, TRUE);
146 }
147
148
149 static void
150 add_identity_page (ModestAccountAssistant *self)
151 {
152         GtkWidget *page;
153         GtkWidget *label;
154         GtkWidget *table;
155
156         ModestAccountAssistantPrivate *priv;
157
158         priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
159
160         priv->entry_full_name = gtk_entry_new_with_max_length (40);
161         priv->entry_email     = gtk_entry_new_with_max_length (40);
162
163         page = gtk_vbox_new (FALSE, 6);
164
165         label = gtk_label_new (
166                 _("Please enter your name and your e-mail address below.\n\n"));
167         gtk_box_pack_start (GTK_BOX(page), label, FALSE, FALSE, 6);
168         
169         table = gtk_table_new (2,2, FALSE);
170         gtk_table_attach_defaults (GTK_TABLE(table),gtk_label_new (_("Full name")),
171                                    0,1,0,1);
172         gtk_table_attach_defaults (GTK_TABLE(table),gtk_label_new (_("E-mail address")),
173                                    0,1,1,2);
174
175         gtk_table_attach_defaults (GTK_TABLE(table),priv->entry_full_name,
176                                    1,2,0,1);
177         gtk_table_attach_defaults (GTK_TABLE(table),priv->entry_email,
178                                    1,2,1,2);
179
180         g_signal_connect (G_OBJECT(priv->entry_full_name), "changed",
181                           G_CALLBACK(identity_page_update_completeness),
182                           self);
183         g_signal_connect (G_OBJECT(priv->entry_email), "changed",
184                           G_CALLBACK(identity_page_update_completeness),
185                           self);
186         
187         gtk_box_pack_start (GTK_BOX(page), table, FALSE, FALSE, 6);
188         gtk_widget_show_all (page);
189         
190         gtk_assistant_append_page (GTK_ASSISTANT(self), page);
191         
192         gtk_assistant_set_page_title (GTK_ASSISTANT(self), page,
193                                       _("Identity"));
194         gtk_assistant_set_page_type (GTK_ASSISTANT(self), page,
195                                      GTK_ASSISTANT_PAGE_INTRO);
196         gtk_assistant_set_page_complete (GTK_ASSISTANT(self),
197                                          page, FALSE);
198 }       
199
200
201 /*
202
203 static void
204 mbox_maildir_configuration (ModestAccountAssistant *self)
205 {
206         ModestAccountAssistantPrivate *priv;
207         GtkLabel *label;
208         GtkWidget *box, *hbox, *chooser;
209         
210         priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
211
212         box = gtk_vbox_new (FALSE, 6);
213         
214         label = gtk_label_new (NULL);
215         gtk_label_set_markup (_("Configuration"));
216
217         gtk_box_pack_start (GTK_BOX(box), label, FALSE, FALSE, 6);
218
219         label = gtk_label_new (_("Path"));
220         chooser = gtk_file_chooser_button_new (_("(none)"),
221                                                  GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
222         hbox = gtk_hbox_new (FALSE, 6);
223         gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 6);
224         gtk_box_pack_start (GTK_BOX(hbox), chooser, FALSE, FALSE, 6);
225
226         gtk_box_pack_start (GTK_BOX(box), hbox, FALSE, FALSE, 6);
227         
228         gtk_box_pack_start (GTK_BOX(page), box, FALSE, FALSE, 6);
229         
230         table = gtk_table_new (2,2, FALSE);
231 }
232
233 */
234
235
236 static void
237 add_receiving_page (ModestAccountAssistant *self)
238 {
239         GtkWidget *page;
240         GtkWidget *label;
241         GtkWidget *table;
242         GtkWidget *box;
243
244         ModestAccountAssistantPrivate *priv;
245
246         priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
247         priv->entry_server_name   = gtk_entry_new_with_max_length (40);
248         
249         page = gtk_vbox_new (FALSE, 6);
250
251         gtk_box_pack_start (GTK_BOX(page),
252                             gtk_label_new (
253                                     _("Please select among the following options.\n")),
254                             FALSE, FALSE, 6);
255
256         box = gtk_hbox_new (FALSE, 6);
257         gtk_box_pack_start (GTK_BOX(box),
258                             gtk_label_new(_("Server type")),
259                             FALSE,FALSE,6);
260         gtk_box_pack_start (GTK_BOX(box),
261                             modest_widget_factory_get_store_combo (priv->factory),
262                             FALSE,FALSE,6);
263         gtk_box_pack_start (GTK_BOX(page), box, FALSE,FALSE, 6);
264
265         gtk_box_pack_start (GTK_BOX(page), gtk_hseparator_new(), TRUE, TRUE, 6);
266
267
268         gtk_widget_show_all (page);
269         gtk_assistant_append_page (GTK_ASSISTANT(self), page);
270                 
271         gtk_assistant_set_page_title (GTK_ASSISTANT(self), page,
272                                       _("Receiving mail"));
273         gtk_assistant_set_page_type (GTK_ASSISTANT(self), page,
274                                      GTK_ASSISTANT_PAGE_INTRO);
275
276         gtk_assistant_set_page_complete (GTK_ASSISTANT(self),
277                                          page, TRUE);
278
279 }
280
281
282
283 static void
284 add_sending_page (ModestAccountAssistant *self)
285 {
286         GtkWidget *page;
287         GtkWidget *label;
288         GtkWidget *table;
289
290         ModestAccountAssistantPrivate *priv;
291
292         priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
293
294         //priv->combo_server_type   = gtk_entry_new_with_max_length (40);
295         priv->entry_server_name   = gtk_entry_new_with_max_length (40);
296
297         page = gtk_vbox_new (FALSE, 6);
298
299         label = gtk_label_new (
300                 _("Please enter your name and your e-mail address below.\n"));
301         gtk_box_pack_start (GTK_BOX(page), label, FALSE, FALSE, 6);
302         
303         label = gtk_label_new(NULL);
304         gtk_label_set_markup (GTK_LABEL(label),_("<b>Required</b>"));
305         gtk_box_pack_start (GTK_BOX(page), label, FALSE, FALSE, 6);
306
307         gtk_widget_show_all (page);
308
309         gtk_assistant_append_page (GTK_ASSISTANT(self), page);
310
311         gtk_assistant_set_page_title (GTK_ASSISTANT(self), page,
312                                       _("Sending mail"));
313         gtk_assistant_set_page_type (GTK_ASSISTANT(self), page,
314                                      GTK_ASSISTANT_PAGE_CONFIRM);
315
316         gtk_assistant_set_page_complete (GTK_ASSISTANT(self),
317                                          page, FALSE);
318
319 }
320
321
322
323
324
325 static void
326 modest_account_assistant_init (ModestAccountAssistant *obj)
327 {       
328         ModestAccountAssistantPrivate *priv;
329                 
330         priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(obj);
331
332         priv->factory = NULL;   
333 }
334
335 static void
336 modest_account_assistant_finalize (GObject *obj)
337 {
338         ModestAccountAssistantPrivate *priv;
339                 
340         priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(obj);
341
342         if (priv->factory) {
343                 g_object_unref (G_OBJECT(priv->factory));
344                 priv->factory = NULL;
345         }
346
347         G_OBJECT_CLASS(parent_class)->finalize (obj);
348 }
349
350
351
352 GtkWidget*
353 modest_account_assistant_new (ModestWidgetFactory *factory)
354 {
355         GObject *obj;
356         ModestAccountAssistant *self;
357         ModestAccountAssistantPrivate *priv;
358                 
359         g_return_val_if_fail (factory, NULL);
360         
361         obj  = g_object_new(MODEST_TYPE_ACCOUNT_ASSISTANT, NULL);
362         self = MODEST_ACCOUNT_ASSISTANT(obj);
363
364         priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
365         g_object_ref (factory);
366         priv->factory = factory;
367         
368         add_intro_page (self);
369         add_identity_page (self); 
370         add_receiving_page (self); 
371         add_sending_page (self); 
372
373         gtk_assistant_set_current_page (GTK_ASSISTANT(self), 0);
374         gtk_window_set_title (GTK_WINDOW(self),
375                               _("Modest Account Wizard"));
376         gtk_window_set_resizable (GTK_WINDOW(self), TRUE);      
377         gtk_window_set_default_size (GTK_WINDOW(self), 400, 400);
378
379         gtk_window_set_modal (GTK_WINDOW(self), TRUE);
380
381         return GTK_WIDGET(self);
382 }