X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fgtk-glade%2Fmodest-ui.c;h=843edea916b5c818b8841ad20504ec3c2fd9a4e7;hp=262b01e5d512a4fc1282812984823c0d0a2350d0;hb=0b7a6ab4edbeb404c1b93a7431802bcd45625d08;hpb=0ca0c6fa99e595c0545d3a50d42ec288639d478a diff --git a/src/gtk-glade/modest-ui.c b/src/gtk-glade/modest-ui.c index 262b01e..843edea 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,7 @@ #include "../modest-tny-msg-view.h" #include "../modest-tny-transport-actions.h" - -//#include "modest.glade.h" +#include "../modest-text-utils.h" #define MODEST_GLADE PREFIX "/share/modest/glade/modest.glade" #define MODEST_GLADE_MAIN_WIN "main" @@ -43,8 +45,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); @@ -195,9 +198,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 +273,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 +347,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 +367,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 +418,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 +609,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,39 +617,11 @@ 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) @@ -579,7 +630,7 @@ modest_main_window_folder_tree (ModestAccountMgr *modest_acc_mgr, 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; @@ -614,12 +665,138 @@ on_new_mail_clicked (GtkWidget *widget, ModestUI *modest_ui) modest_ui_show_edit_window (modest_ui, "", "", "", "", "", NULL); } -/* WIP, testing az */ + +static gchar * +modest_ui_quote_msg(const TnyMsgIface *src, const gchar *from, time_t sent_date) +{ + GList *parts; + TnyMsgMimePartIface *part; + TnyStreamIface* stream; + TnyTextBufferStream *dest; + TnyMsgMimePartIface *body = NULL; + GtkTextBuffer *buf; + gint limit = 76; /* TODO: make configurable */ + gchar *quoted; + + buf = gtk_text_buffer_new(NULL); + dest = tny_text_buffer_stream_new(buf); + + /* is the warning in this line due to a bug in tinymail? */ + parts = (GList*) tny_msg_iface_get_parts (src); + + while (parts) { + /* TODO: maybe we'd like to quote more than one part? */ + TnyMsgMimePartIface *part = + TNY_MSG_MIME_PART_IFACE(parts->data); + if (tny_msg_mime_part_iface_content_type_is (part, "text/plain")) { + body = part; + break; + } + parts = parts->next; + } + if (!body) { + return NULL; + } + buf = gtk_text_buffer_new (NULL); + stream = TNY_STREAM_IFACE(tny_text_buffer_stream_new (buf)); + + tny_stream_iface_reset (stream); + tny_msg_mime_part_iface_decode_to_stream (body, stream); + tny_stream_iface_reset (stream); + + quoted = modest_text_utils_quote (buf, from, sent_date, limit); + + g_object_unref(stream); + g_object_unref(buf); + return quoted; +} + +static void +modest_ui_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 *quoted; + time_t sent_date; + + quoted = ""; + if (header) { + 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); + quoted = modest_ui_quote_msg(msg, from, sent_date); + } else { + g_warning("no header"); + return; + } + + modest_ui_show_edit_window (modest_ui, from, /* cc */ "", /* bcc */ "", re_sub->str, quoted, NULL); + g_free(quoted); + 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); + + modest_ui_reply_to_msg (modest_ui, header, msg_view); }