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.
32 #include <glade/glade.h>
33 #include <glib/gi18n.h>
38 #endif /*HAVE_CONFIG_H*/
40 /* TODO: put in auto* */
41 #include <tny-text-buffer-stream.h>
42 #include <tny-msg-folder.h>
44 #include "../modest-ui.h"
45 #include "../modest-window-mgr.h"
46 #include "../modest-account-mgr.h"
47 #include "../modest-account-mgr.h"
48 #include "../modest-identity-mgr.h"
50 #include "../modest-tny-account-store.h"
51 #include "../widgets/modest-folder-view.h"
52 #include "../widgets/modest-header-view.h"
53 #include "../widgets/modest-msg-view.h"
54 #include "../modest-tny-transport-actions.h"
55 #include "../modest-tny-store-actions.h"
57 #include "../modest-text-utils.h"
58 #include "../modest-tny-msg-actions.h"
60 #include "../modest-viewer-window.h"
62 #include "modest-ui-glade.h"
63 #include "modest-ui-message-viewer.h"
69 ModestViewerWindow *viewer_win;
75 *modest_ui_new_viewer_window (ModestUI *modest_ui, GtkWidget *msg_view, TnyMsgIface *msg, gpointer *user_data)
77 GtkWidget *top_container;
79 ViewerWinData *win_data;
82 glade_xml = glade_xml_new(MODEST_GLADE, "viewer_top_container", NULL);
86 win_data = g_malloc(sizeof(ViewerWinData));
87 win_data->modest_ui = modest_ui;
88 win_data->glade_xml = glade_xml;
90 *user_data = win_data;
92 top_container = glade_xml_get_widget(glade_xml, "viewer_top_container");
94 g_object_unref(G_OBJECT(glade_xml));
98 if (!GTK_IS_WIDGET(msg_view))
100 paned = glade_xml_get_widget(glade_xml, "vpaned3");
101 gtk_paned_add2(GTK_PANED(paned), msg_view);
102 gtk_widget_show_all(msg_view);
104 return GTK_CONTAINER(top_container);
109 close_viewer_window(GtkWidget *win, GdkEvent *event, gpointer data)
111 ModestViewerWindow *viewer_win;
112 ModestUIPrivate *priv;
113 ViewerWinData *win_data;
115 viewer_win = (ModestViewerWindow *)data;
116 win_data = modest_viewer_window_get_data(viewer_win);
117 priv = MODEST_UI_GET_PRIVATE(win_data->modest_ui);
119 modest_window_mgr_unregister(priv->modest_window_mgr, G_OBJECT(viewer_win));
120 gtk_widget_hide (GTK_WIDGET(viewer_win));
121 gtk_widget_destroy(GTK_WIDGET(viewer_win));
126 open_message_viewer_window(ModestUI *modest_ui)
128 GtkWidget *viewer_win;
129 ModestUIPrivate *priv;
131 ViewerWinData *windata;
133 GtkTreeSelection *sel;
136 GtkScrolledWindow *scroll;
137 ModestHeaderView *header_view;
138 TnyMsgHeaderIface *header;
139 const TnyMsgFolderIface *folder;
141 const gchar *subject, *to, *from;
146 priv = MODEST_UI_GET_PRIVATE(modest_ui);
147 /* FIXME: maybe use seperate viewer defaults? */
148 height = modest_conf_get_int (priv->modest_conf, MODEST_EDIT_WINDOW_HEIGHT, NULL);
149 width = modest_conf_get_int (priv->modest_conf, MODEST_EDIT_WINDOW_WIDTH, NULL);
151 paned = glade_xml_get_widget (priv->glade_xml,"mail_paned");
152 g_return_if_fail (paned);
154 scroll = GTK_SCROLLED_WINDOW(gtk_paned_get_child1 (GTK_PANED(paned)));
155 g_return_if_fail (scroll);
157 header_view = MODEST_HEADER_VIEW(gtk_bin_get_child (GTK_BIN(scroll)));
158 g_return_if_fail (header_view);
160 sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(header_view));
161 g_return_if_fail (sel);
163 if (!gtk_tree_selection_get_selected (sel, &model, &iter)) {
164 g_warning("nothing to display");
168 gtk_tree_model_get (model, &iter,
169 TNY_MSG_HEADER_LIST_MODEL_INSTANCE_COLUMN, &header, -1);
172 g_warning("no header");
176 folder = tny_msg_header_iface_get_folder (TNY_MSG_HEADER_IFACE(header));
178 g_warning ("cannot find folder");
182 msg = (TnyMsgIface *) tny_msg_folder_iface_get_message (TNY_MSG_FOLDER_IFACE(folder), header);
184 g_warning ("cannot find msg");
188 viewer_win = modest_viewer_window_new(modest_ui, msg);
189 windata = (ViewerWinData *)modest_viewer_window_get_data(MODEST_VIEWER_WINDOW(viewer_win));
190 g_return_if_fail(windata);
192 subject = tny_msg_header_iface_get_subject(header);
193 from = tny_msg_header_iface_get_from(header);
194 to = tny_msg_header_iface_get_to(header);
195 sent_date = tny_msg_header_iface_get_date_sent(header);
196 strftime (date_str, 100, "%c", localtime (&sent_date));
198 w = glade_xml_get_widget (windata->glade_xml, "from");
199 gtk_label_set_text(GTK_LABEL(w), from);
200 w = glade_xml_get_widget (windata->glade_xml, "to");
201 gtk_label_set_text(GTK_LABEL(w), to);
202 w = glade_xml_get_widget (windata->glade_xml, "subject");
203 gtk_label_set_text(GTK_LABEL(w), subject);
204 w = glade_xml_get_widget (windata->glade_xml, "date");
205 gtk_label_set_text(GTK_LABEL(w), date_str);
207 // g_message("new viewer win@%dx%d", width, height);
208 gtk_widget_set_usize (GTK_WIDGET(viewer_win), width, height);
209 gtk_widget_show(viewer_win);
210 modest_window_mgr_register(priv->modest_window_mgr, G_OBJECT(viewer_win), MODEST_VIEW_WINDOW, 0);
211 g_signal_connect (viewer_win, "destroy-event", G_CALLBACK(close_viewer_window), viewer_win);
212 g_signal_connect (viewer_win, "delete-event", G_CALLBACK(close_viewer_window), viewer_win);
217 on_open_message_clicked (GtkWidget *widget, gpointer user_data)
219 ModestUI *modest_ui = (ModestUI *)user_data;
221 open_message_viewer_window(modest_ui);
225 on_message_activated (GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data)
227 ModestUI *modest_ui = (ModestUI *)user_data;
229 open_message_viewer_window(modest_ui);