aboutsummaryrefslogtreecommitdiffstats
path: root/mail/em-message-browser.c
diff options
context:
space:
mode:
Diffstat (limited to 'mail/em-message-browser.c')
-rw-r--r--mail/em-message-browser.c171
1 files changed, 171 insertions, 0 deletions
diff --git a/mail/em-message-browser.c b/mail/em-message-browser.c
new file mode 100644
index 0000000000..503ebef9e5
--- /dev/null
+++ b/mail/em-message-browser.c
@@ -0,0 +1,171 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Authors: Michael Zucchi <notzed@ximian.com>
+ *
+ * Copyright 2003 Ximian, Inc. (www.ximian.com)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <gtk/gtkscrolledwindow.h>
+#include <gtk/gtkbutton.h>
+
+#include <camel/camel-folder.h>
+
+#include <bonobo/bonobo-main.h>
+#include <bonobo/bonobo-object.h>
+#include <bonobo/bonobo-window.h>
+#include <bonobo/bonobo-generic-factory.h>
+#include <bonobo/bonobo-ui-component.h>
+#include <bonobo/bonobo-ui-util.h>
+
+#include "em-format-html-display.h"
+#include "em-message-browser.h"
+
+#include "evolution-shell-component-utils.h" /* Pixmap stuff, sigh */
+
+struct _EMMessageBrowserPrivate {
+ GtkWidget *preview; /* container for message display */
+};
+
+static void emmb_set_message(EMFolderView *emfv, const char *uid);
+static void emmb_activate(EMFolderView *emfv, BonoboUIComponent *uic, int state);
+
+static EMFolderViewClass *emmb_parent;
+
+static void
+emmb_init(GObject *o)
+{
+ EMMessageBrowser *emmb = (EMMessageBrowser *)o;
+ struct _EMMessageBrowserPrivate *p;
+
+ p = emmb->priv = g_malloc0(sizeof(struct _EMMessageBrowserPrivate));
+
+ ((EMFolderView *)emmb)->preview_active = TRUE;
+
+ g_slist_free(emmb->view.ui_files);
+ emmb->view.ui_files = g_slist_append(NULL, EVOLUTION_UIDIR "/evolution-mail-message.xml");
+ emmb->view.ui_files = g_slist_append(emmb->view.ui_files, EVOLUTION_UIDIR "/evolution-mail-messagedisplay.xml");
+
+ /* currently: just use a scrolledwindow for preview widget */
+ p->preview = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy((GtkScrolledWindow *)p->preview, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type((GtkScrolledWindow *)p->preview, GTK_SHADOW_IN);
+ gtk_widget_show(p->preview);
+
+ gtk_container_add((GtkContainer *)p->preview, (GtkWidget *)emmb->view.preview->formathtml.html);
+ gtk_widget_show((GtkWidget *)emmb->view.preview->formathtml.html);
+
+ gtk_widget_show(p->preview);
+
+ gtk_box_pack_start_defaults((GtkBox *)emmb, p->preview);
+}
+
+static void
+emmb_finalise(GObject *o)
+{
+ EMMessageBrowser *emmb = (EMMessageBrowser *)o;
+
+ g_free(emmb->priv);
+ ((GObjectClass *)emmb_parent)->finalize(o);
+}
+
+static void
+emmb_class_init(GObjectClass *klass)
+{
+ klass->finalize = emmb_finalise;
+ ((EMFolderViewClass *)klass)->set_message = emmb_set_message;
+ ((EMFolderViewClass *)klass)->activate = emmb_activate;
+}
+
+GType
+em_message_browser_get_type(void)
+{
+ static GType type = 0;
+
+ if (type == 0) {
+ static const GTypeInfo info = {
+ sizeof(EMMessageBrowserClass),
+ NULL, NULL,
+ (GClassInitFunc)emmb_class_init,
+ NULL, NULL,
+ sizeof(EMMessageBrowser), 0,
+ (GInstanceInitFunc)emmb_init
+ };
+ emmb_parent = g_type_class_ref(em_folder_view_get_type());
+ type = g_type_register_static(em_folder_view_get_type(), "EMMessageBrowser", &info, 0);
+ }
+
+ return type;
+}
+
+GtkWidget *em_message_browser_new(void)
+{
+ EMMessageBrowser *emmb = g_object_new(em_message_browser_get_type(), 0);
+
+ return (GtkWidget *)emmb;
+}
+
+GtkWidget *em_message_browser_window_new(void)
+{
+ EMMessageBrowser *emmb;
+ BonoboUIContainer *uicont;
+ BonoboUIComponent *uic;
+
+ emmb = (EMMessageBrowser *)em_message_browser_new();
+ gtk_widget_show((GtkWidget *)emmb);
+ /* FIXME: title set elsewhere? */
+ emmb->window = g_object_new(bonobo_window_get_type(), "title", "Ximian Evolution", NULL);
+ bonobo_window_set_contents((BonoboWindow *)emmb->window, (GtkWidget *)emmb);
+
+ uicont = bonobo_window_get_ui_container((BonoboWindow *)emmb->window);
+ uic = bonobo_ui_component_new_default();
+ bonobo_ui_component_set_container(uic, BONOBO_OBJREF(uicont), NULL);
+
+ em_folder_view_activate((EMFolderView *)emmb, uic, TRUE);
+
+ /* FIXME: keep track of size changes for next instantation */
+ gtk_window_set_default_size((GtkWindow *)emmb->window, 600, 400);
+
+ /* cleanup? */
+
+ return (GtkWidget *)emmb;
+}
+
+/* ********************************************************************** */
+
+static void
+emmb_set_message(EMFolderView *emfv, const char *uid)
+{
+ emmb_parent->set_message(emfv, uid);
+
+ /* Well we don't know if it got displayed (yet) ... but whatever ... */
+ camel_folder_set_message_flags(emfv->folder, uid, CAMEL_MESSAGE_SEEN, CAMEL_MESSAGE_SEEN);
+}
+
+static void
+emmb_activate(EMFolderView *emfv, BonoboUIComponent *uic, int state)
+{
+ emmb_parent->activate(emfv, uic, state);
+
+ if (state)
+ bonobo_ui_component_set_prop(uic, "/commands/EditPaste", "sensitive", "0", NULL);
+}