1 /* modest-ui-wizard.c */
3 /* insert (c)/licensing information) */
6 #include <glade/glade.h>
7 #include <glib/gi18n.h>
12 #endif /*HAVE_CONFIG_H*/
14 #include "../modest-account-mgr.h"
15 #include "../modest-identity-mgr.h"
17 #include "modest-ui-glade.h"
18 #include "modest-ui-account-setup.h"
34 typedef struct _CallbackData CallbackData;
36 struct _CallbackData {
37 GtkTreeView *id_tree_view;
38 GtkTreeView *acc_tree_view;
44 identity_setup_dialog (ModestUI *, GtkTreeModel *, gchar *);
47 account_setup_dialog (ModestUI *, gchar *);
50 missing_notification(GtkWindow *, gchar *);
53 create_identities_model(ModestIdentityMgr *);
56 create_accounts_model(ModestAccountMgr *);
59 refresh_identities(ModestIdentityMgr *,
63 refresh_accounts(ModestAccountMgr *, GladeXML *glade_xml);
68 filter_transports (GtkTreeModel *model,
75 gtk_tree_model_get(model,
80 retval = strcasecmp(name, "SMTP")==0;
87 account_edit_action(GtkWidget *button,
90 CallbackData *cb_data;
91 GtkTreeModel *acc_liststore;
92 GtkTreeSelection *selection;
93 GtkTreeIter selected_iter;
96 cb_data = (CallbackData *) userdata;
97 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(cb_data->acc_tree_view));
99 gtk_tree_selection_get_selected(selection,
102 gtk_tree_model_get(GTK_TREE_MODEL(acc_liststore),
104 ACCOUNT_NAME, &account_name,
107 account_setup_dialog (cb_data->modest_ui, account_name);
108 g_free(account_name);
112 account_create_action(GtkWidget *button,
114 CallbackData *cb_data;
116 cb_data = (CallbackData *) userdata;
118 account_setup_dialog(cb_data->modest_ui, NULL);
122 account_delete_action(GtkWidget *button,
124 CallbackData *cb_data;
125 GtkTreeSelection *selection;
126 GtkTreeIter selected_iter;
127 GtkTreeModel *acc_liststore;
128 GtkWidget *confirmation_dialog;
129 GtkWidget *confirmation_message;
130 ModestUIPrivate *priv;
135 cb_data = (CallbackData *) userdata;
136 priv = MODEST_UI_GET_PRIVATE(cb_data->modest_ui);
137 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(cb_data->acc_tree_view));
139 gtk_tree_selection_get_selected(selection,
142 gtk_tree_model_get(GTK_TREE_MODEL(acc_liststore),
144 ACCOUNT_NAME, &account_name,
147 confirmation_dialog = gtk_dialog_new_with_buttons ("Confirm removal of account",
148 GTK_WINDOW(gtk_widget_get_toplevel(button)),
149 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
156 message = g_strdup_printf("Remove selected account '%s'?", account_name);
157 confirmation_message = gtk_label_new_with_mnemonic (message);
159 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(confirmation_dialog)->vbox), confirmation_message, FALSE, FALSE, 10);
161 gtk_widget_show_all(confirmation_dialog);
163 result=gtk_dialog_run(GTK_DIALOG(confirmation_dialog));
164 if (result==GTK_RESPONSE_OK)
166 modest_account_mgr_remove_server_account(priv->modest_acc_mgr,
171 gtk_widget_destroy(confirmation_dialog);
172 g_free(account_name);
178 identity_edit_action(GtkWidget *button,
181 CallbackData *cb_data;
182 GtkTreeModel *acc_liststore;
183 GtkTreeModel *id_liststore;
184 GtkTreeSelection *selection;
185 GtkTreeIter selected_iter;
186 gchar *identity_name;
188 cb_data = (CallbackData *) userdata;
189 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(cb_data->id_tree_view));
191 gtk_tree_selection_get_selected(selection,
194 gtk_tree_model_get(GTK_TREE_MODEL(id_liststore),
196 IDENTITY_NAME, &identity_name,
198 /* We use the available tree model from the accounts page to display a selection
199 * of transports in the identities. Since we only want the transport accounts,
200 * we derive a gtk_tree_model_filter and apply filter_transports function.
202 acc_liststore = gtk_tree_model_filter_new(gtk_tree_view_get_model(cb_data->acc_tree_view),
204 gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(acc_liststore),
209 identity_setup_dialog (cb_data->modest_ui, acc_liststore, identity_name);
210 g_free(identity_name);
214 identity_create_action(GtkWidget *button,
217 CallbackData *cb_data;
218 GtkTreeModel *acc_liststore;
220 cb_data = (CallbackData *) userdata;
222 /* Works as in identity_edit_action. */
223 acc_liststore = gtk_tree_model_filter_new(gtk_tree_view_get_model(cb_data->acc_tree_view),
225 gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(acc_liststore),
230 identity_setup_dialog(cb_data->modest_ui, acc_liststore, NULL);
231 g_object_unref(acc_liststore);
235 identity_delete_action(GtkWidget *button,
238 CallbackData *cb_data;
239 GtkTreeSelection *selection;
240 GtkTreeIter selected_iter;
241 GtkTreeModel *id_liststore;
242 GtkWidget *confirmation_dialog;
243 GtkWidget *confirmation_message;
244 ModestUIPrivate *priv;
245 gchar *identity_name;
249 cb_data = (CallbackData *) userdata;
250 priv = MODEST_UI_GET_PRIVATE(cb_data->modest_ui);
251 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(cb_data->id_tree_view));
253 gtk_tree_selection_get_selected(selection,
256 gtk_tree_model_get(GTK_TREE_MODEL(id_liststore),
258 ACCOUNT_NAME, &identity_name,
261 confirmation_dialog = gtk_dialog_new_with_buttons ("Confirm removal of identity",
262 GTK_WINDOW(gtk_widget_get_toplevel(button)),
263 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
270 message = g_strdup_printf("Remove selected identity '%s'?", identity_name);
271 confirmation_message = gtk_label_new_with_mnemonic (message);
273 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(confirmation_dialog)->vbox), confirmation_message, FALSE, FALSE, 10);
275 gtk_widget_show_all(confirmation_dialog);
277 result=gtk_dialog_run(GTK_DIALOG(confirmation_dialog));
278 if (result==GTK_RESPONSE_OK)
280 modest_identity_mgr_remove_identity(priv->modest_id_mgr,
285 gtk_widget_destroy(confirmation_dialog);
286 g_free(identity_name);
291 activate_buttons_on_identity(GtkTreeView *tree_view,
297 glade_xml=(GladeXML *) user_data;
299 button = glade_xml_get_widget(GLADE_XML(glade_xml), "IdentityEditButton");
300 gtk_widget_set_sensitive(GTK_WIDGET(button), TRUE);
301 button = glade_xml_get_widget(GLADE_XML(glade_xml), "IdentityDeleteButton");
302 gtk_widget_set_sensitive(GTK_WIDGET(button), TRUE);
306 activate_buttons_on_account(GtkTreeView *tree_view,
312 glade_xml=(GladeXML *) user_data;
314 button = glade_xml_get_widget(GLADE_XML(glade_xml), "AccountEditButton");
315 gtk_widget_set_sensitive(GTK_WIDGET(button), TRUE);
316 button = glade_xml_get_widget(GLADE_XML(glade_xml), "AccountDeleteButton");
317 gtk_widget_set_sensitive(GTK_WIDGET(button), TRUE);
321 use_sig_toggled(GtkToggleButton *button,
325 GladeXML *glade_xml = (GladeXML *) userdata;
327 awidget=glade_xml_get_widget(glade_xml, "ISSignatureTextView");
328 gtk_widget_set_sensitive(awidget, gtk_toggle_button_get_active(button));
332 refresh_accounts_on_add(ModestAccountMgr *modest_acc_mgr,
336 refresh_accounts(modest_acc_mgr, (GladeXML *) userdata);
340 refresh_accounts_on_remove(ModestAccountMgr *modest_acc_mgr,
344 GladeXML *glade_xml = (GladeXML *) userdata;
347 refresh_accounts(modest_acc_mgr, (GladeXML *) userdata);
348 /* Since we loose the selection through the delete operation, we need to
349 * change the buttons sensitivity .
351 button = glade_xml_get_widget(GLADE_XML(glade_xml), "AccountEditButton");
352 gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
353 button = glade_xml_get_widget(GLADE_XML(glade_xml), "AccountDeleteButton");
354 gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
358 refresh_accounts_on_change(ModestAccountMgr *modest_acc_mgr,
364 refresh_accounts(modest_acc_mgr, (GladeXML *) userdata);
368 refresh_identities_on_add(ModestIdentityMgr *modest_id_mgr,
371 refresh_identities(modest_id_mgr, (GladeXML *) userdata);
375 refresh_identities_on_remove(ModestIdentityMgr *modest_id_mgr,
379 GladeXML *glade_xml = (GladeXML *) userdata;
382 refresh_identities(modest_id_mgr, glade_xml);
384 /* Since we loose the selection through the delete operation, we need to
385 * change the buttons sensitivity .
387 button = glade_xml_get_widget(GLADE_XML(glade_xml), "IdentityEditButton");
388 gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
389 button = glade_xml_get_widget(GLADE_XML(glade_xml), "IdentityDeleteButton");
390 gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
394 refresh_identities_on_change(ModestIdentityMgr *modest_id_mgr,
399 refresh_identities(modest_id_mgr, (GladeXML *) userdata);
405 search_model_column_for_string_advanced(GtkTreeModel *model, GtkTreeIter *iter, gint ColNum, gchar *search, gboolean mcase) {
410 iter_true = gtk_tree_model_get_iter_first(model, iter);
412 gtk_tree_model_get(model,
416 if ((mcase && strcasecmp(tmptext, search)==0)
417 || strcmp(tmptext, search)==0) {
422 iter_true = gtk_tree_model_iter_next(model, iter);
431 search_model_column_for_string(GtkTreeModel *model, GtkTreeIter *iter, gint ColNum, gchar *search) {
432 return search_model_column_for_string_advanced(model, iter, ColNum, search, FALSE);
436 case_search_model_column_for_string(GtkTreeModel *model, GtkTreeIter *iter, gint ColNum, gchar *search) {
437 return search_model_column_for_string_advanced(model, iter, ColNum, search, TRUE);
441 refresh_identities(ModestIdentityMgr *modest_id_mgr,
442 GladeXML *glade_xml) {
444 GtkTreeModel *id_liststore;
445 GtkTreeView *id_treeview;
447 id_treeview = GTK_TREE_VIEW(glade_xml_get_widget(glade_xml, "IdentitiesTreeview"));
449 id_liststore=create_identities_model(modest_id_mgr);
450 gtk_tree_view_set_model(GTK_TREE_VIEW(id_treeview), id_liststore);
454 refresh_accounts(ModestAccountMgr *modest_acc_mgr,
455 GladeXML *glade_xml) {
457 GtkTreeModel *acc_liststore;
458 GtkTreeView *acc_treeview;
460 acc_treeview = GTK_TREE_VIEW(glade_xml_get_widget(glade_xml, "AccountsTreeview"));
462 acc_liststore=create_accounts_model(modest_acc_mgr);
463 gtk_tree_view_set_model(GTK_TREE_VIEW(acc_treeview), acc_liststore);
467 missing_notification(GtkWindow *parent, gchar *info_message) {
469 GtkWidget *DenyDialog;
471 DenyDialog=gtk_message_dialog_new(parent,
478 gtk_dialog_run(GTK_DIALOG(DenyDialog));
480 gtk_widget_destroy(DenyDialog);
484 write_identity(GladeXML *glade_xml, ModestUI *modest_ui, GtkTreeModel *accounts_model, gboolean newidentity) {
486 GtkTextBuffer *sigbuff;
487 GtkTextIter start_iter;
488 GtkTextIter end_iter;
489 GtkTreeIter transport_iter;
490 ModestUIPrivate *priv;
491 const gchar *identity;
496 priv = MODEST_UI_GET_PRIVATE(MODEST_UI(modest_ui));
498 reply_to = g_strdup_printf("%s", gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISReplyToEntry"))));
500 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(glade_xml, "ISUseSignatureCheckButton"))))
502 sigbuff = gtk_text_view_get_buffer(GTK_TEXT_VIEW(glade_xml_get_widget(glade_xml, "ISSignatureTextView")));
503 gtk_text_buffer_get_bounds(sigbuff,
506 signature = gtk_text_buffer_get_text(sigbuff,
514 if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(glade_xml_get_widget(glade_xml, "ISOutServerComboBox")), &transport_iter)) {
515 gtk_tree_model_get(GTK_TREE_MODEL(accounts_model),
517 ACCOUNT_NAME, &transport,
521 missing_notification(NULL, "Please select an outgoing server!");
525 identity = gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISIdentityEntry")));
529 if (modest_identity_mgr_add_identity (priv->modest_id_mgr,
532 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISEMailAddress"))),
541 if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
543 MODEST_IDENTITY_REALNAME,
544 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISNameEntry"))),
547 if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
549 MODEST_IDENTITY_EMAIL,
550 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISEMailAddress"))),
553 if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
555 MODEST_IDENTITY_REPLYTO,
559 if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
561 MODEST_IDENTITY_SIGNATURE,
565 if (!modest_identity_mgr_set_identity_bool(priv->modest_id_mgr,
567 MODEST_IDENTITY_USE_SIGNATURE,
568 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(glade_xml,
569 "ISUseSignatureCheckButton"))),
572 if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
574 MODEST_IDENTITY_ID_VIA,
578 if (!modest_identity_mgr_set_identity_bool(priv->modest_id_mgr,
580 MODEST_IDENTITY_USE_ID_VIA,
581 TRUE, /* FIXME: for now */
589 write_account(GladeXML *glade_xml, ModestUI *modest_ui, gboolean newaccount) {
591 ModestUIPrivate *priv;
592 const gchar *account;
597 priv = MODEST_UI_GET_PRIVATE(MODEST_UI(modest_ui));
599 account = gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASDisplaynameEntry")));
602 tmptext = gtk_combo_box_get_active_text(GTK_COMBO_BOX(glade_xml_get_widget(glade_xml, "ASProtocolComboBox")));
603 protocol = g_utf8_strdown(tmptext, -1);
606 retval = modest_account_mgr_add_server_account (priv->modest_acc_mgr,
608 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASHostnameEntry"))),
609 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASUsernameEntry"))),
610 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASPasswordEntry"))),
615 if (!modest_account_mgr_set_server_account_string(priv->modest_acc_mgr,
617 MODEST_ACCOUNT_HOSTNAME,
618 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASHostnameEntry"))),
621 if (!modest_account_mgr_set_server_account_string(priv->modest_acc_mgr,
623 MODEST_ACCOUNT_USERNAME,
624 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASUsernameEntry"))),
627 if (!modest_account_mgr_set_server_account_string(priv->modest_acc_mgr,
629 MODEST_ACCOUNT_PASSWORD,
630 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASPasswordEntry"))),
637 identity_setup_dialog (ModestUI *modest_ui, GtkTreeModel *accounts_model, gchar *identity)
641 GtkWidget *id_dialog;
642 GtkWidget *outgoing_server;
644 GtkCellRenderer *renderer;
645 ModestIdentityMgr *id_mgr;
646 GtkTextBuffer *sigbuff;
647 GtkTreeIter out_iter;
650 gint identity_added_successfully;
652 gboolean newidentity;
654 glade_xml = glade_xml_new(MODEST_GLADE, "IdentitySetupDialog", NULL);
655 id_dialog = glade_xml_get_widget(glade_xml, "IdentitySetupDialog");
657 outgoing_server = glade_xml_get_widget(glade_xml, "ISOutServerComboBox");
658 gtk_combo_box_set_model(GTK_COMBO_BOX(outgoing_server), GTK_TREE_MODEL(accounts_model));
659 renderer = gtk_cell_renderer_text_new ();
660 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (outgoing_server), renderer, TRUE);
661 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (outgoing_server), renderer,
664 awidget=glade_xml_get_widget(glade_xml, "ISUseSignatureCheckButton");
665 g_signal_connect(awidget,
667 G_CALLBACK(use_sig_toggled),
670 newidentity = identity==NULL;
672 id_mgr = MODEST_UI_GET_PRIVATE(modest_ui)->modest_id_mgr;
674 outacc_name = modest_identity_mgr_get_identity_string(id_mgr,
676 MODEST_IDENTITY_ID_VIA,
678 if (search_model_column_for_string(GTK_TREE_MODEL(accounts_model),
682 gtk_combo_box_set_active_iter(GTK_COMBO_BOX(outgoing_server), &out_iter);
684 awidget=glade_xml_get_widget(glade_xml, "ISIdentityEntry");
685 gtk_widget_set_sensitive(awidget, FALSE);
686 gtk_entry_set_text(GTK_ENTRY(awidget), identity);
687 tmptext = modest_identity_mgr_get_identity_string(id_mgr,
689 MODEST_IDENTITY_EMAIL,
691 awidget=glade_xml_get_widget(glade_xml, "ISEMailAddress");
692 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
695 if (modest_identity_mgr_get_identity_bool(id_mgr,
697 MODEST_IDENTITY_USE_SIGNATURE,
699 awidget=glade_xml_get_widget(glade_xml, "ISUseSignatureCheckButton");
700 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(awidget), TRUE);
701 awidget=glade_xml_get_widget(glade_xml, "ISSignatureTextView");
702 gtk_widget_set_sensitive(awidget, TRUE);
705 sigbuff=gtk_text_buffer_new(NULL);
706 tmptext = modest_identity_mgr_get_identity_string(id_mgr,
708 MODEST_IDENTITY_SIGNATURE,
710 gtk_text_buffer_set_text(sigbuff, tmptext, -1);
711 gtk_text_view_set_buffer(GTK_TEXT_VIEW(glade_xml_get_widget(glade_xml, "ISSignatureTextView")),
713 g_object_unref(sigbuff);
716 tmptext = modest_identity_mgr_get_identity_string(id_mgr,
718 MODEST_IDENTITY_EMAIL,
720 awidget=glade_xml_get_widget(glade_xml, "ISEMailAddress");
721 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
724 tmptext = modest_identity_mgr_get_identity_string(id_mgr,
726 MODEST_IDENTITY_REALNAME,
728 awidget=glade_xml_get_widget(glade_xml, "ISNameEntry");
729 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
732 tmptext = modest_identity_mgr_get_identity_string(id_mgr,
734 MODEST_IDENTITY_REPLYTO,
736 awidget=glade_xml_get_widget(glade_xml, "ISReplyToEntry");
737 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
743 gtk_widget_show_all(id_dialog);
746 result=gtk_dialog_run(GTK_DIALOG(id_dialog));
749 case GTK_RESPONSE_OK:
750 identity_added_successfully = write_identity(glade_xml, modest_ui, accounts_model, newidentity);
753 identity_added_successfully = FALSE;
756 } while(result!=GTK_RESPONSE_DELETE_EVENT && result!=GTK_RESPONSE_CANCEL && identity_added_successfully!=TRUE);
758 gtk_widget_destroy(id_dialog);
759 g_object_unref(glade_xml);
763 account_setup_dialog (ModestUI *modest_ui, gchar *account) {
766 GtkWidget *acc_dialog;
768 ModestAccountMgr *acc_mgr;
769 GtkTreeModel *typemodel;
770 GtkTreeIter proto_iter;
772 gint account_added_successfully;
776 glade_xml = glade_xml_new(MODEST_GLADE, "AccountSetupDialog", NULL);
777 acc_dialog = glade_xml_get_widget(glade_xml, "AccountSetupDialog");
779 newaccount = account==NULL;
781 acc_mgr = MODEST_UI_GET_PRIVATE(modest_ui)->modest_acc_mgr;
783 awidget=glade_xml_get_widget(glade_xml, "ASDisplaynameEntry");
784 gtk_widget_set_sensitive(awidget, FALSE);
785 gtk_entry_set_text(GTK_ENTRY(awidget), account);
787 tmptext = modest_account_mgr_get_server_account_string(acc_mgr,
789 MODEST_ACCOUNT_PROTO,
791 awidget=glade_xml_get_widget(glade_xml, "ASProtocolComboBox");
792 gtk_widget_set_sensitive(awidget, FALSE);
793 typemodel = gtk_combo_box_get_model(GTK_COMBO_BOX(awidget));
794 if (case_search_model_column_for_string(typemodel, &proto_iter, 0, tmptext))
795 gtk_combo_box_set_active_iter(GTK_COMBO_BOX(awidget), &proto_iter);
799 tmptext = modest_account_mgr_get_server_account_string(acc_mgr,
801 MODEST_ACCOUNT_HOSTNAME,
803 awidget=glade_xml_get_widget(glade_xml, "ASHostnameEntry");
804 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
807 tmptext = modest_account_mgr_get_server_account_string(acc_mgr,
809 MODEST_ACCOUNT_USERNAME,
811 awidget=glade_xml_get_widget(glade_xml, "ASUsernameEntry");
812 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
815 tmptext = modest_account_mgr_get_server_account_string(acc_mgr,
817 MODEST_ACCOUNT_PASSWORD,
819 awidget=glade_xml_get_widget(glade_xml, "ASPasswordEntry");
820 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
824 gtk_widget_show_all(acc_dialog);
827 result=gtk_dialog_run(GTK_DIALOG(acc_dialog));
830 case GTK_RESPONSE_OK:
831 account_added_successfully = write_account(glade_xml, modest_ui, newaccount);
835 account_added_successfully = FALSE;
838 } while(result!=GTK_RESPONSE_DELETE_EVENT && result!=GTK_RESPONSE_CANCEL && account_added_successfully!=TRUE);
840 gtk_widget_destroy(acc_dialog);
841 g_object_unref(glade_xml);
845 static CallbackData *
846 setup_callback_data(GtkTreeView *id_tree_view,
847 GtkTreeView *acc_tree_view,
852 self = g_malloc(sizeof(CallbackData));
853 self->modest_ui=modest_ui;
854 self->id_tree_view=id_tree_view;
855 self->acc_tree_view=acc_tree_view;
856 self->glade_xml=glade_xml;
861 free_callback_data(CallbackData *data)
866 static GtkTreeModel *
867 create_identities_model(ModestIdentityMgr *id_mgr) {
869 GSList *id_names_list;
870 GSList *id_names_list_iter;
871 GtkListStore *id_list_store;
872 GtkTreeIter id_list_store_iter;
876 id_names_list = modest_identity_mgr_identity_names(id_mgr, NULL);
877 id_list_store = gtk_list_store_new(IDENTITY_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
879 for (id_names_list_iter=id_names_list;
880 id_names_list_iter!=NULL;
881 id_names_list_iter=g_slist_next(id_names_list_iter)) {
882 gtk_list_store_append(id_list_store, &id_list_store_iter);
883 tmptext1=modest_identity_mgr_get_identity_string(id_mgr,
884 id_names_list_iter->data,
885 MODEST_IDENTITY_EMAIL,
887 tmptext2=modest_identity_mgr_get_identity_string(id_mgr,
888 id_names_list_iter->data,
889 MODEST_IDENTITY_ID_VIA,
891 gtk_list_store_set(id_list_store, &id_list_store_iter,
892 IDENTITY_NAME, id_names_list_iter->data,
893 IDENTITY_ADDRESS, tmptext1,
894 IDENTITY_VIA, tmptext2,
900 g_slist_free(id_names_list);
902 return GTK_TREE_MODEL(id_list_store);
905 static GtkTreeModel *
906 create_accounts_model(ModestAccountMgr *acc_mgr) {
908 GSList *acc_names_list;
909 GSList *acc_names_list_iter;
910 GtkListStore *acc_list_store;
911 GtkTreeIter acc_list_store_iter;
915 acc_names_list = modest_account_mgr_server_account_names(acc_mgr,
917 MODEST_PROTO_TYPE_ANY,
920 acc_list_store = gtk_list_store_new(ACCOUNT_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
922 for (acc_names_list_iter=acc_names_list;
923 acc_names_list_iter!=NULL;
924 acc_names_list_iter=g_slist_next(acc_names_list_iter)) {
925 gtk_list_store_append(acc_list_store, &acc_list_store_iter);
926 hostname=modest_account_mgr_get_server_account_string(acc_mgr,
927 acc_names_list_iter->data,
928 MODEST_ACCOUNT_HOSTNAME,
930 protocol=modest_account_mgr_get_server_account_string(acc_mgr,
931 acc_names_list_iter->data,
932 MODEST_ACCOUNT_PROTO,
934 gtk_list_store_set(acc_list_store, &acc_list_store_iter,
935 ACCOUNT_NAME, acc_names_list_iter->data,
936 ACCOUNT_HOST, hostname,
937 ACCOUNT_PROT, protocol,
943 g_slist_free(acc_names_list);
945 return GTK_TREE_MODEL(acc_list_store);
950 accounts_and_identities_dialog (gpointer user_data)
953 GtkWidget *main_dialog;
954 GtkTreeView *identities_tree_view;
955 GtkTreeView *accounts_tree_view;
957 ModestUIPrivate *priv;
960 GtkCellRenderer *renderer;
961 GtkTreeViewColumn *column;
962 CallbackData *cb_data;
965 g_return_if_fail(MODEST_IS_UI(user_data));
966 modest_ui = (ModestUI *) user_data;
967 priv = MODEST_UI_GET_PRIVATE(modest_ui);
969 glade_xml = glade_xml_new(MODEST_GLADE, "IdentitiesAndAccountsDialog", NULL);
970 main_dialog = glade_xml_get_widget(glade_xml, "IdentitiesAndAccountsDialog");
973 accounts_tree_view = GTK_TREE_VIEW(glade_xml_get_widget(glade_xml, "AccountsTreeview"));
974 /* Account -> Accountname */
975 renderer = gtk_cell_renderer_text_new ();
976 column = gtk_tree_view_column_new_with_attributes ("Account",
978 "text", ACCOUNT_NAME,
980 gtk_tree_view_append_column (accounts_tree_view, column);
981 /* Account -> Hostname */
982 renderer = gtk_cell_renderer_text_new ();
983 column = gtk_tree_view_column_new_with_attributes ("Hostname",
985 "text", ACCOUNT_HOST,
987 gtk_tree_view_append_column (accounts_tree_view, column);
990 identities_tree_view = GTK_TREE_VIEW(glade_xml_get_widget(glade_xml, "IdentitiesTreeview"));
992 /* Identities -> Identityname */
993 renderer = gtk_cell_renderer_text_new ();
994 column = gtk_tree_view_column_new_with_attributes ("Identity",
996 "text", IDENTITY_NAME,
998 gtk_tree_view_append_column (identities_tree_view, column);
1000 /* Identities -> E-mail address */
1001 renderer = gtk_cell_renderer_text_new ();
1002 column = gtk_tree_view_column_new_with_attributes ("E-mail address",
1004 "text", IDENTITY_ADDRESS,
1006 gtk_tree_view_append_column (identities_tree_view, column);
1008 /* Identities -> Relay */
1009 renderer = gtk_cell_renderer_text_new ();
1010 column = gtk_tree_view_column_new_with_attributes ("Transport",
1012 "text", IDENTITY_VIA,
1014 gtk_tree_view_append_column (identities_tree_view, column);
1016 cb_data=setup_callback_data(identities_tree_view, accounts_tree_view, modest_ui, glade_xml);
1018 refresh_accounts(priv->modest_acc_mgr,
1021 refresh_identities(priv->modest_id_mgr,
1025 abutton=glade_xml_get_widget(glade_xml, "IdentityCreateButton");
1026 g_signal_connect(abutton,
1028 G_CALLBACK(identity_create_action),
1030 abutton=glade_xml_get_widget(glade_xml, "IdentityEditButton");
1031 g_signal_connect(abutton,
1033 G_CALLBACK(identity_edit_action),
1035 abutton=glade_xml_get_widget(glade_xml, "IdentityDeleteButton");
1036 g_signal_connect(abutton,
1038 G_CALLBACK(identity_delete_action),
1042 abutton=glade_xml_get_widget(glade_xml, "AccountCreateButton");
1043 g_signal_connect(abutton,
1045 G_CALLBACK(account_create_action),
1047 abutton=glade_xml_get_widget(glade_xml, "AccountEditButton");
1048 g_signal_connect(abutton,
1050 G_CALLBACK(account_edit_action),
1052 abutton=glade_xml_get_widget(glade_xml, "AccountDeleteButton");
1053 g_signal_connect(abutton,
1055 G_CALLBACK(account_delete_action),
1058 g_signal_connect(glade_xml_get_widget(glade_xml, "IdentitiesTreeview"),
1060 G_CALLBACK(activate_buttons_on_identity),
1062 g_signal_connect(glade_xml_get_widget(glade_xml, "AccountsTreeview"),
1064 G_CALLBACK(activate_buttons_on_account),
1067 sig_coll[0] = g_signal_connect(priv->modest_id_mgr,
1069 G_CALLBACK(refresh_identities_on_change),
1071 sig_coll[1] = g_signal_connect(priv->modest_id_mgr,
1073 G_CALLBACK(refresh_identities_on_add),
1075 sig_coll[2] = g_signal_connect(priv->modest_id_mgr,
1077 G_CALLBACK(refresh_identities_on_remove),
1080 sig_coll[3] = g_signal_connect(priv->modest_acc_mgr,
1082 G_CALLBACK(refresh_accounts_on_change),
1084 sig_coll[4] = g_signal_connect(priv->modest_acc_mgr,
1086 G_CALLBACK(refresh_accounts_on_add),
1088 sig_coll[5] = g_signal_connect(priv->modest_acc_mgr,
1090 G_CALLBACK(refresh_accounts_on_remove),
1093 gtk_widget_show_all(GTK_WIDGET(main_dialog));
1095 retval=gtk_dialog_run(GTK_DIALOG(main_dialog));
1097 g_signal_handler_disconnect(priv->modest_id_mgr, sig_coll[0]);
1098 g_signal_handler_disconnect(priv->modest_id_mgr, sig_coll[1]);
1099 g_signal_handler_disconnect(priv->modest_id_mgr, sig_coll[2]);
1100 g_signal_handler_disconnect(priv->modest_acc_mgr, sig_coll[3]);
1101 g_signal_handler_disconnect(priv->modest_acc_mgr, sig_coll[4]);
1102 g_signal_handler_disconnect(priv->modest_acc_mgr, sig_coll[5]);
1104 gtk_widget_destroy(GTK_WIDGET(main_dialog));
1105 free_callback_data(cb_data);
1106 g_object_unref(glade_xml);
1109 void account_settings (GtkWidget *widget,
1112 accounts_and_identities_dialog (MODEST_UI(user_data));