* The reply/fw stuff now uses the text/plain part of the original message
[modest] / src / maemo / modest-edit-msg-window.c
index ac42703..872a059 100644 (file)
@@ -29,6 +29,8 @@
 #include <glib/gi18n.h>
 #include <tny-account-store.h>
 #include "modest-edit-msg-window.h"
+#include "modest-icon-names.h"
+#include "modest-icon-factory.h"
 #include "modest-widget-memory.h"
 #include "modest-mail-operation.h"
 #include "modest-tny-platform-factory.h"
@@ -49,15 +51,16 @@ enum {
 typedef struct _ModestEditMsgWindowPrivate ModestEditMsgWindowPrivate;
 struct _ModestEditMsgWindowPrivate {
 
-       ModestWidgetFactory *factory;
+       ModestWidgetFactory *widget_factory;
        TnyPlatformFactory *fact;
+       GtkUIManager *ui_manager;
        
        GtkWidget      *toolbar, *menubar;
        GtkWidget      *msg_body;
        GtkWidget      *from_field, *to_field, *cc_field, *bcc_field,
                       *subject_field;
-       GtkUIManager   *ui_manager;
 };
+
 #define MODEST_EDIT_MSG_WINDOW_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
                                                     MODEST_TYPE_EDIT_MSG_WINDOW, \
                                                     ModestEditMsgWindowPrivate))
@@ -117,9 +120,9 @@ modest_edit_msg_window_init (ModestEditMsgWindow *obj)
        priv = MODEST_EDIT_MSG_WINDOW_GET_PRIVATE(obj);
 
        priv->fact = modest_tny_platform_factory_get_instance ();
-       priv->factory = NULL;
+       priv->widget_factory = NULL;
        priv->toolbar = NULL;
-       //priv->menubar = NULL;
+       priv->menubar = NULL;
 }
 
 
@@ -133,8 +136,7 @@ save_settings (ModestEditMsgWindow *self)
        priv = MODEST_EDIT_MSG_WINDOW_GET_PRIVATE(self);
        conf = modest_tny_platform_factory_get_modest_conf_instance (priv->fact);
 
-       modest_widget_memory_save_settings (conf, GTK_WIDGET(self),
-                                           "modest-edit-msg-window");
+       modest_widget_memory_save (conf, G_OBJECT(self), "modest-edit-msg-window");
 }
 
 
@@ -147,183 +149,156 @@ restore_settings (ModestEditMsgWindow *self)
        priv = MODEST_EDIT_MSG_WINDOW_GET_PRIVATE(self);
        conf = modest_tny_platform_factory_get_modest_conf_instance (priv->fact);
 
-       modest_widget_memory_restore_settings (conf, GTK_WIDGET(self),
-                                              "modest-edit-msg-window");
+       modest_widget_memory_restore (conf, G_OBJECT(self), "modest-edit-msg-window");
 }
 
-       
 
