1 /* Copyright (c) 2006, Nokia Corporation
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * * Neither the name of the Nokia Corporation nor the names of its
14 * contributors may be used to endorse or promote products derived from
15 * this software without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
18 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
20 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
21 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 /* modest-ui-wizard.c */
34 #include <glade/glade.h>
35 #include <glib/gi18n.h>
40 #endif /*HAVE_CONFIG_H*/
42 #include "../modest-account-mgr.h"
43 #include "../modest-identity-mgr.h"
45 #include "modest-ui-glade.h"
46 #include "modest-ui-account-setup.h"
62 typedef struct _CallbackData CallbackData;
64 struct _CallbackData {
65 GtkTreeView *id_tree_view;
66 GtkTreeView *acc_tree_view;
72 identity_setup_dialog (ModestUI *, GtkTreeModel *, gchar *);
75 account_setup_dialog (ModestUI *, gchar *);
78 missing_notification(GtkWindow *, gchar *);
81 create_identities_model(ModestIdentityMgr *);
84 create_accounts_model(ModestAccountMgr *);
87 refresh_identities(ModestIdentityMgr *,
91 refresh_accounts(ModestAccountMgr *, GladeXML *glade_xml);
96 filter_transports (GtkTreeModel *model,
103 gtk_tree_model_get(model,
108 retval = strcasecmp(name, "SMTP")==0;
115 account_edit_action(GtkWidget *button,
118 CallbackData *cb_data;
119 GtkTreeModel *acc_liststore;
120 GtkTreeSelection *selection;
121 GtkTreeIter selected_iter;
124 cb_data = (CallbackData *) userdata;
125 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(cb_data->acc_tree_view));
127 gtk_tree_selection_get_selected(selection,
130 gtk_tree_model_get(GTK_TREE_MODEL(acc_liststore),
132 ACCOUNT_NAME, &account_name,
135 account_setup_dialog (cb_data->modest_ui, account_name);
136 g_free(account_name);
140 account_create_action(GtkWidget *button,
142 CallbackData *cb_data;
144 cb_data = (CallbackData *) userdata;
146 account_setup_dialog(cb_data->modest_ui, NULL);
150 account_delete_action(GtkWidget *button,
152 CallbackData *cb_data;
153 GtkTreeSelection *selection;
154 GtkTreeIter selected_iter;
155 GtkTreeModel *acc_liststore;
156 GtkWidget *confirmation_dialog;
157 GtkWidget *confirmation_message;
158 ModestUIPrivate *priv;
163 cb_data = (CallbackData *) userdata;
164 priv = MODEST_UI_GET_PRIVATE(cb_data->modest_ui);
165 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(cb_data->acc_tree_view));
167 gtk_tree_selection_get_selected(selection,
170 gtk_tree_model_get(GTK_TREE_MODEL(acc_liststore),
172 ACCOUNT_NAME, &account_name,
175 confirmation_dialog = gtk_dialog_new_with_buttons ("Confirm removal of account",
176 GTK_WINDOW(gtk_widget_get_toplevel(button)),
177 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
184 message = g_strdup_printf("Remove selected account '%s'?", account_name);
185 confirmation_message = gtk_label_new_with_mnemonic (message);
187 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(confirmation_dialog)->vbox), confirmation_message, FALSE, FALSE, 10);
189 gtk_widget_show_all(confirmation_dialog);
191 result=gtk_dialog_run(GTK_DIALOG(confirmation_dialog));
192 if (result==GTK_RESPONSE_OK)
194 modest_account_mgr_remove_server_account(priv->modest_acc_mgr,
199 gtk_widget_destroy(confirmation_dialog);
200 g_free(account_name);
206 identity_edit_action(GtkWidget *button,
209 CallbackData *cb_data;
210 GtkTreeModel *acc_liststore;
211 GtkTreeModel *id_liststore;
212 GtkTreeSelection *selection;
213 GtkTreeIter selected_iter;
214 gchar *identity_name;
216 cb_data = (CallbackData *) userdata;
217 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(cb_data->id_tree_view));
219 gtk_tree_selection_get_selected(selection,
222 gtk_tree_model_get(GTK_TREE_MODEL(id_liststore),
224 IDENTITY_NAME, &identity_name,
226 /* We use the available tree model from the accounts page to display a selection
227 * of transports in the identities. Since we only want the transport accounts,
228 * we derive a gtk_tree_model_filter and apply filter_transports function.
230 acc_liststore = gtk_tree_model_filter_new(gtk_tree_view_get_model(cb_data->acc_tree_view),
232 gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(acc_liststore),
237 identity_setup_dialog (cb_data->modest_ui, acc_liststore, identity_name);
238 g_free(identity_name);
242 identity_create_action(GtkWidget *button,
245 CallbackData *cb_data;
246 GtkTreeModel *acc_liststore;
248 cb_data = (CallbackData *) userdata;
250 /* Works as in identity_edit_action. */
251 acc_liststore = gtk_tree_model_filter_new(gtk_tree_view_get_model(cb_data->acc_tree_view),
253 gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(acc_liststore),
258 identity_setup_dialog(cb_data->modest_ui, acc_liststore, NULL);
259 g_object_unref(acc_liststore);
263 identity_delete_action(GtkWidget *button,
266 CallbackData *cb_data;
267 GtkTreeSelection *selection;
268 GtkTreeIter selected_iter;
269 GtkTreeModel *id_liststore;
270 GtkWidget *confirmation_dialog;
271 GtkWidget *confirmation_message;
272 ModestUIPrivate *priv;
273 gchar *identity_name;
277 cb_data = (CallbackData *) userdata;
278 priv = MODEST_UI_GET_PRIVATE(cb_data->modest_ui);
279 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(cb_data->id_tree_view));
281 gtk_tree_selection_get_selected(selection,
284 gtk_tree_model_get(GTK_TREE_MODEL(id_liststore),
286 ACCOUNT_NAME, &identity_name,
289 confirmation_dialog = gtk_dialog_new_with_buttons ("Confirm removal of identity",
290 GTK_WINDOW(gtk_widget_get_toplevel(button)),
291 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
298 message = g_strdup_printf("Remove selected identity '%s'?", identity_name);
299 confirmation_message = gtk_label_new_with_mnemonic (message);
301 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(confirmation_dialog)->vbox), confirmation_message, FALSE, FALSE, 10);
303 gtk_widget_show_all(confirmation_dialog);
305 result=gtk_dialog_run(GTK_DIALOG(confirmation_dialog));
306 if (result==GTK_RESPONSE_OK)
308 modest_identity_mgr_remove_identity(priv->modest_id_mgr,
313 gtk_widget_destroy(confirmation_dialog);
314 g_free(identity_name);
319 activate_buttons_on_identity(GtkTreeView *tree_view,
325 glade_xml=(GladeXML *) user_data;
327 button = glade_xml_get_widget(GLADE_XML(glade_xml), "IdentityEditButton");
328 gtk_widget_set_sensitive(GTK_WIDGET(button), TRUE);
329 button = glade_xml_get_widget(GLADE_XML(glade_xml), "IdentityDeleteButton");
330 gtk_widget_set_sensitive(GTK_WIDGET(button), TRUE);
334 activate_buttons_on_account(GtkTreeView *tree_view,
340 glade_xml=(GladeXML *) user_data;
342 button = glade_xml_get_widget(GLADE_XML(glade_xml), "AccountEditButton");
343 gtk_widget_set_sensitive(GTK_WIDGET(button), TRUE);
344 button = glade_xml_get_widget(GLADE_XML(glade_xml), "AccountDeleteButton");
345 gtk_widget_set_sensitive(GTK_WIDGET(button), TRUE);
349 use_sig_toggled(GtkToggleButton *button,
353 GladeXML *glade_xml = (GladeXML *) userdata;
355 awidget=glade_xml_get_widget(glade_xml, "ISSignatureTextView");
356 gtk_widget_set_sensitive(awidget, gtk_toggle_button_get_active(button));
360 refresh_accounts_on_add(ModestAccountMgr *modest_acc_mgr,
364 refresh_accounts(modest_acc_mgr, (GladeXML *) userdata);
368 refresh_accounts_on_remove(ModestAccountMgr *modest_acc_mgr,
372 GladeXML *glade_xml = (GladeXML *) userdata;
375 refresh_accounts(modest_acc_mgr, (GladeXML *) userdata);
376 /* Since we loose the selection through the delete operation, we need to
377 * change the buttons sensitivity .
379 button = glade_xml_get_widget(GLADE_XML(glade_xml), "AccountEditButton");
380 gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
381 button = glade_xml_get_widget(GLADE_XML(glade_xml), "AccountDeleteButton");
382 gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
386 refresh_accounts_on_change(ModestAccountMgr *modest_acc_mgr,
392 refresh_accounts(modest_acc_mgr, (GladeXML *) userdata);
396 refresh_identities_on_add(ModestIdentityMgr *modest_id_mgr,
399 refresh_identities(modest_id_mgr, (GladeXML *) userdata);
403 refresh_identities_on_remove(ModestIdentityMgr *modest_id_mgr,
407 GladeXML *glade_xml = (GladeXML *) userdata;
410 refresh_identities(modest_id_mgr, glade_xml);
412 /* Since we loose the selection through the delete operation, we need to
413 * change the buttons sensitivity .
415 button = glade_xml_get_widget(GLADE_XML(glade_xml), "IdentityEditButton");
416 gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
417 button = glade_xml_get_widget(GLADE_XML(glade_xml), "IdentityDeleteButton");
418 gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
422 refresh_identities_on_change(ModestIdentityMgr *modest_id_mgr,
427 refresh_identities(modest_id_mgr, (GladeXML *) userdata);
433 search_model_column_for_string_advanced(GtkTreeModel *model, GtkTreeIter *iter, gint ColNum, gchar *search, gboolean mcase) {
438 iter_true = gtk_tree_model_get_iter_first(model, iter);
440 gtk_tree_model_get(model,
444 if ((mcase && strcasecmp(tmptext, search)==0)
445 || strcmp(tmptext, search)==0) {
450 iter_true = gtk_tree_model_iter_next(model, iter);
459 search_model_column_for_string(GtkTreeModel *model, GtkTreeIter *iter, gint ColNum, gchar *search) {
460 return search_model_column_for_string_advanced(model, iter, ColNum, search, FALSE);
464 case_search_model_column_for_string(GtkTreeModel *model, GtkTreeIter *iter, gint ColNum, gchar *search) {
465 return search_model_column_for_string_advanced(model, iter, ColNum, search, TRUE);
469 refresh_identities(ModestIdentityMgr *modest_id_mgr,
470 GladeXML *glade_xml) {
472 GtkTreeModel *id_liststore;
473 GtkTreeView *id_treeview;
475 id_treeview = GTK_TREE_VIEW(glade_xml_get_widget(glade_xml, "IdentitiesTreeview"));
477 id_liststore=create_identities_model(modest_id_mgr);
478 gtk_tree_view_set_model(GTK_TREE_VIEW(id_treeview), id_liststore);
482 refresh_accounts(ModestAccountMgr *modest_acc_mgr,
483 GladeXML *glade_xml) {
485 GtkTreeModel *acc_liststore;
486 GtkTreeView *acc_treeview;
488 acc_treeview = GTK_TREE_VIEW(glade_xml_get_widget(glade_xml, "AccountsTreeview"));
490 acc_liststore=create_accounts_model(modest_acc_mgr);
491 gtk_tree_view_set_model(GTK_TREE_VIEW(acc_treeview), acc_liststore);
495 missing_notification(GtkWindow *parent, gchar *info_message) {
497 GtkWidget *DenyDialog;
499 DenyDialog=gtk_message_dialog_new(parent,
506 gtk_dialog_run(GTK_DIALOG(DenyDialog));
508 gtk_widget_destroy(DenyDialog);
512 write_identity(GladeXML *glade_xml, ModestUI *modest_ui, GtkTreeModel *accounts_model, gboolean newidentity) {
514 GtkTextBuffer *sigbuff;
515 GtkTextIter start_iter;
516 GtkTextIter end_iter;
517 GtkTreeIter transport_iter;
518 ModestUIPrivate *priv;
519 const gchar *identity;
524 priv = MODEST_UI_GET_PRIVATE(MODEST_UI(modest_ui));
526 reply_to = g_strdup_printf("%s", gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISReplyToEntry"))));
528 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(glade_xml, "ISUseSignatureCheckButton"))))
530 sigbuff = gtk_text_view_get_buffer(GTK_TEXT_VIEW(glade_xml_get_widget(glade_xml, "ISSignatureTextView")));
531 gtk_text_buffer_get_bounds(sigbuff,
534 signature = gtk_text_buffer_get_text(sigbuff,
542 if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(glade_xml_get_widget(glade_xml, "ISOutServerComboBox")), &transport_iter)) {
543 gtk_tree_model_get(GTK_TREE_MODEL(accounts_model),
545 ACCOUNT_NAME, &transport,
549 missing_notification(NULL, "Please select an outgoing server!");
553 identity = gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISIdentityEntry")));
557 if (modest_identity_mgr_add_identity (priv->modest_id_mgr,
560 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISEMailAddress"))),
569 if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
571 MODEST_IDENTITY_REALNAME,
572 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISNameEntry"))),
575 if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
577 MODEST_IDENTITY_EMAIL,
578 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISEMailAddress"))),
581 if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
583 MODEST_IDENTITY_REPLYTO,
587 if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
589 MODEST_IDENTITY_SIGNATURE,
593 if (!modest_identity_mgr_set_identity_bool(priv->modest_id_mgr,
595 MODEST_IDENTITY_USE_SIGNATURE,
596 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(glade_xml,
597 "ISUseSignatureCheckButton"))),
600 if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
602 MODEST_IDENTITY_ID_VIA,
606 if (!modest_identity_mgr_set_identity_bool(priv->modest_id_mgr,
608 MODEST_IDENTITY_USE_ID_VIA,
609 TRUE, /* FIXME: for now */
617 write_account(GladeXML *glade_xml, ModestUI *modest_ui, gboolean newaccount) {
619 ModestUIPrivate *priv;
620 const gchar *account;
625 priv = MODEST_UI_GET_PRIVATE(MODEST_UI(modest_ui));
627 account = gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASDisplaynameEntry")));
630 tmptext = gtk_combo_box_get_active_text(GTK_COMBO_BOX(glade_xml_get_widget(glade_xml, "ASProtocolComboBox")));
631 protocol = g_utf8_strdown(tmptext, -1);
634 retval = modest_account_mgr_add_server_account (priv->modest_acc_mgr,
636 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASHostnameEntry"))),
637 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASUsernameEntry"))),
638 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASPasswordEntry"))),
643 if (!modest_account_mgr_set_server_account_string(priv->modest_acc_mgr,
645 MODEST_ACCOUNT_HOSTNAME,
646 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASHostnameEntry"))),
649 if (!modest_account_mgr_set_server_account_string(priv->modest_acc_mgr,
651 MODEST_ACCOUNT_USERNAME,
652 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASUsernameEntry"))),
655 if (!modest_account_mgr_set_server_account_string(priv->modest_acc_mgr,
657 MODEST_ACCOUNT_PASSWORD,
658 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASPasswordEntry"))),
665 identity_setup_dialog (ModestUI *modest_ui, GtkTreeModel *accounts_model, gchar *identity)
669 GtkWidget *id_dialog;
670 GtkWidget *outgoing_server;
672 GtkCellRenderer *renderer;
673 ModestIdentityMgr *id_mgr;
674 GtkTextBuffer *sigbuff;
675 GtkTreeIter out_iter;
678 gint identity_added_successfully;
680 gboolean newidentity;
682 glade_xml = glade_xml_new(MODEST_GLADE, "IdentitySetupDialog", NULL);
683 id_dialog = glade_xml_get_widget(glade_xml, "IdentitySetupDialog");
685 outgoing_server = glade_xml_get_widget(glade_xml, "ISOutServerComboBox");
686 gtk_combo_box_set_model(GTK_COMBO_BOX(outgoing_server), GTK_TREE_MODEL(accounts_model));
687 renderer = gtk_cell_renderer_text_new ();
688 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (outgoing_server), renderer, TRUE);
689 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (outgoing_server), renderer,
692 awidget=glade_xml_get_widget(glade_xml, "ISUseSignatureCheckButton");
693 g_signal_connect(awidget,
695 G_CALLBACK(use_sig_toggled),
698 newidentity = identity==NULL;
700 id_mgr = MODEST_UI_GET_PRIVATE(modest_ui)->modest_id_mgr;
702 outacc_name = modest_identity_mgr_get_identity_string(id_mgr,
704 MODEST_IDENTITY_ID_VIA,
706 if (search_model_column_for_string(GTK_TREE_MODEL(accounts_model),
710 gtk_combo_box_set_active_iter(GTK_COMBO_BOX(outgoing_server), &out_iter);
712 awidget=glade_xml_get_widget(glade_xml, "ISIdentityEntry");
713 gtk_widget_set_sensitive(awidget, FALSE);
714 gtk_entry_set_text(GTK_ENTRY(awidget), identity);
715 tmptext = modest_identity_mgr_get_identity_string(id_mgr,
717 MODEST_IDENTITY_EMAIL,
719 awidget=glade_xml_get_widget(glade_xml, "ISEMailAddress");
720 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
723 if (modest_identity_mgr_get_identity_bool(id_mgr,
725 MODEST_IDENTITY_USE_SIGNATURE,
727 awidget=glade_xml_get_widget(glade_xml, "ISUseSignatureCheckButton");
728 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(awidget), TRUE);
729 awidget=glade_xml_get_widget(glade_xml, "ISSignatureTextView");
730 gtk_widget_set_sensitive(awidget, TRUE);
733 sigbuff=gtk_text_buffer_new(NULL);
734 tmptext = modest_identity_mgr_get_identity_string(id_mgr,
736 MODEST_IDENTITY_SIGNATURE,
738 gtk_text_buffer_set_text(sigbuff, tmptext, -1);
739 gtk_text_view_set_buffer(GTK_TEXT_VIEW(glade_xml_get_widget(glade_xml, "ISSignatureTextView")),
741 g_object_unref(sigbuff);
744 tmptext = modest_identity_mgr_get_identity_string(id_mgr,
746 MODEST_IDENTITY_EMAIL,
748 awidget=glade_xml_get_widget(glade_xml, "ISEMailAddress");
749 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
752 tmptext = modest_identity_mgr_get_identity_string(id_mgr,
754 MODEST_IDENTITY_REALNAME,
756 awidget=glade_xml_get_widget(glade_xml, "ISNameEntry");
757 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
760 tmptext = modest_identity_mgr_get_identity_string(id_mgr,
762 MODEST_IDENTITY_REPLYTO,
764 awidget=glade_xml_get_widget(glade_xml, "ISReplyToEntry");
765 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
771 gtk_widget_show_all(id_dialog);
774 result=gtk_dialog_run(GTK_DIALOG(id_dialog));
777 case GTK_RESPONSE_OK:
778 identity_added_successfully = write_identity(glade_xml, modest_ui, accounts_model, newidentity);
781 identity_added_successfully = FALSE;
784 } while(result!=GTK_RESPONSE_DELETE_EVENT && result!=GTK_RESPONSE_CANCEL && identity_added_successfully!=TRUE);
786 gtk_widget_destroy(id_dialog);
787 g_object_unref(glade_xml);
791 account_setup_dialog (ModestUI *modest_ui, gchar *account) {
794 GtkWidget *acc_dialog;
796 ModestAccountMgr *acc_mgr;
797 GtkTreeModel *typemodel;
798 GtkTreeIter proto_iter;
800 gint account_added_successfully;
804 glade_xml = glade_xml_new(MODEST_GLADE, "AccountSetupDialog", NULL);
805 acc_dialog = glade_xml_get_widget(glade_xml, "AccountSetupDialog");
807 newaccount = account==NULL;
809 acc_mgr = MODEST_UI_GET_PRIVATE(modest_ui)->modest_acc_mgr;
811 awidget=glade_xml_get_widget(glade_xml, "ASDisplaynameEntry");
812 gtk_widget_set_sensitive(awidget, FALSE);
813 gtk_entry_set_text(GTK_ENTRY(awidget), account);
815 tmptext = modest_account_mgr_get_server_account_string(acc_mgr,
817 MODEST_ACCOUNT_PROTO,
819 awidget=glade_xml_get_widget(glade_xml, "ASProtocolComboBox");
820 gtk_widget_set_sensitive(awidget, FALSE);
821 typemodel = gtk_combo_box_get_model(GTK_COMBO_BOX(awidget));
822 if (case_search_model_column_for_string(typemodel, &proto_iter, 0, tmptext))
823 gtk_combo_box_set_active_iter(GTK_COMBO_BOX(awidget), &proto_iter);
827 tmptext = modest_account_mgr_get_server_account_string(acc_mgr,
829 MODEST_ACCOUNT_HOSTNAME,
831 awidget=glade_xml_get_widget(glade_xml, "ASHostnameEntry");
832 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
835 tmptext = modest_account_mgr_get_server_account_string(acc_mgr,
837 MODEST_ACCOUNT_USERNAME,
839 awidget=glade_xml_get_widget(glade_xml, "ASUsernameEntry");
840 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
843 tmptext = modest_account_mgr_get_server_account_string(acc_mgr,
845 MODEST_ACCOUNT_PASSWORD,
847 awidget=glade_xml_get_widget(glade_xml, "ASPasswordEntry");
848 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
852 gtk_widget_show_all(acc_dialog);
855 result=gtk_dialog_run(GTK_DIALOG(acc_dialog));
858 case GTK_RESPONSE_OK:
859 account_added_successfully = write_account(glade_xml, modest_ui, newaccount);
863 account_added_successfully = FALSE;
866 } while(result!=GTK_RESPONSE_DELETE_EVENT && result!=GTK_RESPONSE_CANCEL && account_added_successfully!=TRUE);
868 gtk_widget_destroy(acc_dialog);
869 g_object_unref(glade_xml);
873 static CallbackData *
874 setup_callback_data(GtkTreeView *id_tree_view,
875 GtkTreeView *acc_tree_view,
880 self = g_malloc(sizeof(CallbackData));
881 self->modest_ui=modest_ui;
882 self->id_tree_view=id_tree_view;
883 self->acc_tree_view=acc_tree_view;
884 self->glade_xml=glade_xml;
889 free_callback_data(CallbackData *data)
894 static GtkTreeModel *
895 create_identities_model(ModestIdentityMgr *id_mgr) {
897 GSList *id_names_list;
898 GSList *id_names_list_iter;
899 GtkListStore *id_list_store;
900 GtkTreeIter id_list_store_iter;
904 id_names_list = modest_identity_mgr_identity_names(id_mgr, NULL);
905 id_list_store = gtk_list_store_new(IDENTITY_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
907 for (id_names_list_iter=id_names_list;
908 id_names_list_iter!=NULL;
909 id_names_list_iter=g_slist_next(id_names_list_iter)) {
910 gtk_list_store_append(id_list_store, &id_list_store_iter);
911 tmptext1=modest_identity_mgr_get_identity_string(id_mgr,
912 id_names_list_iter->data,
913 MODEST_IDENTITY_EMAIL,
915 tmptext2=modest_identity_mgr_get_identity_string(id_mgr,
916 id_names_list_iter->data,
917 MODEST_IDENTITY_ID_VIA,
919 gtk_list_store_set(id_list_store, &id_list_store_iter,
920 IDENTITY_NAME, id_names_list_iter->data,
921 IDENTITY_ADDRESS, tmptext1,
922 IDENTITY_VIA, tmptext2,
928 g_slist_free(id_names_list);
930 return GTK_TREE_MODEL(id_list_store);
933 static GtkTreeModel *
934 create_accounts_model(ModestAccountMgr *acc_mgr) {
936 GSList *acc_names_list;
937 GSList *acc_names_list_iter;
938 GtkListStore *acc_list_store;
939 GtkTreeIter acc_list_store_iter;
943 acc_names_list = modest_account_mgr_server_account_names(acc_mgr,
945 MODEST_PROTO_TYPE_ANY,
948 acc_list_store = gtk_list_store_new(ACCOUNT_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
950 for (acc_names_list_iter=acc_names_list;
951 acc_names_list_iter!=NULL;
952 acc_names_list_iter=g_slist_next(acc_names_list_iter)) {
953 gtk_list_store_append(acc_list_store, &acc_list_store_iter);
954 hostname=modest_account_mgr_get_server_account_string(acc_mgr,
955 acc_names_list_iter->data,
956 MODEST_ACCOUNT_HOSTNAME,
958 protocol=modest_account_mgr_get_server_account_string(acc_mgr,
959 acc_names_list_iter->data,
960 MODEST_ACCOUNT_PROTO,
962 gtk_list_store_set(acc_list_store, &acc_list_store_iter,
963 ACCOUNT_NAME, acc_names_list_iter->data,
964 ACCOUNT_HOST, hostname,
965 ACCOUNT_PROT, protocol,
971 g_slist_free(acc_names_list);
973 return GTK_TREE_MODEL(acc_list_store);
978 accounts_and_identities_dialog (gpointer user_data)
981 GtkWidget *main_dialog;
982 GtkTreeView *identities_tree_view;
983 GtkTreeView *accounts_tree_view;
985 ModestUIPrivate *priv;
988 GtkCellRenderer *renderer;
989 GtkTreeViewColumn *column;
990 CallbackData *cb_data;
993 g_return_if_fail(MODEST_IS_UI(user_data));
994 modest_ui = (ModestUI *) user_data;
995 priv = MODEST_UI_GET_PRIVATE(modest_ui);
997 glade_xml = glade_xml_new(MODEST_GLADE, "IdentitiesAndAccountsDialog", NULL);
998 main_dialog = glade_xml_get_widget(glade_xml, "IdentitiesAndAccountsDialog");
1001 accounts_tree_view = GTK_TREE_VIEW(glade_xml_get_widget(glade_xml, "AccountsTreeview"));
1002 /* Account -> Accountname */
1003 renderer = gtk_cell_renderer_text_new ();
1004 column = gtk_tree_view_column_new_with_attributes ("Account",
1006 "text", ACCOUNT_NAME,
1008 gtk_tree_view_append_column (accounts_tree_view, column);
1009 /* Account -> Hostname */
1010 renderer = gtk_cell_renderer_text_new ();
1011 column = gtk_tree_view_column_new_with_attributes ("Hostname",
1013 "text", ACCOUNT_HOST,
1015 gtk_tree_view_append_column (accounts_tree_view, column);
1018 identities_tree_view = GTK_TREE_VIEW(glade_xml_get_widget(glade_xml, "IdentitiesTreeview"));
1020 /* Identities -> Identityname */
1021 renderer = gtk_cell_renderer_text_new ();
1022 column = gtk_tree_view_column_new_with_attributes ("Identity",
1024 "text", IDENTITY_NAME,
1026 gtk_tree_view_append_column (identities_tree_view, column);
1028 /* Identities -> E-mail address */
1029 renderer = gtk_cell_renderer_text_new ();
1030 column = gtk_tree_view_column_new_with_attributes ("E-mail address",
1032 "text", IDENTITY_ADDRESS,
1034 gtk_tree_view_append_column (identities_tree_view, column);
1036 /* Identities -> Relay */
1037 renderer = gtk_cell_renderer_text_new ();
1038 column = gtk_tree_view_column_new_with_attributes ("Transport",
1040 "text", IDENTITY_VIA,
1042 gtk_tree_view_append_column (identities_tree_view, column);
1044 cb_data=setup_callback_data(identities_tree_view, accounts_tree_view, modest_ui, glade_xml);
1046 refresh_accounts(priv->modest_acc_mgr,
1049 refresh_identities(priv->modest_id_mgr,
1053 abutton=glade_xml_get_widget(glade_xml, "IdentityCreateButton");
1054 g_signal_connect(abutton,
1056 G_CALLBACK(identity_create_action),
1058 abutton=glade_xml_get_widget(glade_xml, "IdentityEditButton");
1059 g_signal_connect(abutton,
1061 G_CALLBACK(identity_edit_action),
1063 abutton=glade_xml_get_widget(glade_xml, "IdentityDeleteButton");
1064 g_signal_connect(abutton,
1066 G_CALLBACK(identity_delete_action),
1070 abutton=glade_xml_get_widget(glade_xml, "AccountCreateButton");
1071 g_signal_connect(abutton,
1073 G_CALLBACK(account_create_action),
1075 abutton=glade_xml_get_widget(glade_xml, "AccountEditButton");
1076 g_signal_connect(abutton,
1078 G_CALLBACK(account_edit_action),
1080 abutton=glade_xml_get_widget(glade_xml, "AccountDeleteButton");
1081 g_signal_connect(abutton,
1083 G_CALLBACK(account_delete_action),
1086 g_signal_connect(glade_xml_get_widget(glade_xml, "IdentitiesTreeview"),
1088 G_CALLBACK(activate_buttons_on_identity),
1090 g_signal_connect(glade_xml_get_widget(glade_xml, "AccountsTreeview"),
1092 G_CALLBACK(activate_buttons_on_account),
1095 sig_coll[0] = g_signal_connect(priv->modest_id_mgr,
1097 G_CALLBACK(refresh_identities_on_change),
1099 sig_coll[1] = g_signal_connect(priv->modest_id_mgr,
1101 G_CALLBACK(refresh_identities_on_add),
1103 sig_coll[2] = g_signal_connect(priv->modest_id_mgr,
1105 G_CALLBACK(refresh_identities_on_remove),
1108 sig_coll[3] = g_signal_connect(priv->modest_acc_mgr,
1110 G_CALLBACK(refresh_accounts_on_change),
1112 sig_coll[4] = g_signal_connect(priv->modest_acc_mgr,
1114 G_CALLBACK(refresh_accounts_on_add),
1116 sig_coll[5] = g_signal_connect(priv->modest_acc_mgr,
1118 G_CALLBACK(refresh_accounts_on_remove),
1121 gtk_widget_show_all(GTK_WIDGET(main_dialog));
1123 retval=gtk_dialog_run(GTK_DIALOG(main_dialog));
1125 g_signal_handler_disconnect(priv->modest_id_mgr, sig_coll[0]);
1126 g_signal_handler_disconnect(priv->modest_id_mgr, sig_coll[1]);
1127 g_signal_handler_disconnect(priv->modest_id_mgr, sig_coll[2]);
1128 g_signal_handler_disconnect(priv->modest_acc_mgr, sig_coll[3]);
1129 g_signal_handler_disconnect(priv->modest_acc_mgr, sig_coll[4]);
1130 g_signal_handler_disconnect(priv->modest_acc_mgr, sig_coll[5]);
1132 gtk_widget_destroy(GTK_WIDGET(main_dialog));
1133 free_callback_data(cb_data);
1134 g_object_unref(glade_xml);
1137 void account_settings (GtkWidget *widget,
1140 accounts_and_identities_dialog (MODEST_UI(user_data));