X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fgtk%2Fmodest-edit-msg-window.c;h=acc3095a0c0a48db47b3203232f66d594c520ea2;hp=d09f14952217980195cdc48c813ffe2aebc479c4;hb=396450773800287cd1a6353be9c837ffabdd98b6;hpb=bdd660a8b720f6e6a3a57c194a85f977f9cd124e diff --git a/src/gtk/modest-edit-msg-window.c b/src/gtk/modest-edit-msg-window.c index d09f149..acc3095 100644 --- a/src/gtk/modest-edit-msg-window.c +++ b/src/gtk/modest-edit-msg-window.c @@ -26,13 +26,14 @@ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - +#include +#include #include "modest-edit-msg-window.h" -#include -#include -#include -#include "modest-icon-names.h" -#include +#include "modest-widget-memory.h" +#include "modest-mail-operation.h" +#include "modest-tny-platform-factory.h" +#include "modest-tny-msg-actions.h" +#include static void modest_edit_msg_window_class_init (ModestEditMsgWindowClass *klass); static void modest_edit_msg_window_init (ModestEditMsgWindow *obj); @@ -48,12 +49,12 @@ enum { typedef struct _ModestEditMsgWindowPrivate ModestEditMsgWindowPrivate; struct _ModestEditMsgWindowPrivate { - ModestConf *conf; ModestWidgetFactory *factory; + TnyPlatformFactory *fact; GtkWidget *toolbar, *menubar; GtkWidget *msg_body; - GtkWidget *to_field, *cc_field, *bcc_field, + GtkWidget *from_field, *to_field, *cc_field, *bcc_field, *subject_field; }; #define MODEST_EDIT_MSG_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ @@ -114,6 +115,7 @@ modest_edit_msg_window_init (ModestEditMsgWindow *obj) ModestEditMsgWindowPrivate *priv; priv = MODEST_EDIT_MSG_WINDOW_GET_PRIVATE(obj); + priv->fact = modest_tny_platform_factory_get_instance (); priv->factory = NULL; priv->toolbar = NULL; priv->menubar = NULL; @@ -125,10 +127,12 @@ static void save_settings (ModestEditMsgWindow *self) { ModestEditMsgWindowPrivate *priv; + ModestConf *conf; + priv = MODEST_EDIT_MSG_WINDOW_GET_PRIVATE(self); - modest_widget_memory_save_settings (priv->conf, - GTK_WIDGET(self), - "modest-edit-msg-window"); + conf = modest_tny_platform_factory_get_modest_conf_instance (priv->fact); + + modest_widget_memory_save (conf, G_OBJECT(self), "modest-edit-msg-window"); } @@ -136,9 +140,12 @@ static void restore_settings (ModestEditMsgWindow *self) { ModestEditMsgWindowPrivate *priv; + ModestConf *conf; + priv = MODEST_EDIT_MSG_WINDOW_GET_PRIVATE(self); - modest_widget_memory_restore_settings (priv->conf, GTK_WIDGET(self), - "modest-edit-msg-window"); + conf = modest_tny_platform_factory_get_modest_conf_instance (priv->fact); + + modest_widget_memory_restore (conf, G_OBJECT(self), "modest-edit-msg-window"); } @@ -156,42 +163,42 @@ on_menu_quit (ModestEditMsgWindow *self, guint action, GtkWidget *widget) /* Our menu, an array of GtkItemFactoryEntry structures that defines each menu item */ static GtkItemFactoryEntry menu_items[] = { - { "/_File", NULL, NULL, 0, "" }, + { "/_File", NULL, NULL, 0, "" ,NULL}, { "/File/_New", "N", NULL, 0, "", GTK_STOCK_NEW }, { "/File/_Open", "O", NULL, 0, "", GTK_STOCK_OPEN }, { "/File/_Save", "S", NULL, 0, "", GTK_STOCK_SAVE }, - { "/File/Save _As", NULL, NULL, 0, "" }, - { "/File/Save Draft", "S", NULL, 0, "" }, + { "/File/Save _As", NULL, NULL, 0, "", NULL} , + { "/File/Save Draft", "S", NULL, 0, "",NULL }, - { "/File/sep1", NULL, NULL, 0, "" }, + { "/File/sep1", NULL, NULL, 0, "" ,NULL }, { "/File/_Quit", "Q", on_menu_quit, 0, "", GTK_STOCK_QUIT }, - { "/_Edit", NULL, NULL, 0, "" }, + { "/_Edit", NULL, NULL, 0, "" ,NULL }, { "/Edit/_Undo", "Z", NULL, 0, "", GTK_STOCK_UNDO }, { "/Edit/_Redo", "Z", NULL, 0, "", GTK_STOCK_REDO }, - { "/File/sep1", NULL, NULL, 0, "" }, + { "/File/sep1", NULL, NULL, 0, "",NULL }, { "/Edit/Cut", "X", NULL, 0, "", GTK_STOCK_CUT }, { "/Edit/Copy", "C", NULL, 0, "", GTK_STOCK_COPY }, { "/Edit/Paste", NULL, NULL, 0, "", GTK_STOCK_PASTE}, - { "/Edit/sep1", NULL, NULL, 0, "" }, - { "/Edit/Delete", "Q", NULL, 0, "" }, - { "/Edit/Select all", "A", NULL, 0, "" }, - { "/Edit/Deselect all", "A", NULL, 0, "" }, + { "/Edit/sep1", NULL, NULL, 0, "",NULL }, + { "/Edit/Delete", "Q", NULL, 0, "" ,NULL }, + { "/Edit/Select all", "A", NULL, 0, "" ,NULL }, + { "/Edit/Deselect all", "A", NULL, 0, "",NULL }, - { "/_View", NULL, NULL, 0, "" }, - { "/View/To-field", NULL, NULL, 0, "" }, + { "/_View", NULL, NULL, 0, "",NULL }, + { "/View/To-field", NULL, NULL, 0, "",NULL }, - { "/View/Cc-field:", NULL, NULL, 0, "" }, - { "/View/Bcc-field:", NULL, NULL, 0, "" }, + { "/View/Cc-field:", NULL, NULL, 0, "",NULL }, + { "/View/Bcc-field:", NULL, NULL, 0, "",NULL }, - { "/_Insert", NULL, NULL, 0, "" }, + { "/_Insert", NULL, NULL, 0, "",NULL }, /* { "/Actions/_Reply", NULL, NULL, 0, "" }, */ /* { "/Actions/_Forward", NULL, NULL, 0, "" }, */ /* { "/Actions/_Bounce", NULL, NULL, 0, "" }, */ - { "/_Format", NULL, NULL, 0, "" } + { "/_Format", NULL, NULL, 0, "",NULL } /* { "/Options/_Accounts", NULL, on_menu_accounts,0, "" }, */ /* { "/Options/_Contacts", NULL, NULL, 0, "" }, */ @@ -232,22 +239,26 @@ menubar_new (ModestEditMsgWindow *self) static void send_mail (ModestEditMsgWindow *self) { - const gchar *from, *to, *cc, *bcc, *subject; - gchar *body; + const gchar *to, *cc, *bcc, *subject; + gchar *body, *from; ModestEditMsgWindowPrivate *priv; - + TnyTransportAccount *transport_account; + ModestMailOperation *mail_operation; + ModestAccountData *data; + GtkTextBuffer *buf; GtkTextIter b, e; priv = MODEST_EDIT_MSG_WINDOW_GET_PRIVATE(self); - - /* don't free these */ - from = "djcb@djcbsoftware.nl"; - 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)); - to = gtk_entry_get_text (GTK_ENTRY(priv->subject_field)); - + 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)); @@ -255,9 +266,45 @@ send_mail (ModestEditMsgWindow *self) body = gtk_text_buffer_get_text (buf, &b, &e, FALSE); /* free this one */ -// modest_tny_transport_actions_send_message (transport_account, -// from, to, cc, bcc, -// subject, *body, NULL); + /* 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); } @@ -319,7 +366,7 @@ toolbar_new (ModestEditMsgWindow *self) static void init_window (ModestEditMsgWindow *obj) { - GtkWidget *to_button, *cc_button, *bcc_button, *subject_label; + GtkWidget *to_button, *cc_button, *bcc_button; GtkWidget *header_table; GtkWidget *main_vbox; @@ -329,27 +376,29 @@ init_window (ModestEditMsgWindow *obj) to_button = gtk_button_new_with_label (_("To...")); cc_button = gtk_button_new_with_label (_("Cc...")); bcc_button = gtk_button_new_with_label (_("Bcc...")); - subject_label = gtk_label_new (_("Subject:")); + + priv->from_field = modest_widget_factory_get_combo_box (priv->factory, + MODEST_COMBO_BOX_TYPE_TRANSPORTS); + 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); - 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); - - header_table = gtk_table_new (4,2, FALSE); - gtk_table_attach (GTK_TABLE(header_table), to_button, 0,1,0,1, - GTK_SHRINK, 0, 0, 0); - gtk_table_attach (GTK_TABLE(header_table), cc_button, 0,1,1,2, - GTK_SHRINK, 0, 0, 0); - gtk_table_attach (GTK_TABLE(header_table), bcc_button, 0,1,2,3, - GTK_SHRINK, 0, 0, 0); - gtk_table_attach (GTK_TABLE(header_table), subject_label, 0,1,3,4, - GTK_SHRINK, 0, 0, 0); - - gtk_table_attach_defaults (GTK_TABLE(header_table), priv->to_field, 1,2,0,1); - gtk_table_attach_defaults (GTK_TABLE(header_table), priv->cc_field, 1,2,1,2); - gtk_table_attach_defaults (GTK_TABLE(header_table), priv->bcc_field, 1,2,2,3); - gtk_table_attach_defaults (GTK_TABLE(header_table), priv->subject_field,1,2,3,4); + header_table = gtk_table_new (5,2, FALSE); + + gtk_table_attach (GTK_TABLE(header_table), gtk_label_new (_("From:")), + 0,1,0,1, GTK_SHRINK, 0, 0, 0); + gtk_table_attach (GTK_TABLE(header_table), to_button, 0,1,1,2, GTK_SHRINK, 0, 0, 0); + gtk_table_attach (GTK_TABLE(header_table), cc_button, 0,1,2,3, GTK_SHRINK, 0, 0, 0); + gtk_table_attach (GTK_TABLE(header_table), bcc_button, 0,1,3,4, GTK_SHRINK, 0, 0, 0); + gtk_table_attach (GTK_TABLE(header_table), gtk_label_new (_("Subject:")), + 0,1,4,5, GTK_SHRINK, 0, 0, 0); + + gtk_table_attach_defaults (GTK_TABLE(header_table), priv->from_field, 1,2,0,1); + gtk_table_attach_defaults (GTK_TABLE(header_table), priv->to_field, 1,2,1,2); + gtk_table_attach_defaults (GTK_TABLE(header_table), priv->cc_field, 1,2,2,3); + gtk_table_attach_defaults (GTK_TABLE(header_table), priv->bcc_field, 1,2,3,4); + gtk_table_attach_defaults (GTK_TABLE(header_table), priv->subject_field,1,2,4,5); priv->msg_body = gtk_text_view_new (); @@ -376,9 +425,6 @@ modest_edit_msg_window_finalize (GObject *obj) priv = MODEST_EDIT_MSG_WINDOW_GET_PRIVATE(obj); - g_object_unref (G_OBJECT(priv->conf)); - priv->conf = NULL; - g_object_unref (G_OBJECT(priv->factory)); priv->factory = NULL; @@ -397,24 +443,19 @@ on_delete_event (GtkWidget *widget, GdkEvent *event, ModestEditMsgWindow *self) GtkWidget* -modest_edit_msg_window_new (ModestConf *conf, ModestWidgetFactory *factory, - ModestEditType type, TnyMsgIface *msg) +modest_edit_msg_window_new (ModestWidgetFactory *factory, + ModestEditType type) { GObject *obj; ModestEditMsgWindowPrivate *priv; - g_return_val_if_fail (conf, NULL); g_return_val_if_fail (factory, NULL); - g_return_val_if_fail (type >= 0 && 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); + g_return_val_if_fail (type < MODEST_EDIT_TYPE_NUM, 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 (G_OBJECT(conf)); - priv->conf = conf; - g_object_ref (factory); priv->factory = factory; @@ -428,6 +469,46 @@ modest_edit_msg_window_new (ModestConf *conf, ModestWidgetFactory *factory, g_signal_connect (G_OBJECT(obj), "delete-event", G_CALLBACK(on_delete_event), obj); - + 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, TRUE), + -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 */ +}