-static void
-on_menu_quit (ModestEditMsgWindow *self, guint action, GtkWidget *widget)
-{
-       save_settings (self);
-       gtk_widget_destroy (GTK_WIDGET(self));
-}
-
-
-/* Our menu, an array of GtkItemFactoryEntry structures that defines each menu item */
-static const gchar* UI_DEF=
-       "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
-       "<ui>"
-       "  <popup>"
-       "    <menu name=\"Message\" \"MenuMessage\">"
-       "      <menuitem name=\"New\" action=\"on_menu_quit\" />"
-       "    </menu>"
-//     "    <menu name=\"JustifyMenu\" action=\"JustifyMenuAction\">"
-//     "      <menuitem name=\"Left\" action=\"justify-left\"/>"
-//     "      <menuitem name=\"Centre\" action=\"justify-center\"/>"
-//     "      <menuitem name=\"Right\" action=\"justify-right\"/>"
-//     "      <menuitem name=\"Fill\" action=\"justify-fill\"/>"
-//     "    </menu>"
-       "  </popup>"
-       "</ui>";
-
-
-static GtkMenu *
-get_menu (ModestEditMsgWindow *self)
-{
-       GtkWidget *w;
-       int i = 0;
+/* /\* Our menu, an array of GtkItemFactoryEntry structures that defines each menu item *\/ */
+/* static GtkItemFactoryEntry menu_items[] = { */
+/*     { "/_File",             NULL,                   NULL,           0, "<Branch>" ,NULL}, */
+/*     { "/File/_New",         "<control>N",           NULL,           0, "<StockItem>", GTK_STOCK_NEW }, */
+/*     { "/File/_Open",        "<control>O",           NULL,           0, "<StockItem>", GTK_STOCK_OPEN }, */
+/*     { "/File/_Save",        "<control>S",           NULL,           0, "<StockItem>", GTK_STOCK_SAVE }, */
+/*     { "/File/Save _As",     NULL,                   NULL,           0, "<Item>", NULL} , */
+/*     { "/File/Save Draft",   "<control><shift>S",    NULL,           0, "<Item>",NULL }, */
+
+
+/*     { "/File/sep1",         NULL,                   NULL,           0, "<Separator>" ,NULL }, */
+/*     { "/File/_Quit",        "<CTRL>Q",              on_menu_quit,   0, "<StockItem>", GTK_STOCK_QUIT }, */
+
+/*     { "/_Edit",             NULL,                   NULL,           0, "<Branch>" ,NULL }, */
+/*     { "/Edit/_Undo",        "<CTRL>Z",              NULL,           0, "<StockItem>", GTK_STOCK_UNDO }, */
+/*     { "/Edit/_Redo",        "<shift><CTRL>Z",       NULL,           0, "<StockItem>", GTK_STOCK_REDO }, */
+/*     { "/File/sep1",         NULL,                   NULL,           0, "<Separator>",NULL }, */
+/*     { "/Edit/Cut",          "<control>X",           NULL,           0, "<StockItem>", GTK_STOCK_CUT  }, */
+/*     { "/Edit/Copy",         "<CTRL>C",              NULL,           0, "<StockItem>", GTK_STOCK_COPY }, */
+/*     { "/Edit/Paste",        NULL,                   NULL,           0, "<StockItem>", GTK_STOCK_PASTE}, */
+/*     { "/Edit/sep1",         NULL,                   NULL,           0, "<Separator>",NULL }, */
+/*     { "/Edit/Delete",       "<CTRL>Q",              NULL,           0, "<Item>" ,NULL }, */
+/*     { "/Edit/Select all",   "<CTRL>A",              NULL,           0, "<Item>" ,NULL }, */
+/*     { "/Edit/Deselect all",  "<Shift><CTRL>A",      NULL,           0, "<Item>",NULL }, */
+
+/*     { "/_View",             NULL,           NULL,                   0, "<Branch>",NULL }, */
+/*     { "/View/To-field",          NULL,              NULL,           0, "<CheckItem>",NULL }, */
        
-       ModestEditMsgWindowPrivate *priv;
-       priv = MODEST_EDIT_MSG_WINDOW_GET_PRIVATE(self);
-
-       priv->ui_manager = gtk_ui_manager_new ();
-
-       gtk_ui_manager_add_ui_from_string (priv->ui_manager,
-                                          UI_DEF, strlen(UI_DEF),
-                                          NULL);
-
-       w = gtk_ui_manager_get_widget (priv->ui_manager, "/popup");
-       g_warning ("==> GtkMenu? ==> %s", GTK_IS_MENU(w) ? "yes" : "no"); 
-
-       return GTK_MENU(w);
-}
+/*     { "/View/Cc-field:",          NULL,             NULL,           0, "<CheckItem>",NULL }, */
+/*     { "/View/Bcc-field:",          NULL,            NULL,           0, "<CheckItem>",NULL }, */
+       
+       
+/*     { "/_Insert",             NULL,         NULL,           0, "<Branch>",NULL }, */
+/* /\*         { "/Actions/_Reply",    NULL,                   NULL,           0, "<Item>" }, *\/ */
+/* /\*         { "/Actions/_Forward",  NULL,                   NULL,           0, "<Item>" }, *\/ */
+/* /\*         { "/Actions/_Bounce",   NULL,                   NULL,           0, "<Item>" },   *\/ */
+       
+/*     { "/_Format",            NULL,                  NULL,           0, "<Branch>",NULL } */
+/* /\*         { "/Options/_Accounts",  NULL,                  on_menu_accounts,0, "<Item>" }, *\/ */
+/* /\*         { "/Options/_Contacts",  NULL,                  NULL,           0, "<Item>" }, *\/ */
 
 
+/* /\*         { "/_Help",         NULL,                       NULL,           0, "<Branch>" }, *\/ */
+/* /\*         { "/_Help/About",   NULL,                       on_menu_about,  0, "<StockItem>", GTK_STOCK_ABOUT}, *\/ */
+/* }; */
 
