1 /* modest-account-assistant.c */
3 /* insert (c)/licensing information) */
5 #include "modest-account-assistant.h"
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);
20 typedef struct _ModestAccountAssistantPrivate ModestAccountAssistantPrivate;
21 struct _ModestAccountAssistantPrivate {
22 ModestWidgetFactory *factory;
24 GtkWidget *entry_full_name;
25 GtkWidget *entry_email;
26 GtkWidget *entry_server_name;
28 GtkWidget *pop_imap_config;
29 GtkWidget *mbox_maildir_config;
33 #define MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
34 MODEST_TYPE_ACCOUNT_ASSISTANT, \
35 ModestAccountAssistantPrivate))
37 static GtkAssistantClass *parent_class = NULL;
39 /* uncomment the following if you have defined any signals */
40 /* static guint signals[LAST_SIGNAL] = {0}; */
43 modest_account_assistant_get_type (void)
45 static GType my_type = 0;
47 static const GTypeInfo my_info = {
48 sizeof(ModestAccountAssistantClass),
50 NULL, /* base finalize */
51 (GClassInitFunc) modest_account_assistant_class_init,
52 NULL, /* class finalize */
53 NULL, /* class data */
54 sizeof(ModestAccountAssistant),
56 (GInstanceInitFunc) modest_account_assistant_init,
58 my_type = g_type_register_static (GTK_TYPE_ASSISTANT,
59 "ModestAccountAssistant",
66 modest_account_assistant_class_init (ModestAccountAssistantClass *klass)
68 GObjectClass *gobject_class;
69 gobject_class = (GObjectClass*) klass;
71 parent_class = g_type_class_peek_parent (klass);
72 gobject_class->finalize = modest_account_assistant_finalize;
74 g_type_class_add_private (gobject_class, sizeof(ModestAccountAssistantPrivate));
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",....); */
87 add_intro_page (ModestAccountAssistant *assistant)
92 page = gtk_vbox_new (FALSE, 6);
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);
100 gtk_assistant_append_page (GTK_ASSISTANT(assistant), page);
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),
112 set_current_page_complete (ModestAccountAssistant *self, gboolean complete)
117 pageno = gtk_assistant_get_current_page (GTK_ASSISTANT(self));
118 page = gtk_assistant_get_nth_page (GTK_ASSISTANT(self), pageno);
120 gtk_assistant_set_page_complete (GTK_ASSISTANT(self), page, complete);
125 identity_page_update_completeness (GtkEditable *editable,
126 ModestAccountAssistant *self)
128 ModestAccountAssistantPrivate *priv;
131 priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
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);
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);
145 set_current_page_complete (self, TRUE);
150 add_identity_page (ModestAccountAssistant *self)
156 ModestAccountAssistantPrivate *priv;
158 priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
160 priv->entry_full_name = gtk_entry_new_with_max_length (40);
161 priv->entry_email = gtk_entry_new_with_max_length (40);
163 page = gtk_vbox_new (FALSE, 6);
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);
169 table = gtk_table_new (2,2, FALSE);
170 gtk_table_attach_defaults (GTK_TABLE(table),gtk_label_new (_("Full name")),
172 gtk_table_attach_defaults (GTK_TABLE(table),gtk_label_new (_("E-mail address")),
175 gtk_table_attach_defaults (GTK_TABLE(table),priv->entry_full_name,
177 gtk_table_attach_defaults (GTK_TABLE(table),priv->entry_email,
180 g_signal_connect (G_OBJECT(priv->entry_full_name), "changed",
181 G_CALLBACK(identity_page_update_completeness),
183 g_signal_connect (G_OBJECT(priv->entry_email), "changed",
184 G_CALLBACK(identity_page_update_completeness),
187 gtk_box_pack_start (GTK_BOX(page), table, FALSE, FALSE, 6);
188 gtk_widget_show_all (page);
190 gtk_assistant_append_page (GTK_ASSISTANT(self), page);
192 gtk_assistant_set_page_title (GTK_ASSISTANT(self), page,
194 gtk_assistant_set_page_type (GTK_ASSISTANT(self), page,
195 GTK_ASSISTANT_PAGE_INTRO);
196 gtk_assistant_set_page_complete (GTK_ASSISTANT(self),
204 mbox_maildir_configuration (ModestAccountAssistant *self)
206 ModestAccountAssistantPrivate *priv;
208 GtkWidget *box, *hbox, *chooser;
210 priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
212 box = gtk_vbox_new (FALSE, 6);
214 label = gtk_label_new (NULL);
215 gtk_label_set_markup (_("Configuration"));
217 gtk_box_pack_start (GTK_BOX(box), label, FALSE, FALSE, 6);
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);
226 gtk_box_pack_start (GTK_BOX(box), hbox, FALSE, FALSE, 6);
228 gtk_box_pack_start (GTK_BOX(page), box, FALSE, FALSE, 6);
230 table = gtk_table_new (2,2, FALSE);
237 add_receiving_page (ModestAccountAssistant *self)
244 ModestAccountAssistantPrivate *priv;
246 priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
247 priv->entry_server_name = gtk_entry_new_with_max_length (40);
249 page = gtk_vbox_new (FALSE, 6);
251 gtk_box_pack_start (GTK_BOX(page),
253 _("Please select among the following options.\n")),
256 box = gtk_hbox_new (FALSE, 6);
257 gtk_box_pack_start (GTK_BOX(box),
258 gtk_label_new(_("Server type")),
260 gtk_box_pack_start (GTK_BOX(box),
261 modest_widget_factory_get_store_combo (priv->factory),
263 gtk_box_pack_start (GTK_BOX(page), box, FALSE,FALSE, 6);
265 gtk_box_pack_start (GTK_BOX(page), gtk_hseparator_new(), TRUE, TRUE, 6);
268 gtk_widget_show_all (page);
269 gtk_assistant_append_page (GTK_ASSISTANT(self), page);
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);
276 gtk_assistant_set_page_complete (GTK_ASSISTANT(self),
284 add_sending_page (ModestAccountAssistant *self)
290 ModestAccountAssistantPrivate *priv;
292 priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
294 //priv->combo_server_type = gtk_entry_new_with_max_length (40);
295 priv->entry_server_name = gtk_entry_new_with_max_length (40);
297 page = gtk_vbox_new (FALSE, 6);
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);
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);
307 gtk_widget_show_all (page);
309 gtk_assistant_append_page (GTK_ASSISTANT(self), page);
311 gtk_assistant_set_page_title (GTK_ASSISTANT(self), page,
313 gtk_assistant_set_page_type (GTK_ASSISTANT(self), page,
314 GTK_ASSISTANT_PAGE_CONFIRM);
316 gtk_assistant_set_page_complete (GTK_ASSISTANT(self),
326 modest_account_assistant_init (ModestAccountAssistant *obj)
328 ModestAccountAssistantPrivate *priv;
330 priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(obj);
332 priv->factory = NULL;
336 modest_account_assistant_finalize (GObject *obj)
338 ModestAccountAssistantPrivate *priv;
340 priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(obj);
343 g_object_unref (G_OBJECT(priv->factory));
344 priv->factory = NULL;
347 G_OBJECT_CLASS(parent_class)->finalize (obj);
353 modest_account_assistant_new (ModestWidgetFactory *factory)
356 ModestAccountAssistant *self;
357 ModestAccountAssistantPrivate *priv;
359 g_return_val_if_fail (factory, NULL);
361 obj = g_object_new(MODEST_TYPE_ACCOUNT_ASSISTANT, NULL);
362 self = MODEST_ACCOUNT_ASSISTANT(obj);
364 priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
365 g_object_ref (factory);
366 priv->factory = factory;
368 add_intro_page (self);
369 add_identity_page (self);
370 add_receiving_page (self);
371 add_sending_page (self);
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);
379 gtk_window_set_modal (GTK_WINDOW(self), TRUE);
381 return GTK_WIDGET(self);