X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fgtk-glade%2Fmodest-ui.c;h=ba5a004f928c7251d3e4653f6a1686d23150c4c9;hp=262b01e5d512a4fc1282812984823c0d0a2350d0;hb=674685c46e0ffd6a061f21930a1a33e5f579fa91;hpb=0ca0c6fa99e595c0545d3a50d42ec288639d478a diff --git a/src/gtk-glade/modest-ui.c b/src/gtk-glade/modest-ui.c index 262b01e..ba5a004 100644 --- a/src/gtk-glade/modest-ui.c +++ b/src/gtk-glade/modest-ui.c @@ -7,6 +7,9 @@ #include #include +/* TODO: put in auto* */ +#include + #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ @@ -21,8 +24,8 @@ #include "../modest-tny-msg-view.h" #include "../modest-tny-transport-actions.h" - -//#include "modest.glade.h" +#include "../modest-text-utils.h" +#include "../modest-tny-msg-actions.h" #define MODEST_GLADE PREFIX "/share/modest/glade/modest.glade" #define MODEST_GLADE_MAIN_WIN "main" @@ -43,8 +46,9 @@ static GtkWidget* modest_main_window_folder_tree (ModestAccountMgr *modest_acc_m static GtkWidget* modest_main_window_header_tree (TnyMsgFolderIface *folder); -static void on_account_settings1_activate (GtkMenuItem *, - gpointer); +void on_account_settings1_activate (GtkMenuItem *, + gpointer); + static void on_password_requested (ModestTnyAccountStore *account_store, const gchar *account_name, gpointer user_data); @@ -62,6 +66,8 @@ static void on_send_button_clicked (GtkWidget *widget, ModestUI *modest_ui); static void register_toolbar_callbacks (ModestUI *modest_ui); +static void reply_to_msg (ModestUI *modest_ui, TnyMsgHeaderIface *header, + ModestTnyMsgView *msg_view); /* list my signals */ enum { @@ -79,7 +85,7 @@ struct _ModestUIPrivate { ModestWindowMgr *modest_window_mgr; TnyAccountStoreIface *account_store; - GtkWindow *main_window; + GtkWindow *main_window; GladeXML *glade_xml; @@ -195,9 +201,9 @@ modest_ui_new (ModestConf *modest_conf) g_signal_connect (account_store_iface, "password_requested", G_CALLBACK(on_password_requested), NULL); + glade_init (); - priv->glade_xml = glade_xml_new (MODEST_GLADE, - NULL,NULL); + priv->glade_xml = glade_xml_new (MODEST_GLADE, NULL,NULL); if (!priv->glade_xml) { g_warning ("failed to do glade stuff"); g_object_unref (obj); @@ -270,11 +276,11 @@ modest_ui_show_main_window (ModestUI *modest_ui) G_CALLBACK(on_folder_clicked), modest_ui); message_view = GTK_WIDGET(modest_tny_msg_view_new (NULL)); - mail_paned = glade_xml_get_widget (priv->glade_xml, "mail_paned"); if (!message_view) { g_warning ("failed to create message view"); return FALSE; } + mail_paned = glade_xml_get_widget (priv->glade_xml, "mail_paned"); gtk_paned_add2 (GTK_PANED(mail_paned), message_view); g_signal_connect (header_view, "message_selected", @@ -344,9 +350,11 @@ modest_ui_show_edit_window (ModestUI *modest_ui, const gchar* to, const gchar* subject, const gchar *body, const GSList* att) { - GtkWidget *win; + GtkWidget *win, *to_entry, *subject_entry, *body_view; + ModestUIPrivate *priv; GtkWidget *btn; + GtkTextBuffer *buf; priv = MODEST_UI_GET_PRIVATE(modest_ui); int height = modest_conf_get_int (priv->modest_conf, @@ -362,7 +370,19 @@ modest_ui_show_edit_window (ModestUI *modest_ui, const gchar* to, modest_window_mgr_register (priv->modest_window_mgr, G_OBJECT(win), MODEST_EDIT_WINDOW, 0); + to_entry = glade_xml_get_widget (priv->glade_xml, "to_entry"); + subject_entry = glade_xml_get_widget (priv->glade_xml, "subject_entry"); + body_view = glade_xml_get_widget (priv->glade_xml, "body_view"); + + gtk_entry_set_text(GTK_ENTRY(subject_entry), subject); + gtk_entry_set_text(GTK_ENTRY(to_entry), to); + buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(body_view)); + if (body) { + gtk_text_buffer_set_text(buf, body, -1); + } else { + gtk_text_buffer_set_text(buf, "", -1); + } g_signal_connect (win, "destroy", G_CALLBACK(hide_edit_window), NULL); @@ -401,26 +421,90 @@ modest_ui_last_window_closed (GObject *obj, gpointer data) gtk_main_quit (); } +void +on_account_selector_selection_changed (GtkWidget *widget, + gpointer user_data) +{ + GtkTreeModel *model = gtk_combo_box_get_model(GTK_COMBO_BOX(widget)); + GtkTreeIter iter; -static void + gchar *account_name; + + if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(widget), &iter)) + { + gtk_tree_model_get(GTK_TREE_MODEL(model), + &iter, + 0, &account_name, + -1); + } + else + { + account_name="empty"; + } + + g_message("Value: '%s'\n", account_name); +} + +void on_account_settings1_activate (GtkMenuItem *menuitem, gpointer user_data) { + GladeXML *glade_xml; GtkWidget *advanced_account_setup; ModestUIPrivate *priv; gint retval; + GSList *account_name_list; + GSList *account_name_list_iter; + GtkListStore *account_names; + GtkTreeIter account_names_iter; + GtkWidget *account_selector; + GtkCellRenderer *renderer; priv = MODEST_UI_GET_PRIVATE(MODEST_UI(user_data)); - advanced_account_setup = glade_xml_get_widget(priv->glade_xml, "mailbox_setup_advanced"); + glade_xml = glade_xml_new(MODEST_GLADE, "mailbox_setup_advanced", NULL); + advanced_account_setup = glade_xml_get_widget(glade_xml, "mailbox_setup_advanced"); + + account_name_list=modest_account_mgr_account_names(priv->modest_acc_mgr, NULL); + account_names = gtk_list_store_new(1, G_TYPE_STRING); + + for (account_name_list_iter=account_name_list; + account_name_list_iter!=NULL; + account_name_list_iter=g_slist_next(account_name_list_iter)) + { + gtk_list_store_append(account_names, &account_names_iter); + gtk_list_store_set(account_names, &account_names_iter, + 0, account_name_list_iter->data, + -1); + } + + g_slist_free(account_name_list); + + account_selector = glade_xml_get_widget(glade_xml, "account_selector"); + gtk_combo_box_set_model(GTK_COMBO_BOX(account_selector), GTK_TREE_MODEL(account_names)); + + renderer = gtk_cell_renderer_text_new (); + gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (account_selector), renderer, TRUE); + gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (account_selector), renderer, + "text", 0, + NULL); + + g_signal_connect(GTK_WIDGET(account_selector), "changed", + G_CALLBACK(on_account_selector_selection_changed), + GTK_WIDGET(advanced_account_setup)); + + gtk_combo_box_set_active(GTK_COMBO_BOX(account_selector), 0); gtk_widget_show_all(GTK_WIDGET(advanced_account_setup)); retval=gtk_dialog_run(GTK_DIALOG(advanced_account_setup)); - gtk_widget_hide(GTK_WIDGET(advanced_account_setup)); -} + g_object_unref(account_names); + gtk_widget_destroy(GTK_WIDGET(advanced_account_setup)); + + g_object_unref(glade_xml); +} static void on_folder_clicked (ModestTnyFolderTreeView *folder_tree, @@ -528,8 +612,6 @@ on_password_requested (ModestTnyAccountStore *account_store, static GtkWidget* modest_main_window_header_tree (TnyMsgFolderIface *folder) { - GtkTreeViewColumn *column; - GtkCellRenderer *renderer = gtk_cell_renderer_text_new (); GtkWidget *header_tree; header_tree = GTK_WIDGET(modest_tny_header_tree_view_new(folder)); @@ -538,71 +620,23 @@ modest_main_window_header_tree (TnyMsgFolderIface *folder) return NULL; } - column = gtk_tree_view_column_new_with_attributes(_("Date"), renderer, - "text", - TNY_MSG_HEADER_LIST_MODEL_DATE_RECEIVED_COLUMN, - NULL); - gtk_tree_view_column_set_resizable (column, TRUE); - gtk_tree_view_append_column (GTK_TREE_VIEW(header_tree), column); - - - - column = gtk_tree_view_column_new_with_attributes(_("From"), renderer, - "text", - TNY_MSG_HEADER_LIST_MODEL_FROM_COLUMN, - NULL); - gtk_tree_view_column_set_resizable (column, TRUE); - gtk_tree_view_append_column (GTK_TREE_VIEW(header_tree), column); - - - column = gtk_tree_view_column_new_with_attributes(_("Subject"), renderer, - "text", - TNY_MSG_HEADER_LIST_MODEL_SUBJECT_COLUMN, - NULL); - gtk_tree_view_column_set_resizable (column, TRUE); - gtk_tree_view_append_column (GTK_TREE_VIEW(header_tree), column); - - gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(header_tree), TRUE); - gtk_tree_view_set_headers_clickable (GTK_TREE_VIEW(header_tree), TRUE); - return GTK_WIDGET(header_tree); } - static GtkWidget* modest_main_window_folder_tree (ModestAccountMgr *modest_acc_mgr, TnyAccountStoreIface *account_store) { - GtkTreeViewColumn *column; - GtkCellRenderer *renderer = gtk_cell_renderer_text_new (); GtkWidget *folder_tree; - folder_tree = modest_tny_folder_tree_view_new (account_store); + folder_tree = GTK_WIDGET(modest_tny_folder_tree_view_new (account_store)); if (!folder_tree) { g_warning ("could not create folder list"); return NULL; } - - column = gtk_tree_view_column_new_with_attributes(_("All Mail Folders"), - renderer,"text", - TNY_ACCOUNT_TREE_MODEL_NAME_COLUMN, - NULL); - gtk_tree_view_column_set_resizable (column, TRUE); - gtk_tree_view_append_column (GTK_TREE_VIEW(folder_tree), column); - - column = gtk_tree_view_column_new_with_attributes(_("Unread"), - renderer, "text", - TNY_ACCOUNT_TREE_MODEL_UNREAD_COLUMN, - NULL); - gtk_tree_view_column_set_resizable (column, TRUE); - gtk_tree_view_append_column (GTK_TREE_VIEW(folder_tree), column); - - - gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(folder_tree), TRUE); - gtk_tree_view_set_headers_clickable (GTK_TREE_VIEW(folder_tree), TRUE); - + return folder_tree; } @@ -614,12 +648,94 @@ on_new_mail_clicked (GtkWidget *widget, ModestUI *modest_ui) modest_ui_show_edit_window (modest_ui, "", "", "", "", "", NULL); } -/* WIP, testing az */ +static void +reply_to_msg (ModestUI *modest_ui, TnyMsgHeaderIface *header, + ModestTnyMsgView *msg_view) { + const TnyMsgIface *msg; + const TnyMsgFolderIface *folder; + GString *re_sub; + const gchar *subject, *from; + gchar *unquoted, *quoted; + time_t sent_date; + gint line_limit = 76; + + if (!header) { + g_warning("no header"); + return; + } + folder = tny_msg_header_iface_get_folder (TNY_MSG_HEADER_IFACE(header)); + if (!folder) { + g_warning ("cannot find folder"); + return; + } + + msg = tny_msg_folder_iface_get_message (TNY_MSG_FOLDER_IFACE(folder), header); + if (!msg) { + g_warning ("cannot find msg"); + return; + } + subject = tny_msg_header_iface_get_subject(header); + re_sub = g_string_new(subject); + g_string_prepend(re_sub, "Re: "); + /* FIXME: honor replyto, cc */ + from = tny_msg_header_iface_get_from(header); + sent_date = tny_msg_header_iface_get_date_sent(header); + + unquoted = modest_tny_msg_view_get_selected_text(msg_view); + quoted = modest_tny_msg_actions_quote(msg, from, sent_date, line_limit, unquoted); + + modest_ui_show_edit_window (modest_ui, from, /* cc */ "", /* bcc */ "", re_sub->str, quoted, NULL); + g_free(quoted); + g_free(unquoted); + g_string_free(re_sub, TRUE); +} + + static void on_reply_clicked (GtkWidget *widget, ModestUI *modest_ui) { + GtkTreeSelection *sel; + GtkWidget *paned; + GtkTreeModel *model; + GtkTreeIter iter; + GtkScrolledWindow *scroll; + + TnyMsgHeaderIface *header; + + ModestTnyHeaderTreeView *header_view; + ModestTnyMsgView *msg_view; + ModestUIPrivate *priv; + g_return_if_fail (modest_ui); - modest_ui_show_edit_window (modest_ui, "replyto", "cc", "bcc", "sub", "body-quote", NULL); + + priv = MODEST_UI_GET_PRIVATE(modest_ui); + + paned = glade_xml_get_widget (priv->glade_xml,"mail_paned"); + g_return_if_fail (paned); + + scroll = GTK_SCROLLED_WINDOW(gtk_paned_get_child1 (GTK_PANED(paned))); + g_return_if_fail (scroll); + + msg_view = MODEST_TNY_MSG_VIEW(gtk_paned_get_child2 (GTK_PANED(paned))); + g_return_if_fail (msg_view); + + header_view = MODEST_TNY_HEADER_TREE_VIEW(gtk_bin_get_child (GTK_BIN(scroll))); + g_return_if_fail (header_view); + + sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(header_view)); + g_return_if_fail (sel); + + if (!gtk_tree_selection_get_selected (sel, &model, &iter)) { + /* no message was selected. TODO: disable reply button in this case */ + g_warning("nothing to reply to"); + return; + } + + gtk_tree_model_get (model, &iter, + TNY_MSG_HEADER_LIST_MODEL_INSTANCE_COLUMN, + &header, -1); + + reply_to_msg (modest_ui, header, msg_view); } @@ -632,13 +748,15 @@ on_send_button_clicked (GtkWidget *widget, ModestUI *modest_ui) ModestTnyTransportActions *actions; ModestUIPrivate *priv; GtkWidget *to_entry, *subject_entry, *body_view; - const gchar *to, *subject; + const gchar *to, *subject, *email_from; gchar *body; GtkTextIter start, end; GtkTextBuffer *buf; TnyAccountStoreIface *account_store; const GList *transport_accounts; TnyTransportAccountIface *transport_account; + ModestConf *conf; + ModestAccountMgr *acc_mgr; g_return_if_fail (modest_ui); @@ -667,10 +785,20 @@ on_send_button_clicked (GtkWidget *widget, ModestUI *modest_ui) gtk_text_buffer_get_bounds (buf, &start, &end); body = gtk_text_buffer_get_text (buf, &start, &end, FALSE); - g_message ("sending %s ==> %s", subject, to); + /* FIXME: HACK! */ + conf = MODEST_CONF(modest_conf_new()); + acc_mgr = MODEST_ACCOUNT_MGR(modest_account_mgr_new (conf)); + if (!acc_mgr) { + g_warning ("failed to instantiate account mgr"); + return; + } + email_from = modest_account_mgr_get_identity_string(acc_mgr, "myidentity", MODEST_ACCOUNT_EMAIL, NULL); + /* end HACK */ + + g_message("sending \"%s\" %s ==> %s", subject, email_from, to); modest_tny_transport_actions_send_message (actions, transport_account, - "dirk-jan.binnema@nokia.com", + email_from, to, "", "", subject, body); g_free (body);