+/* static gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); */
 
 
-static void
-send_mail (ModestEditMsgWindow *self)
-{
-       const gchar *to, *cc, *bcc, *subject;
-       gchar *body, *from;
-       ModestEditMsgWindowPrivate *priv;
-       TnyTransportAccount *transport_account;
-       ModestMailOperation *mail_operation;
-       ModestAccountData *data;
+/* static void */
+/* send_mail (ModestEditMsgWindow *self) */
+/* { */
+/*     const gchar *to, *cc, *bcc, *subject; */
+/*     gchar *body, *from; */
+/*     ModestEditMsgWindowPrivate *priv; */
+/*     TnyTransportAccount *transport_account; */
+/*     ModestMailOperation *mail_operation; */
+/*     ModestAccountData *data; */
        
-       GtkTextBuffer *buf;
-       GtkTextIter b, e;
+/*     GtkTextBuffer *buf; */
+/*     GtkTextIter b, e; */
        
-       priv = MODEST_EDIT_MSG_WINDOW_GET_PRIVATE(self);
-       data = modest_combo_box_get_active_id (MODEST_COMBO_BOX (priv->from_field));
-
-       /* don't free these (except from) */
-       from    =  g_strdup_printf ("%s <%s>", data->full_name, data->email) ;
-       to      =  gtk_entry_get_text (GTK_ENTRY(priv->to_field));
-       cc      =  gtk_entry_get_text (GTK_ENTRY(priv->cc_field));
-       bcc     =  gtk_entry_get_text (GTK_ENTRY(priv->bcc_field));
-       subject =  gtk_entry_get_text (GTK_ENTRY(priv->subject_field));
+/*     priv = MODEST_EDIT_MSG_WINDOW_GET_PRIVATE(self); */
+/*     data = modest_combo_box_get_active_id (MODEST_COMBO_BOX (priv->from_field)); */
+
+/*     /\* don't free these (except from) *\/ */
+/*     from    =  g_strdup_printf ("%s <%s>", data->full_name, data->email) ; */
+/*     to      =  gtk_entry_get_text (GTK_ENTRY(priv->to_field)); */
+/*     cc      =  gtk_entry_get_text (GTK_ENTRY(priv->cc_field)); */
+/*     bcc     =  gtk_entry_get_text (GTK_ENTRY(priv->bcc_field)); */
+/*     subject =  gtk_entry_get_text (GTK_ENTRY(priv->subject_field)); */
        
-       /* don't unref */
-       buf   =  gtk_text_view_get_buffer (GTK_TEXT_VIEW(priv->msg_body));
+/*     /\* don't unref *\/ */
+/*     buf   =  gtk_text_view_get_buffer (GTK_TEXT_VIEW(priv->msg_body)); */
        
-       gtk_text_buffer_get_bounds (buf, &b, &e);
-       body  = gtk_text_buffer_get_text (buf, &b, &e,
-                                         FALSE); /* free this one */
-
-       /* FIXME: Code added just for testing. The transport_account
-          should be provided by the account manager, maybe using
-          _get_current_account () or _get_default_account
-          (TRANSPORT_ACCOUNT). These methods do not exist currently. */
-       {
-               TnyList *accounts;
-               TnyIterator *iter;
-               TnyAccountStore *account_store;
-
-               accounts = TNY_LIST(tny_simple_list_new ());
-               account_store = tny_platform_factory_new_account_store (priv->fact);
-               tny_account_store_get_accounts (account_store, accounts,
-                                               TNY_ACCOUNT_STORE_TRANSPORT_ACCOUNTS);
-
-               iter = tny_list_create_iterator(accounts);
-               tny_iterator_first (iter);
-               if (tny_iterator_is_done (iter)) {
-                       /* FIXME: Add error handling through mail operation */
-                       g_printerr("modest: no transport accounts defined\n");
-                       g_free (body);
-                       return;
-               }
-               transport_account = TNY_TRANSPORT_ACCOUNT (tny_iterator_get_current(iter));
-       }
-
-       mail_operation = modest_mail_operation_new ();
-
-       modest_mail_operation_send_new_mail (mail_operation,
-                                            transport_account,
-                                            from, to, cc, bcc,
-                                            subject, body, NULL);
-       /* Clean up */
-       g_object_unref (mail_operation);
-       g_free (from);
-       g_free (body);
-}
-
-
-static void
-on_toolbar_button_clicked (ModestToolbar *toolbar, ModestToolbarButton button_id,
-                          ModestEditMsgWindow *self)
-{
-       switch (button_id) {
-       case MODEST_TOOLBAR_BUTTON_MAIL_SEND:
-               send_mail (self);
-               save_settings (self);
-               gtk_widget_destroy (GTK_WIDGET(self));
-               break;
+/*     gtk_text_buffer_get_bounds (buf, &b, &e); */
+/*     body  = gtk_text_buffer_get_text (buf, &b, &e, */
+/*                                       FALSE); /\* free this one *\/ */
+
+/*     /\* FIXME: Code added just for testing. The final version will */
+/*        use the send queue provided by tinymail and some */
+/*        classifier *\/ */
+/*     { */
+/*             TnyList *accounts; */
+/*             TnyIterator *iter; */
+/*             TnyAccountStore *account_store; */
+
+/*             accounts = TNY_LIST(tny_simple_list_new ()); */
+/*             account_store = tny_platform_factory_new_account_store (priv->fact); */
+/*             tny_account_store_get_accounts (account_store, accounts, */
+/*                                             TNY_ACCOUNT_STORE_TRANSPORT_ACCOUNTS); */
+
+/*             iter = tny_list_create_iterator(accounts); */
+/*             tny_iterator_first (iter); */
+/*             if (tny_iterator_is_done (iter)) { */
+/*                     /\* FIXME: Add error handling through mail operation *\/ */
+/*                     g_printerr("modest: no transport accounts defined\n"); */
+/*                     g_free (body); */
+/*                     return; */
+/*             } */
+/*             transport_account = TNY_TRANSPORT_ACCOUNT (tny_iterator_get_current(iter)); */
+/*             g_object_ref (transport_account); */
+
+/*             tny_list_foreach (accounts, (GFunc) g_object_unref, NULL); */
+/*             g_object_unref (G_OBJECT (accounts)); */
+/*             g_object_unref (G_OBJECT (iter)); */
+/*     } */
+
+/*     mail_operation = modest_mail_operation_new (); */
+
+/*     modest_mail_operation_send_new_mail (mail_operation, */
+/*                                          transport_account, */
+/*                                          from, to, cc, bcc, */
+/*                                          subject, body, NULL); */
+/*     /\* Clean up *\/ */
+/*     g_object_unref (G_OBJECT (mail_operation)); */
+/*     g_object_unref (G_OBJECT (transport_account)); */
+/*     g_free (from); */
+/*     g_free (body); */
+/* } */
+
+
+/* static void */
+/* on_toolbar_button_clicked (ModestToolbar *toolbar, ModestToolbarButton button_id, */
+/*                        ModestEditMsgWindow *self) */
+/* { */
+/*     switch (button_id) { */
+/*     case MODEST_TOOLBAR_BUTTON_MAIL_SEND: */
+/*             send_mail (self); */
+/*             save_settings (self); */
+/*             gtk_widget_destroy (GTK_WIDGET(self)); */
+/*             break; */
                
-       case MODEST_TOOLBAR_BUTTON_REPLY:
-       case MODEST_TOOLBAR_BUTTON_REPLY_ALL:
-       case MODEST_TOOLBAR_BUTTON_FORWARD:
-       case MODEST_TOOLBAR_BUTTON_SEND_RECEIVE:
-       case MODEST_TOOLBAR_BUTTON_NEXT:
-       case MODEST_TOOLBAR_BUTTON_PREV:
-       case MODEST_TOOLBAR_BUTTON_DELETE:
-
-       default:
-               g_printerr ("modest: key %d pressed\n", button_id);
-       }
-}
-
-
+/*     case MODEST_TOOLBAR_BUTTON_REPLY: */
+/*     case MODEST_TOOLBAR_BUTTON_REPLY_ALL: */
+/*     case MODEST_TOOLBAR_BUTTON_FORWARD: */
+/*     case MODEST_TOOLBAR_BUTTON_SEND_RECEIVE: */
+/*     case MODEST_TOOLBAR_BUTTON_NEXT: */
+/*     case MODEST_TOOLBAR_BUTTON_PREV: */
+/*     case MODEST_TOOLBAR_BUTTON_DELETE: */
 
