2 #include <glade/glade.h>
3 #include <glib/gi18n.h>
8 #endif /*HAVE_CONFIG_H*/
10 /* TODO: put in auto* */
11 #include <tny-text-buffer-stream.h>
12 #include <tny-msg-folder.h>
14 #include "../modest-ui.h"
15 #include "../modest-window-mgr.h"
16 #include "../modest-account-mgr.h"
17 #include "../modest-account-mgr.h"
18 #include "../modest-identity-mgr.h"
20 #include "../modest-tny-account-store.h"
21 #include "../modest-tny-folder-tree-view.h"
22 #include "../modest-tny-header-tree-view.h"
23 #include "../modest-tny-msg-view.h"
24 #include "../modest-tny-transport-actions.h"
25 #include "../modest-tny-store-actions.h"
27 #include "../modest-text-utils.h"
28 #include "../modest-tny-msg-actions.h"
30 #include "../modest-viewer-window.h"
32 #include "modest-ui-glade.h"
33 #include "modest-ui-message-viewer.h"
39 ModestViewerWindow *viewer_win;
45 *modest_ui_new_viewer_window (ModestUI *modest_ui, GtkWidget *msg_view, TnyMsgIface *msg, gpointer *user_data)
47 GtkWidget *top_container;
49 ViewerWinData *win_data;
52 glade_xml = glade_xml_new(MODEST_GLADE, "viewer_top_container", NULL);
56 win_data = g_malloc(sizeof(ViewerWinData));
57 win_data->modest_ui = modest_ui;
58 win_data->glade_xml = glade_xml;
60 *user_data = win_data;
62 top_container = glade_xml_get_widget(glade_xml, "viewer_top_container");
64 g_object_unref(G_OBJECT(glade_xml));
68 if (!GTK_IS_WIDGET(msg_view))
70 paned = glade_xml_get_widget(glade_xml, "vpaned3");
71 gtk_paned_add2(GTK_PANED(paned), msg_view);
72 gtk_widget_show_all(msg_view);
74 return GTK_CONTAINER(top_container);
79 close_viewer_window(GtkWidget *win, GdkEvent *event, gpointer data)
81 ModestViewerWindow *viewer_win;
82 ModestUIPrivate *priv;
83 ViewerWinData *win_data;
85 viewer_win = (ModestViewerWindow *)data;
86 win_data = modest_viewer_window_get_data(viewer_win);
87 priv = MODEST_UI_GET_PRIVATE(win_data->modest_ui);
89 modest_window_mgr_unregister(priv->modest_window_mgr, G_OBJECT(viewer_win));
90 gtk_widget_hide (GTK_WIDGET(viewer_win));
91 gtk_widget_destroy(GTK_WIDGET(viewer_win));
96 open_message_viewer_window(ModestUI *modest_ui)
98 GtkWidget *viewer_win;
99 ModestUIPrivate *priv;
101 ViewerWinData *windata;
103 GtkTreeSelection *sel;
106 GtkScrolledWindow *scroll;
107 ModestTnyHeaderTreeView *header_view;
108 TnyMsgHeaderIface *header;
109 const TnyMsgFolderIface *folder;
111 const gchar *subject, *to, *from;
116 priv = MODEST_UI_GET_PRIVATE(modest_ui);
117 /* FIXME: maybe use seperate viewer defaults? */
118 height = modest_conf_get_int (priv->modest_conf, MODEST_CONF_EDIT_WINDOW_HEIGHT, NULL);
119 width = modest_conf_get_int (priv->modest_conf, MODEST_CONF_EDIT_WINDOW_WIDTH, NULL);
121 paned = glade_xml_get_widget (priv->glade_xml,"mail_paned");
122 g_return_if_fail (paned);
124 scroll = GTK_SCROLLED_WINDOW(gtk_paned_get_child1 (GTK_PANED(paned)));
125 g_return_if_fail (scroll);
127 header_view = MODEST_TNY_HEADER_TREE_VIEW(gtk_bin_get_child (GTK_BIN(scroll)));
128 g_return_if_fail (header_view);
130 sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(header_view));
131 g_return_if_fail (sel);
133 if (!gtk_tree_selection_get_selected (sel, &model, &iter)) {
134 g_warning("nothing to display");
138 gtk_tree_model_get (model, &iter,
139 TNY_MSG_HEADER_LIST_MODEL_INSTANCE_COLUMN, &header, -1);
142 g_warning("no header");
146 folder = tny_msg_header_iface_get_folder (TNY_MSG_HEADER_IFACE(header));
148 g_warning ("cannot find folder");
152 msg = (TnyMsgIface *) tny_msg_folder_iface_get_message (TNY_MSG_FOLDER_IFACE(folder), header);
154 g_warning ("cannot find msg");
158 viewer_win = modest_viewer_window_new(modest_ui, msg);
159 windata = (ViewerWinData *)modest_viewer_window_get_data(MODEST_VIEWER_WINDOW(viewer_win));
160 g_return_if_fail(windata);
162 subject = tny_msg_header_iface_get_subject(header);
163 from = tny_msg_header_iface_get_from(header);
164 to = tny_msg_header_iface_get_to(header);
165 sent_date = tny_msg_header_iface_get_date_sent(header);
166 strftime (date_str, 100, "%c", localtime (&sent_date));
168 w = glade_xml_get_widget (windata->glade_xml, "from");
169 gtk_label_set_text(GTK_LABEL(w), from);
170 w = glade_xml_get_widget (windata->glade_xml, "to");
171 gtk_label_set_text(GTK_LABEL(w), to);
172 w = glade_xml_get_widget (windata->glade_xml, "subject");
173 gtk_label_set_text(GTK_LABEL(w), subject);
174 w = glade_xml_get_widget (windata->glade_xml, "date");
175 gtk_label_set_text(GTK_LABEL(w), date_str);
177 // g_message("new viewer win@%dx%d", width, height);
178 gtk_widget_set_usize (GTK_WIDGET(viewer_win), width, height);
179 gtk_widget_show(viewer_win);
180 modest_window_mgr_register(priv->modest_window_mgr, G_OBJECT(viewer_win), MODEST_VIEW_WINDOW, 0);
181 g_signal_connect (viewer_win, "destroy-event", G_CALLBACK(close_viewer_window), viewer_win);
182 g_signal_connect (viewer_win, "delete-event", G_CALLBACK(close_viewer_window), viewer_win);
187 on_open_message_clicked (GtkWidget *widget, gpointer user_data)
189 ModestUI *modest_ui = (ModestUI *)user_data;
191 open_message_viewer_window(modest_ui);
195 on_message_activated (GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data)
197 ModestUI *modest_ui = (ModestUI *)user_data;
199 open_message_viewer_window(modest_ui);