* minor
[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 static void
203 mbox_maildir_configuration (ModestAccountAssistant *self)
204 {
205         ModestAccountAssistantPrivate *priv;
206         GtkLabel *label;
207         GtkWidget *box, *hbox, *chooser;
208         
209         priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
210
211         box = gtk_vbox_new (FALSE, 6);
212         
213         label = gtk_label_new (NULL);
214         gtk_label_set_markup (_("Configuration"));
215
216         gtk_box_pack_start (GTK_BOX(box), label, FALSE, FALSE, 6);
217
218         label = gtk_label_new (_("Path"));
219         chooser = gtk_file_chooser_button_new (_("(none)"),
220                                                  GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
221         hbox = gtk_hbox_new (FALSE, 6);
222         gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 6);
223         gtk_box_pack_start (GTK_BOX(hbox), chooser, FALSE, FALSE, 6);
224
225         gtk_box_pack_start (GTK_BOX(box), hbox, FALSE, FALSE, 6);
226         
227         gtk_box_pack_start (GTK_BOX(page), box, FALSE, FALSE, 6);
228         
229         table = gtk_table_new (2,2, FALSE);
230 }
231
232 */
233
234 static void
235 add_receiving_page (ModestAccountAssistant *self)
236 {
237         GtkWidget *page;
238         GtkWidget *label;
239         GtkWidget *table;
240         GtkWidget *box;
241
242         ModestAccountAssistantPrivate *priv;
243
244         priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
245         priv->entry_server_name   = gtk_entry_new_with_max_length (40);
246         
247         page = gtk_vbox_new (FALSE, 6);
248
249         gtk_box_pack_start (GTK_BOX(page),
250                             gtk_label_new (
251                                     _("Please select among the following options.\n")),
252                             FALSE, FALSE, 6);
253
254         box = gtk_hbox_new (FALSE, 6);
255         gtk_box_pack_start (GTK_BOX(box),
256                             gtk_label_new(_("Server type")),
257                             FALSE,FALSE,6);
258         gtk_box_pack_start (GTK_BOX(box),
259                             modest_widget_factory_get_store_combo (priv->factory),
260                             FALSE,FALSE,6);
261         gtk_box_pack_start (GTK_BOX(page), box, FALSE,FALSE, 6);
262
263         gtk_box_pack_start (GTK_BOX(page), gtk_hseparator_new(), TRUE, TRUE, 6);
264
265
266         gtk_widget_show_all (page);
267         gtk_assistant_append_page (GTK_ASSISTANT(self), page);
268                 
269         gtk_assistant_set_page_title (GTK_ASSISTANT(self), page,
270                                       _("Receiving mail"));
271         gtk_assistant_set_page_type (GTK_ASSISTANT(self), page,
272                                      GTK_ASSISTANT_PAGE_INTRO);
273
274         gtk_assistant_set_page_complete (GTK_ASSISTANT(self),
275                                          page, TRUE);
276
277 }
278
279
280
281 static void
282 add_sending_page (ModestAccountAssistant *self)
283 {
284         GtkWidget *page;
285         GtkWidget *label;
286         GtkWidget *table;
287
288         ModestAccountAssistantPrivate *priv;
289
290         priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
291
292         //priv->combo_server_type   = gtk_entry_new_with_max_length (40);
293         priv->entry_server_name   = gtk_entry_new_with_max_length (40);
294
295         page = gtk_vbox_new (FALSE, 6);
296
297         label = gtk_label_new (
298                 _("Please enter your name and your e-mail address below.\n"));
299         gtk_box_pack_start (GTK_BOX(page), label, FALSE, FALSE, 6);
300         
301         label = gtk_label_new(NULL);
302         gtk_label_set_markup (GTK_LABEL(label),_("<b>Required</b>"));
303         gtk_box_pack_start (GTK_BOX(page), label, FALSE, FALSE, 6);
304
305         gtk_widget_show_all (page);
306
307         gtk_assistant_append_page (GTK_ASSISTANT(self), page);
308
309         gtk_assistant_set_page_title (GTK_ASSISTANT(self), page,
310                                       _("Sending mail"));
311         gtk_assistant_set_page_type (GTK_ASSISTANT(self), page,
312                                      GTK_ASSISTANT_PAGE_CONFIRM);
313
314         gtk_assistant_set_page_complete (GTK_ASSISTANT(self),
315                                          page, FALSE);
316
317 }
318
319
320
321
322
323 static void
324 modest_account_assistant_init (ModestAccountAssistant *obj)
325 {       
326         ModestAccountAssistantPrivate *priv;
327                 
328         priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(obj);
329
330         priv->factory = NULL;   
331 }
332
333 static void
334 modest_account_assistant_finalize (GObject *obj)
335 {
336         ModestAccountAssistantPrivate *priv;
337                 
338         priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(obj);
339
340         if (priv->factory) {
341                 g_object_unref (G_OBJECT(priv->factory));
342                 priv->factory = NULL;
343         }
344
345         G_OBJECT_CLASS(parent_class)->finalize (obj);
346 }
347
348
349
350 GtkWidget*
351 modest_account_assistant_new (ModestWidgetFactory *factory)
352 {
353         GObject *obj;
354         ModestAccountAssistant *self;
355         ModestAccountAssistantPrivate *priv;
356                 
357         g_return_val_if_fail (factory, NULL);
358         
359         obj  = g_object_new(MODEST_TYPE_ACCOUNT_ASSISTANT, NULL);
360         self = MODEST_ACCOUNT_ASSISTANT(obj);
361
362         priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
363         g_object_ref (factory);
364         priv->factory = factory;
365         
366         add_intro_page (self);
367         add_identity_page (self); 
368         add_receiving_page (self); 
369         add_sending_page (self); 
370
371         gtk_assistant_set_current_page (GTK_ASSISTANT(self), 0);
372         gtk_window_set_title (GTK_WINDOW(self),
373                               _("Modest Account Wizard"));
374         gtk_window_set_resizable (GTK_WINDOW(self), TRUE);      
375         gtk_window_set_default_size (GTK_WINDOW(self), 400, 400);
376
377         gtk_window_set_modal (GTK_WINDOW(self), TRUE);
378
379         return GTK_WIDGET(self);
380 }