+/*     default: */
+/*             g_printerr ("modest: key %d pressed\n", button_id); */
+/*     } */
+/* } */
 
-static ModestToolbar*
-toolbar_new (ModestEditMsgWindow *self)
-{
-       int i;
-       ModestToolbar *toolbar;
-       GSList *buttons = NULL;
-       ModestEditMsgWindowPrivate *priv;
-
-       ModestToolbarButton button_ids[] = {
-               MODEST_TOOLBAR_BUTTON_MAIL_SEND
-       };              
-       
-       priv = MODEST_EDIT_MSG_WINDOW_GET_PRIVATE(self);
-
-       for (i = 0 ; i != sizeof(button_ids) / sizeof(ModestToolbarButton); ++i)
-               buttons = g_slist_append (buttons, GINT_TO_POINTER(button_ids[i]));
-       
-       toolbar = modest_widget_factory_get_edit_toolbar (priv->factory, buttons);
-       g_slist_free (buttons);
-
-       g_signal_connect (G_OBJECT(toolbar), "button_clicked",
-                         G_CALLBACK(on_toolbar_button_clicked), self);
-       
-       return toolbar;
-}
 
 
 static void
@@ -340,12 +315,12 @@ init_window (ModestEditMsgWindow *obj)
        cc_button     = gtk_button_new_with_label (_("Cc..."));
        bcc_button    = gtk_button_new_with_label (_("Bcc..."));
 
