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) {
193 modest_account_mgr_remove_account(priv->modest_acc_mgr,
194 account_name, TRUE, NULL);
197 gtk_widget_destroy(confirmation_dialog);
198 g_free(account_name);
204 identity_edit_action(GtkWidget *button,
207 CallbackData *cb_data;
208 GtkTreeModel *acc_liststore;
209 GtkTreeModel *id_liststore;
210 GtkTreeSelection *selection;
211 GtkTreeIter selected_iter;
212 gchar *identity_name;
214 cb_data = (CallbackData *) userdata;
215 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(cb_data->id_tree_view));
217 gtk_tree_selection_get_selected(selection,
220 gtk_tree_model_get(GTK_TREE_MODEL(id_liststore),
222 IDENTITY_NAME, &identity_name,
224 /* We use the available tree model from the accounts page to display a selection
225 * of transports in the identities. Since we only want the transport accounts,
226 * we derive a gtk_tree_model_filter and apply filter_transports function.
228 acc_liststore = gtk_tree_model_filter_new(gtk_tree_view_get_model(cb_data->acc_tree_view),
230 gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(acc_liststore),
235 identity_setup_dialog (cb_data->modest_ui, acc_liststore, identity_name);
236 g_free(identity_name);
240 identity_create_action(GtkWidget *button,
243 CallbackData *cb_data;
244 GtkTreeModel *acc_liststore;
246 cb_data = (CallbackData *) userdata;
248 /* Works as in identity_edit_action. */
249 acc_liststore = gtk_tree_model_filter_new(gtk_tree_view_get_model(cb_data->acc_tree_view),
251 gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(acc_liststore),
256 identity_setup_dialog(cb_data->modest_ui, acc_liststore, NULL);
257 g_object_unref(acc_liststore);
261 identity_delete_action(GtkWidget *button,
264 CallbackData *cb_data;
265 GtkTreeSelection *selection;
266 GtkTreeIter selected_iter;
267 GtkTreeModel *id_liststore;
268 GtkWidget *confirmation_dialog;
269 GtkWidget *confirmation_message;
270 ModestUIPrivate *priv;
271 gchar *identity_name;
275 cb_data = (CallbackData *) userdata;
276 priv = MODEST_UI_GET_PRIVATE(cb_data->modest_ui);
277 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(cb_data->id_tree_view));
279 gtk_tree_selection_get_selected(selection,
282 gtk_tree_model_get(GTK_TREE_MODEL(id_liststore),
284 ACCOUNT_NAME, &identity_name,
287 confirmation_dialog = gtk_dialog_new_with_buttons ("Confirm removal of identity",
288 GTK_WINDOW(gtk_widget_get_toplevel(button)),
289 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
296 message = g_strdup_printf("Remove selected identity '%s'?", identity_name);
297 confirmation_message = gtk_label_new_with_mnemonic (message);
299 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(confirmation_dialog)->vbox), confirmation_message, FALSE, FALSE, 10);
301 gtk_widget_show_all(confirmation_dialog);
303 result=gtk_dialog_run(GTK_DIALOG(confirmation_dialog));
304 if (result==GTK_RESPONSE_OK)
306 modest_identity_mgr_remove_identity(priv->modest_id_mgr,
311 gtk_widget_destroy(confirmation_dialog);
312 g_free(identity_name);
317 activate_buttons_on_identity(GtkTreeView *tree_view,
323 glade_xml=(GladeXML *) user_data;
325 button = glade_xml_get_widget(GLADE_XML(glade_xml), "IdentityEditButton");
326 gtk_widget_set_sensitive(GTK_WIDGET(button), TRUE);
327 button = glade_xml_get_widget(GLADE_XML(glade_xml), "IdentityDeleteButton");
328 gtk_widget_set_sensitive(GTK_WIDGET(button), TRUE);
332 activate_buttons_on_account(GtkTreeView *tree_view,
338 glade_xml=(GladeXML *) user_data;
340 button = glade_xml_get_widget(GLADE_XML(glade_xml), "AccountEditButton");
341 gtk_widget_set_sensitive(GTK_WIDGET(button), TRUE);
342 button = glade_xml_get_widget(GLADE_XML(glade_xml), "AccountDeleteButton");
343 gtk_widget_set_sensitive(GTK_WIDGET(button), TRUE);
347 use_sig_toggled(GtkToggleButton *button,
351 GladeXML *glade_xml = (GladeXML *) userdata;
353 awidget=glade_xml_get_widget(glade_xml, "ISSignatureTextView");
354 gtk_widget_set_sensitive(awidget, gtk_toggle_button_get_active(button));
358 refresh_accounts_on_add(ModestAccountMgr *modest_acc_mgr,
362 refresh_accounts(modest_acc_mgr, (GladeXML *) userdata);
366 refresh_accounts_on_remove(ModestAccountMgr *modest_acc_mgr,
370 GladeXML *glade_xml = (GladeXML *) userdata;
373 refresh_accounts(modest_acc_mgr, (GladeXML *) userdata);
374 /* Since we loose the selection through the delete operation, we need to
375 * change the buttons sensitivity .
377 button = glade_xml_get_widget(GLADE_XML(glade_xml), "AccountEditButton");
378 gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
379 button = glade_xml_get_widget(GLADE_XML(glade_xml), "AccountDeleteButton");
380 gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
384 refresh_accounts_on_change(ModestAccountMgr *modest_acc_mgr,
390 refresh_accounts(modest_acc_mgr, (GladeXML *) userdata);
394 refresh_identities_on_add(ModestIdentityMgr *modest_id_mgr,
397 refresh_identities(modest_id_mgr, (GladeXML *) userdata);
401 refresh_identities_on_remove(ModestIdentityMgr *modest_id_mgr,
405 GladeXML *glade_xml = (GladeXML *) userdata;
408 refresh_identities(modest_id_mgr, glade_xml);
410 /* Since we loose the selection through the delete operation, we need to
411 * change the buttons sensitivity .
413 button = glade_xml_get_widget(GLADE_XML(glade_xml), "IdentityEditButton");
414 gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
415 button = glade_xml_get_widget(GLADE_XML(glade_xml), "IdentityDeleteButton");
416 gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
420 refresh_identities_on_change(ModestIdentityMgr *modest_id_mgr,
425 refresh_identities(modest_id_mgr, (GladeXML *) userdata);
431 search_model_column_for_string_advanced(GtkTreeModel *model, GtkTreeIter *iter, gint ColNum, gchar *search, gboolean mcase) {
436 iter_true = gtk_tree_model_get_iter_first(model, iter);
438 gtk_tree_model_get(model,
442 if ((mcase && strcasecmp(tmptext, search)==0)
443 || strcmp(tmptext, search)==0) {
448 iter_true = gtk_tree_model_iter_next(model, iter);
457 search_model_column_for_string(GtkTreeModel *model, GtkTreeIter *iter, gint ColNum, gchar *search) {
458 return search_model_column_for_string_advanced(model, iter, ColNum, search, FALSE);
462 case_search_model_column_for_string(GtkTreeModel *model, GtkTreeIter *iter, gint ColNum, gchar *search) {
463 return search_model_column_for_string_advanced(model, iter, ColNum, search, TRUE);
467 refresh_identities(ModestIdentityMgr *modest_id_mgr,
468 GladeXML *glade_xml) {
470 GtkTreeModel *id_liststore;
471 GtkTreeView *id_treeview;
473 id_treeview = GTK_TREE_VIEW(glade_xml_get_widget(glade_xml, "IdentitiesTreeview"));
475 id_liststore=create_identities_model(modest_id_mgr);
476 gtk_tree_view_set_model(GTK_TREE_VIEW(id_treeview), id_liststore);
480 refresh_accounts(ModestAccountMgr *modest_acc_mgr,
481 GladeXML *glade_xml) {
483 GtkTreeModel *acc_liststore;
484 GtkTreeView *acc_treeview;
486 acc_treeview = GTK_TREE_VIEW(glade_xml_get_widget(glade_xml, "AccountsTreeview"));
488 acc_liststore=create_accounts_model(modest_acc_mgr);
489 gtk_tree_view_set_model(GTK_TREE_VIEW(acc_treeview), acc_liststore);
493 missing_notification(GtkWindow *parent, gchar *info_message) {
495 GtkWidget *DenyDialog;
497 DenyDialog=gtk_message_dialog_new(parent,
504 gtk_dialog_run(GTK_DIALOG(DenyDialog));
506 gtk_widget_destroy(DenyDialog);
510 write_identity(GladeXML *glade_xml, ModestUI *modest_ui, GtkTreeModel *accounts_model, gboolean newidentity) {
512 GtkTextBuffer *sigbuff;
513 GtkTextIter start_iter;
514 GtkTextIter end_iter;
515 GtkTreeIter transport_iter;
516 ModestUIPrivate *priv;
517 const gchar *identity;
522 priv = MODEST_UI_GET_PRIVATE(MODEST_UI(modest_ui));
524 reply_to = g_strdup_printf("%s", gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISReplyToEntry"))));
526 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(glade_xml, "ISUseSignatureCheckButton"))))
528 sigbuff = gtk_text_view_get_buffer(GTK_TEXT_VIEW(glade_xml_get_widget(glade_xml, "ISSignatureTextView")));
529 gtk_text_buffer_get_bounds(sigbuff,
532 signature = gtk_text_buffer_get_text(sigbuff,
540 if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(glade_xml_get_widget(glade_xml, "ISOutServerComboBox")), &transport_iter)) {
541 gtk_tree_model_get(GTK_TREE_MODEL(accounts_model),
543 ACCOUNT_NAME, &transport,
547 missing_notification(NULL, "Please select an outgoing server!");
551 identity = gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISIdentityEntry")));
555 if (modest_identity_mgr_add_identity (priv->modest_id_mgr,
558 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISEMailAddress"))),
567 if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
569 MODEST_IDENTITY_REALNAME,
570 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISNameEntry"))),
573 if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
575 MODEST_IDENTITY_EMAIL,
576 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISEMailAddress"))),
579 if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
581 MODEST_IDENTITY_REPLYTO,
585 if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
587 MODEST_IDENTITY_SIGNATURE,
591 if (!modest_identity_mgr_set_identity_bool(priv->modest_id_mgr,
593 MODEST_IDENTITY_USE_SIGNATURE,
594 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(glade_xml,
595 "ISUseSignatureCheckButton"))),
598 if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
600 MODEST_IDENTITY_ID_VIA,
604 if (!modest_identity_mgr_set_identity_bool(priv->modest_id_mgr,
606 MODEST_IDENTITY_USE_ID_VIA,
607 TRUE, /* FIXME: for now */
615 write_account(GladeXML *glade_xml, ModestUI *modest_ui, gboolean newaccount) {
617 ModestUIPrivate *priv;
618 const gchar *account;
623 priv = MODEST_UI_GET_PRIVATE(MODEST_UI(modest_ui));
625 account = gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASDisplaynameEntry")));
628 tmptext = gtk_combo_box_get_active_text(GTK_COMBO_BOX(glade_xml_get_widget(glade_xml, "ASProtocolComboBox")));
629 protocol = g_utf8_strdown(tmptext, -1);
632 retval = modest_account_mgr_add_server_account (priv->modest_acc_mgr,
634 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASHostnameEntry"))),
635 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASUsernameEntry"))),
636 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASPasswordEntry"))),
641 if (!modest_account_mgr_set_string(priv->modest_acc_mgr,
643 MODEST_ACCOUNT_HOSTNAME,
644 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASHostnameEntry"))),
649 if (!modest_account_mgr_set_string(priv->modest_acc_mgr,
651 MODEST_ACCOUNT_USERNAME,
652 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASUsernameEntry"))),
656 if (!modest_account_mgr_set_string(priv->modest_acc_mgr,
658 MODEST_ACCOUNT_PASSWORD,
659 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASPasswordEntry"))),
668 identity_setup_dialog (ModestUI *modest_ui, GtkTreeModel *accounts_model, gchar *identity)
672 GtkWidget *id_dialog;
673 GtkWidget *outgoing_server;
675 GtkCellRenderer *renderer;
676 ModestIdentityMgr *id_mgr;
677 GtkTextBuffer *sigbuff;
678 GtkTreeIter out_iter;
681 gint identity_added_successfully;
683 gboolean newidentity;
685 glade_xml = glade_xml_new(MODEST_GLADE, "IdentitySetupDialog", NULL);
686 id_dialog = glade_xml_get_widget(glade_xml, "IdentitySetupDialog");
688 outgoing_server = glade_xml_get_widget(glade_xml, "ISOutServerComboBox");
689 gtk_combo_box_set_model(GTK_COMBO_BOX(outgoing_server), GTK_TREE_MODEL(accounts_model));
690 renderer = gtk_cell_renderer_text_new ();
691 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (outgoing_server), renderer, TRUE);
692 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (outgoing_server), renderer,
695 awidget=glade_xml_get_widget(glade_xml, "ISUseSignatureCheckButton");
696 g_signal_connect(awidget,
698 G_CALLBACK(use_sig_toggled),
701 newidentity = identity==NULL;
703 id_mgr = MODEST_UI_GET_PRIVATE(modest_ui)->modest_id_mgr;
705 outacc_name = modest_identity_mgr_get_identity_string(id_mgr,
707 MODEST_IDENTITY_ID_VIA,
709 if (search_model_column_for_string(GTK_TREE_MODEL(accounts_model),
713 gtk_combo_box_set_active_iter(GTK_COMBO_BOX(outgoing_server), &out_iter);
715 awidget=glade_xml_get_widget(glade_xml, "ISIdentityEntry");
716 gtk_widget_set_sensitive(awidget, FALSE);
717 gtk_entry_set_text(GTK_ENTRY(awidget), identity);
718 tmptext = modest_identity_mgr_get_identity_string(id_mgr,
720 MODEST_IDENTITY_EMAIL,
722 awidget=glade_xml_get_widget(glade_xml, "ISEMailAddress");
723 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
726 if (modest_identity_mgr_get_identity_bool(id_mgr,
728 MODEST_IDENTITY_USE_SIGNATURE,
730 awidget=glade_xml_get_widget(glade_xml, "ISUseSignatureCheckButton");
731 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(awidget), TRUE);
732 awidget=glade_xml_get_widget(glade_xml, "ISSignatureTextView");
733 gtk_widget_set_sensitive(awidget, TRUE);
736 sigbuff=gtk_text_buffer_new(NULL);
737 tmptext = modest_identity_mgr_get_identity_string(id_mgr,
739 MODEST_IDENTITY_SIGNATURE,
741 gtk_text_buffer_set_text(sigbuff, tmptext, -1);
742 gtk_text_view_set_buffer(GTK_TEXT_VIEW(glade_xml_get_widget(glade_xml, "ISSignatureTextView")),
744 g_object_unref(sigbuff);
747 tmptext = modest_identity_mgr_get_identity_string(id_mgr,
749 MODEST_IDENTITY_EMAIL,
751 awidget=glade_xml_get_widget(glade_xml, "ISEMailAddress");
752 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
755 tmptext = modest_identity_mgr_get_identity_string(id_mgr,
757 MODEST_IDENTITY_REALNAME,
759 awidget=glade_xml_get_widget(glade_xml, "ISNameEntry");
760 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
763 tmptext = modest_identity_mgr_get_identity_string(id_mgr,
765 MODEST_IDENTITY_REPLYTO,
767 awidget=glade_xml_get_widget(glade_xml, "ISReplyToEntry");
768 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
774 gtk_widget_show_all(id_dialog);
777 result=gtk_dialog_run(GTK_DIALOG(id_dialog));
780 case GTK_RESPONSE_OK:
781 identity_added_successfully = write_identity(glade_xml, modest_ui, accounts_model, newidentity);
784 identity_added_successfully = FALSE;
787 } while(result!=GTK_RESPONSE_DELETE_EVENT && result!=GTK_RESPONSE_CANCEL && identity_added_successfully!=TRUE);
789 gtk_widget_destroy(id_dialog);
790 g_object_unref(glade_xml);
794 account_setup_dialog (ModestUI *modest_ui, gchar *account) {
797 GtkWidget *acc_dialog;
799 ModestAccountMgr *acc_mgr;
800 GtkTreeModel *typemodel;
801 GtkTreeIter proto_iter;
803 gint account_added_successfully;
807 glade_xml = glade_xml_new(MODEST_GLADE, "AccountSetupDialog", NULL);
808 acc_dialog = glade_xml_get_widget(glade_xml, "AccountSetupDialog");
810 newaccount = account==NULL;
812 acc_mgr = MODEST_UI_GET_PRIVATE(modest_ui)->modest_acc_mgr;
814 awidget=glade_xml_get_widget(glade_xml, "ASDisplaynameEntry");
815 gtk_widget_set_sensitive(awidget, FALSE);
816 gtk_entry_set_text(GTK_ENTRY(awidget), account);
818 tmptext = modest_account_mgr_get_string(acc_mgr,
820 MODEST_ACCOUNT_PROTO,
823 awidget=glade_xml_get_widget(glade_xml, "ASProtocolComboBox");
824 gtk_widget_set_sensitive(awidget, FALSE);
825 typemodel = gtk_combo_box_get_model(GTK_COMBO_BOX(awidget));
826 if (case_search_model_column_for_string(typemodel, &proto_iter, 0, tmptext))
827 gtk_combo_box_set_active_iter(GTK_COMBO_BOX(awidget), &proto_iter);
831 tmptext = modest_account_mgr_get_string(acc_mgr,
833 MODEST_ACCOUNT_HOSTNAME,
836 awidget=glade_xml_get_widget(glade_xml, "ASHostnameEntry");
837 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
840 tmptext = modest_account_mgr_get_string(acc_mgr,
842 MODEST_ACCOUNT_USERNAME,
845 awidget=glade_xml_get_widget(glade_xml, "ASUsernameEntry");
846 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
849 tmptext = modest_account_mgr_get_string(acc_mgr,
851 MODEST_ACCOUNT_PASSWORD,
854 awidget=glade_xml_get_widget(glade_xml, "ASPasswordEntry");
855 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
859 gtk_widget_show_all(acc_dialog);
862 result=gtk_dialog_run(GTK_DIALOG(acc_dialog));
865 case GTK_RESPONSE_OK:
866 account_added_successfully = write_account(glade_xml, modest_ui, newaccount);
870 account_added_successfully = FALSE;
873 } while(result!=GTK_RESPONSE_DELETE_EVENT && result!=GTK_RESPONSE_CANCEL && account_added_successfully!=TRUE);
875 gtk_widget_destroy(acc_dialog);
876 g_object_unref(glade_xml);
880 static CallbackData *
881 setup_callback_data(GtkTreeView *id_tree_view,
882 GtkTreeView *acc_tree_view,
887 self = g_malloc(sizeof(CallbackData));
888 self->modest_ui=modest_ui;
889 self->id_tree_view=id_tree_view;
890 self->acc_tree_view=acc_tree_view;
891 self->glade_xml=glade_xml;
896 free_callback_data(CallbackData *data)
901 static GtkTreeModel *
902 create_identities_model(ModestIdentityMgr *id_mgr) {
904 GSList *id_names_list;
905 GSList *id_names_list_iter;
906 GtkListStore *id_list_store;
907 GtkTreeIter id_list_store_iter;
911 id_names_list = modest_identity_mgr_identity_names(id_mgr, NULL);
912 id_list_store = gtk_list_store_new(IDENTITY_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
914 for (id_names_list_iter=id_names_list;
915 id_names_list_iter!=NULL;
916 id_names_list_iter=g_slist_next(id_names_list_iter)) {
917 gtk_list_store_append(id_list_store, &id_list_store_iter);
918 tmptext1=modest_identity_mgr_get_identity_string(id_mgr,
919 id_names_list_iter->data,
920 MODEST_IDENTITY_EMAIL,
922 tmptext2=modest_identity_mgr_get_identity_string(id_mgr,
923 id_names_list_iter->data,
924 MODEST_IDENTITY_ID_VIA,
926 gtk_list_store_set(id_list_store, &id_list_store_iter,
927 IDENTITY_NAME, id_names_list_iter->data,
928 IDENTITY_ADDRESS, tmptext1,
929 IDENTITY_VIA, tmptext2,
935 g_slist_free(id_names_list);
937 return GTK_TREE_MODEL(id_list_store);
940 static GtkTreeModel *
941 create_accounts_model(ModestAccountMgr *acc_mgr) {
943 GSList *acc_names_list;
944 GSList *acc_names_list_iter;
945 GtkListStore *acc_list_store;
946 GtkTreeIter acc_list_store_iter;
950 acc_names_list = modest_account_mgr_search_server_accounts (acc_mgr,
952 MODEST_PROTO_TYPE_ANY,
955 acc_list_store = gtk_list_store_new(ACCOUNT_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
957 for (acc_names_list_iter=acc_names_list;
958 acc_names_list_iter!=NULL;
959 acc_names_list_iter=g_slist_next(acc_names_list_iter)) {
961 gtk_list_store_append(acc_list_store, &acc_list_store_iter);
962 hostname=modest_account_mgr_get_string(acc_mgr,
963 acc_names_list_iter->data,
964 MODEST_ACCOUNT_HOSTNAME,
967 protocol=modest_account_mgr_get_string(acc_mgr,
968 acc_names_list_iter->data,
969 MODEST_ACCOUNT_PROTO,
972 gtk_list_store_set(acc_list_store, &acc_list_store_iter,
973 ACCOUNT_NAME, acc_names_list_iter->data,
974 ACCOUNT_HOST, hostname,
975 ACCOUNT_PROT, protocol,
981 g_slist_free(acc_names_list);
983 return GTK_TREE_MODEL(acc_list_store);
988 accounts_and_identities_dialog (gpointer user_data)
991 GtkWidget *main_dialog;
992 GtkTreeView *identities_tree_view;
993 GtkTreeView *accounts_tree_view;
995 ModestUIPrivate *priv;
998 GtkCellRenderer *renderer;
999 GtkTreeViewColumn *column;
1000 CallbackData *cb_data;
1003 g_return_if_fail(MODEST_IS_UI(user_data));
1004 modest_ui = (ModestUI *) user_data;
1005 priv = MODEST_UI_GET_PRIVATE(modest_ui);
1007 glade_xml = glade_xml_new(MODEST_GLADE, "IdentitiesAndAccountsDialog", NULL);
1008 main_dialog = glade_xml_get_widget(glade_xml, "IdentitiesAndAccountsDialog");
1011 accounts_tree_view = GTK_TREE_VIEW(glade_xml_get_widget(glade_xml, "AccountsTreeview"));
1012 /* Account -> Accountname */
1013 renderer = gtk_cell_renderer_text_new ();
1014 column = gtk_tree_view_column_new_with_attributes ("Account",
1016 "text", ACCOUNT_NAME,
1018 gtk_tree_view_append_column (accounts_tree_view, column);
1019 /* Account -> Hostname */
1020 renderer = gtk_cell_renderer_text_new ();
1021 column = gtk_tree_view_column_new_with_attributes ("Hostname",
1023 "text", ACCOUNT_HOST,
1025 gtk_tree_view_append_column (accounts_tree_view, column);
1028 identities_tree_view = GTK_TREE_VIEW(glade_xml_get_widget(glade_xml, "IdentitiesTreeview"));
1030 /* Identities -> Identityname */
1031 renderer = gtk_cell_renderer_text_new ();
1032 column = gtk_tree_view_column_new_with_attributes ("Identity",
1034 "text", IDENTITY_NAME,
1036 gtk_tree_view_append_column (identities_tree_view, column);
1038 /* Identities -> E-mail address */
1039 renderer = gtk_cell_renderer_text_new ();
1040 column = gtk_tree_view_column_new_with_attributes ("E-mail address",
1042 "text", IDENTITY_ADDRESS,
1044 gtk_tree_view_append_column (identities_tree_view, column);
1046 /* Identities -> Relay */
1047 renderer = gtk_cell_renderer_text_new ();
1048 column = gtk_tree_view_column_new_with_attributes ("Transport",
1050 "text", IDENTITY_VIA,
1052 gtk_tree_view_append_column (identities_tree_view, column);
1054 cb_data=setup_callback_data(identities_tree_view, accounts_tree_view, modest_ui, glade_xml);
1056 refresh_accounts(priv->modest_acc_mgr,
1059 refresh_identities(priv->modest_id_mgr,
1063 abutton=glade_xml_get_widget(glade_xml, "IdentityCreateButton");
1064 g_signal_connect(abutton,
1066 G_CALLBACK(identity_create_action),
1068 abutton=glade_xml_get_widget(glade_xml, "IdentityEditButton");
1069 g_signal_connect(abutton,
1071 G_CALLBACK(identity_edit_action),
1073 abutton=glade_xml_get_widget(glade_xml, "IdentityDeleteButton");
1074 g_signal_connect(abutton,
1076 G_CALLBACK(identity_delete_action),
1080 abutton=glade_xml_get_widget(glade_xml, "AccountCreateButton");
1081 g_signal_connect(abutton,
1083 G_CALLBACK(account_create_action),
1085 abutton=glade_xml_get_widget(glade_xml, "AccountEditButton");
1086 g_signal_connect(abutton,
1088 G_CALLBACK(account_edit_action),
1090 abutton=glade_xml_get_widget(glade_xml, "AccountDeleteButton");
1091 g_signal_connect(abutton,
1093 G_CALLBACK(account_delete_action),
1096 g_signal_connect(glade_xml_get_widget(glade_xml, "IdentitiesTreeview"),
1098 G_CALLBACK(activate_buttons_on_identity),
1100 g_signal_connect(glade_xml_get_widget(glade_xml, "AccountsTreeview"),
1102 G_CALLBACK(activate_buttons_on_account),
1105 sig_coll[0] = g_signal_connect(priv->modest_id_mgr,
1107 G_CALLBACK(refresh_identities_on_change),
1109 sig_coll[1] = g_signal_connect(priv->modest_id_mgr,
1111 G_CALLBACK(refresh_identities_on_add),
1113 sig_coll[2] = g_signal_connect(priv->modest_id_mgr,
1115 G_CALLBACK(refresh_identities_on_remove),
1118 sig_coll[3] = g_signal_connect(priv->modest_acc_mgr,
1120 G_CALLBACK(refresh_accounts_on_change),
1122 sig_coll[4] = g_signal_connect(priv->modest_acc_mgr,
1124 G_CALLBACK(refresh_accounts_on_add),
1126 sig_coll[5] = g_signal_connect(priv->modest_acc_mgr,
1128 G_CALLBACK(refresh_accounts_on_remove),
1131 gtk_widget_show_all(GTK_WIDGET(main_dialog));
1133 retval=gtk_dialog_run(GTK_DIALOG(main_dialog));
1135 g_signal_handler_disconnect(priv->modest_id_mgr, sig_coll[0]);
1136 g_signal_handler_disconnect(priv->modest_id_mgr, sig_coll[1]);
1137 g_signal_handler_disconnect(priv->modest_id_mgr, sig_coll[2]);
1138 g_signal_handler_disconnect(priv->modest_acc_mgr, sig_coll[3]);
1139 g_signal_handler_disconnect(priv->modest_acc_mgr, sig_coll[4]);
1140 g_signal_handler_disconnect(priv->modest_acc_mgr, sig_coll[5]);
1142 gtk_widget_destroy(GTK_WIDGET(main_dialog));
1143 free_callback_data(cb_data);
1144 g_object_unref(glade_xml);
1147 void account_settings (GtkWidget *widget,
1150 accounts_and_identities_dialog (MODEST_UI(user_data));