-       priv->from_field    = modest_widget_factory_get_combo_box (priv->factory,
+       priv->from_field    = modest_widget_factory_get_combo_box (priv->widget_factory,
                                                                   MODEST_COMBO_BOX_TYPE_TRANSPORTS);
-       priv->to_field      = gtk_entry_new_with_max_length (40);
-       priv->cc_field      = gtk_entry_new_with_max_length (40);
-       priv->bcc_field     = gtk_entry_new_with_max_length (40);
-       priv->subject_field = gtk_entry_new_with_max_length (40);
+       priv->to_field      = gtk_entry_new_with_max_length (80);
+       priv->cc_field      = gtk_entry_new_with_max_length (80);
+       priv->bcc_field     = gtk_entry_new_with_max_length (80);
+       priv->subject_field = gtk_entry_new_with_max_length (80);
        
        header_table = gtk_table_new (5,2, FALSE);
        
@@ -367,14 +342,11 @@ init_window (ModestEditMsgWindow *obj)
        
        main_vbox = gtk_vbox_new  (FALSE, 6);
 
-       //priv->menubar = menubar_new (obj);
-       priv->toolbar = GTK_WIDGET(toolbar_new (obj));
-
-       //gtk_box_pack_start (GTK_BOX(main_vbox), priv->menubar, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(main_vbox), priv->menubar, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(main_vbox), priv->toolbar, FALSE, FALSE, 0);
        gtk_box_pack_start (GTK_BOX(main_vbox), header_table, FALSE, FALSE, 6);
        gtk_box_pack_start (GTK_BOX(main_vbox), priv->msg_body, TRUE, TRUE, 6);
-       gtk_box_pack_start (GTK_BOX(main_vbox), priv->toolbar, FALSE, FALSE, 0);
-       
+
        gtk_widget_show_all (GTK_WIDGET(main_vbox));
        gtk_container_add (GTK_CONTAINER(obj), main_vbox);
 }
@@ -388,8 +360,8 @@ modest_edit_msg_window_finalize (GObject *obj)
 
        priv = MODEST_EDIT_MSG_WINDOW_GET_PRIVATE(obj);
 
-       g_object_unref (G_OBJECT(priv->factory));
-       priv->factory = NULL;
+       g_object_unref (G_OBJECT(priv->widget_factory));
+       priv->widget_factory = NULL;
        
        G_OBJECT_CLASS(parent_class)->finalize (obj);
 
@@ -407,22 +379,33 @@ on_delete_event (GtkWidget *widget, GdkEvent *event, ModestEditMsgWindow *self)
 
 GtkWidget*
 modest_edit_msg_window_new (ModestWidgetFactory *factory,
-                           ModestEditType type, TnyMsg *msg)
+                           GtkUIManager *ui_manager,
+                           ModestEditType type)
 {
        GObject *obj;
        ModestEditMsgWindowPrivate *priv;
 
        g_return_val_if_fail (factory, NULL);
        g_return_val_if_fail (type < MODEST_EDIT_TYPE_NUM, NULL);
-       g_return_val_if_fail (!(type==MODEST_EDIT_TYPE_NEW && msg), NULL); 
-       g_return_val_if_fail (!(type!=MODEST_EDIT_TYPE_NEW && !msg), NULL);     
        
        obj = g_object_new(MODEST_TYPE_EDIT_MSG_WINDOW, NULL);
        priv = MODEST_EDIT_MSG_WINDOW_GET_PRIVATE(obj);
 
-       g_object_ref (factory);
-       priv->factory = factory;
+       priv->widget_factory = g_object_ref (factory);
+       priv->ui_manager = g_object_ref (ui_manager);
+
+       /* Add accelerators */
+       gtk_window_add_accel_group (GTK_WINDOW (obj), 
+                                   gtk_ui_manager_get_accel_group (priv->ui_manager));
+
+
+       /* Toolbar / Menubar */
+       priv->toolbar = gtk_ui_manager_get_widget (priv->ui_manager, "/EditMsgWindowToolBar");
+       priv->menubar = gtk_ui_manager_get_widget (priv->ui_manager, "/EditMsgWindowMenuBar");
 
+       gtk_toolbar_set_tooltips (GTK_TOOLBAR (priv->toolbar), TRUE);
+
+       /* Init window */
        init_window (MODEST_EDIT_MSG_WINDOW(obj));
 
        restore_settings (MODEST_EDIT_MSG_WINDOW(obj));
@@ -433,32 +416,46 @@ modest_edit_msg_window_new (ModestWidgetFactory *factory,
 
        g_signal_connect (G_OBJECT(obj), "delete-event",
                          G_CALLBACK(on_delete_event), obj);
-       
-       if (msg) {
-               /* Testing code. Should be into a set_msg method */
-               TnyHeader *header;
-               GtkTextBuffer *buf;
-
-               header = tny_msg_get_header (msg);
-               gtk_entry_set_text (GTK_ENTRY(priv->to_field),
-                                   tny_header_get_to (header));
-               gtk_entry_set_text (GTK_ENTRY(priv->cc_field),
-                                   tny_header_get_cc (header));
-               gtk_entry_set_text (GTK_ENTRY(priv->bcc_field),
-                                   tny_header_get_bcc (header));
-               gtk_entry_set_text (GTK_ENTRY(priv->subject_field),
-                                   tny_header_get_subject (header));   
-
-               buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW(priv->msg_body));
-               gtk_text_buffer_set_text (buf,
-                                         (const gchar *) modest_tny_msg_actions_find_body (msg, FALSE),
-                                         -1);
-
-               /* TODO: lower priority, select in the From: combo to
-                  the value that comes from msg */
-
-               /* TODO: set attachments */
-       }
 
        return GTK_WIDGET (obj);
 }
+
+void
+modest_edit_msg_window_set_msg (ModestEditMsgWindow *self, TnyMsg *msg)
+{
+       TnyHeader *header;
+       GtkTextBuffer *buf;
+       const gchar *to, *cc, *bcc, *subject;
+       ModestEditMsgWindowPrivate *priv;
+
+       g_return_if_fail (MODEST_IS_EDIT_MSG_WINDOW (self));
+       g_return_if_fail (TNY_IS_MSG (msg));
+
+       priv = MODEST_EDIT_MSG_WINDOW_GET_PRIVATE (self);
+
+       header = tny_msg_get_header (msg);
+       to      = tny_header_get_to (header);
+       cc      = tny_header_get_cc (header);
+       bcc     = tny_header_get_bcc (header);
+       subject = tny_header_get_subject (header);
+
+       if (to)
+               gtk_entry_set_text (GTK_ENTRY(priv->to_field),  to);
+       if (cc)
+               gtk_entry_set_text (GTK_ENTRY(priv->cc_field),  cc);
+       if (bcc)
+               gtk_entry_set_text (GTK_ENTRY(priv->bcc_field), bcc);
+       if (subject)
+               gtk_entry_set_text (GTK_ENTRY(priv->subject_field), subject);   
+       
+       buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW(priv->msg_body));
+       gtk_text_buffer_set_text (buf,
+                                 (const gchar *) modest_tny_msg_actions_find_body (msg, FALSE),
+                                 -1);
+
+       /* TODO: lower priority, select in the From: combo to the
+          value that comes from msg <- not sure, should it be
+          allowed? */
+       
+       /* TODO: set attachments */
+}