[evolution/tabs-rewrite: 2/2] Add EMailNotebook View



commit 2aecc9190d7e9978a40f0f0a29c4ea7a98e71117
Author: Srinivasa Ragavan <sragavan gnome org>
Date:   Mon Jul 12 16:02:25 2010 +0530

    Add EMailNotebook View

 mail/Makefile.am            |    2 +
 mail/e-mail-notebook-view.c |  292 ++++++++++++++++++++++++++++++++++++++++---
 mail/e-mail-notebook-view.h |   19 +++-
 mail/e-mail-paned-view.c    |    2 +
 mail/e-mail-reader.c        |    2 +
 5 files changed, 295 insertions(+), 22 deletions(-)
---
diff --git a/mail/Makefile.am b/mail/Makefile.am
index 0ec87b1..4ddb9cc 100644
--- a/mail/Makefile.am
+++ b/mail/Makefile.am
@@ -37,6 +37,7 @@ libevolution_mail_la_CPPFLAGS =				\
 mailinclude_HEADERS =					\
 	e-mail-view.h					\
 	e-mail-paned-view.h				\
+	e-mail-notebook-view.h				\
 	e-mail-attachment-bar.h				\
 	e-mail-backend.h				\
 	e-mail-browser.h				\
@@ -96,6 +97,7 @@ mailinclude_HEADERS =					\
 libevolution_mail_la_SOURCES =				\
 	e-mail-view.c					\
 	e-mail-paned-view.c				\
+	e-mail-notebook-view.c				\
 	e-mail-attachment-bar.c				\
 	e-mail-backend.c				\
 	e-mail-browser.c				\
diff --git a/mail/e-mail-notebook-view.c b/mail/e-mail-notebook-view.c
index 1850bbe..c15ca90 100644
--- a/mail/e-mail-notebook-view.c
+++ b/mail/e-mail-notebook-view.c
@@ -27,22 +27,31 @@
 
 #include <glib.h>
 #include <glib/gi18n.h>
-#include "e-mail-notebook-view.h"
 
+#include "mail/e-mail-reader.h"
+#include "e-mail-notebook-view.h"
+#include "e-mail-paned-view.h"
 
-G_DEFINE_TYPE (EMailNotebookView, e_mail_notebook_view, GTK_TYPE_VBOX)
+#include <shell/e-shell-window-actions.h>
 
-enum {
-	PANE_CLOSE,
-	LAST_SIGNAL
+struct _EMailNotebookViewPrivate {
+	GtkNotebook *book;
+	EMailView *current_view;
+	GHashTable *views;
 };
 
-static guint signals[LAST_SIGNAL] = { 0 };
+#define E_SHELL_WINDOW_ACTION_GROUP_MAIL(window) \
+	E_SHELL_WINDOW_ACTION_GROUP ((window), "mail")
+
+static EMailViewClass *parent_class;
+static GType mail_notebook_view_type;
 
 static void
-e_mail_notebook_view_init (EMailNotebookView  *shell)
+mail_notebook_view_init (EMailNotebookView  *shell)
 {
 	shell->priv = g_new0(EMailNotebookViewPrivate, 1);
+
+	shell->priv->views = g_hash_table_new (g_str_hash, g_str_equal);
 }
 
 static void
@@ -50,26 +59,273 @@ e_mail_notebook_view_finalize (GObject *object)
 {
 	/* EMailNotebookView *shell = (EMailNotebookView *)object; */
 
-	G_OBJECT_CLASS (e_mail_notebook_view_parent_class)->finalize (object);
+	G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+mail_notebook_view_constructed (GObject *object)
+{
+	GtkWidget *widget, *container;
+	EMailNotebookViewPrivate *priv;
+
+	priv = E_MAIL_NOTEBOOK_VIEW (object)->priv;
+
+	container = GTK_WIDGET(object);
+
+	widget = gtk_notebook_new ();
+	priv->book = (GtkNotebook *)widget;
+	gtk_widget_show (widget);
+	gtk_box_pack_start (GTK_BOX(container), widget, TRUE, TRUE, 0);
+
+	priv->current_view = e_mail_paned_view_new (E_MAIL_VIEW(object)->content);
+	gtk_widget_show (priv->current_view);
+	gtk_notebook_append_page (priv->book, priv->current_view, gtk_label_new ("Please select a folder"));
+	
 }
 
 static void
-e_mail_notebook_view_class_init (EMailNotebookViewClass *klass)
+mail_notebook_view_class_init (EMailViewClass *klass)
 {
 	GObjectClass * object_class = G_OBJECT_CLASS (klass);
 
-	e_mail_notebook_view_parent_class = g_type_class_peek_parent (klass);
+	parent_class = g_type_class_peek_parent (klass);
+	object_class->constructed = mail_notebook_view_constructed;
+	
 	object_class->finalize = e_mail_notebook_view_finalize;
 
-	signals[PANE_CLOSE] =
-		g_signal_new ("pane-close",
-			      G_OBJECT_CLASS_TYPE (object_class),
-			      G_SIGNAL_RUN_FIRST,
-			      G_STRUCT_OFFSET (EMailNotebookViewClass , view_close),
-			      NULL, NULL,
-			      g_cclosure_marshal_VOID__VOID,
-			      G_TYPE_NONE, 0);
+	klass->get_searchbar = e_mail_notebook_view_get_searchbar;
+	klass->set_search_strings = e_mail_notebook_view_set_search_strings;
+	klass->get_view_instance = e_mail_notebook_view_get_view_instance;
+	klass->update_view_instance = e_mail_notebook_view_update_view_instance;
+
 
 }
 
 
+
+GtkWidget *
+e_mail_notebook_view_new (EShellContent *content)
+{
+	g_return_val_if_fail (E_IS_SHELL_CONTENT (content), NULL);
+
+	return g_object_new (
+		E_MAIL_NOTEBOOK_VIEW_TYPE,
+		"shell-content", content, NULL);
+}
+
+static GtkActionGroup *
+mail_notebook_view_get_action_group (EMailReader *reader)
+{
+	EMailNotebookViewPrivate *priv = E_MAIL_NOTEBOOK_VIEW (reader)->priv;
+	EShellContent *shell_content;
+	EShellWindow *shell_window;
+	EShellView *shell_view;
+
+	shell_content = E_MAIL_VIEW (reader)->content;
+	shell_view = e_shell_content_get_shell_view (shell_content);
+	shell_window = e_shell_view_get_shell_window (shell_view);
+
+	return E_SHELL_WINDOW_ACTION_GROUP_MAIL (shell_window);	
+/*	
+	if (!priv->current_view)
+		return NULL;
+
+	return e_mail_reader_get_action_group (E_MAIL_READER(priv->current_view));*/
+}
+
+static EMFormatHTML *
+mail_notebook_view_get_formatter (EMailReader *reader)
+{
+	EMailNotebookViewPrivate *priv = E_MAIL_NOTEBOOK_VIEW (reader)->priv;
+	
+	if (!priv->current_view)
+		return NULL;
+
+	return e_mail_reader_get_formatter (E_MAIL_READER(priv->current_view));
+}
+
+static gboolean
+mail_notebook_view_get_hide_deleted (EMailReader *reader)
+{
+	EMailNotebookViewPrivate *priv = E_MAIL_NOTEBOOK_VIEW (reader)->priv;
+	
+	if (!priv->current_view)
+		return FALSE;
+
+	return e_mail_reader_get_hide_deleted (E_MAIL_READER(priv->current_view));
+}
+
+static GtkWidget *
+mail_notebook_view_get_message_list (EMailReader *reader)
+{
+	EMailNotebookViewPrivate *priv = E_MAIL_NOTEBOOK_VIEW (reader)->priv;
+	
+	if (!priv->current_view)
+		return NULL;
+
+	return e_mail_reader_get_message_list (E_MAIL_READER(priv->current_view));	
+}
+
+static GtkMenu *
+mail_notebook_view_get_popup_menu (EMailReader *reader)
+{
+	EMailNotebookViewPrivate *priv = E_MAIL_NOTEBOOK_VIEW (reader)->priv;
+	
+	if (!priv->current_view)
+		return NULL;
+
+	return e_mail_reader_get_popup_menu (E_MAIL_READER(priv->current_view));	
+}
+
+static EShellBackend *
+mail_notebook_view_get_shell_backend (EMailReader *reader)
+{
+	EShellContent *shell_content;
+	EShellView *shell_view;
+
+	shell_content = E_MAIL_VIEW (reader)->content;
+	shell_view = e_shell_content_get_shell_view (shell_content);
+
+	return e_shell_view_get_shell_backend (shell_view);
+}
+
+static GtkWindow *
+mail_notebook_view_get_window (EMailReader *reader)
+{
+	EShellContent *shell_content;
+	EShellWindow *shell_window;
+	EShellView *shell_view;
+
+	shell_content = E_MAIL_VIEW (reader)->content;
+	shell_view = e_shell_content_get_shell_view (shell_content);
+	shell_window = e_shell_view_get_shell_window (shell_view);
+
+	return GTK_WINDOW (shell_window);
+}
+
+static void
+mail_notebook_view_set_folder (EMailReader *reader,
+                               CamelFolder *folder,
+                               const gchar *folder_uri)
+{
+	EMailNotebookViewPrivate *priv = E_MAIL_NOTEBOOK_VIEW (reader)->priv;
+	GtkWidget *new_view;
+
+	if (!folder_uri)
+		return;
+
+	new_view = g_hash_table_lookup (priv->views, folder_uri);
+	if (new_view) {
+		priv->current_view = (EMailView *)new_view;
+		return;
+	}
+
+	if (folder || folder_uri) {
+		new_view = e_mail_paned_view_new (E_MAIL_VIEW(reader)->content);
+		gtk_widget_show (new_view);
+		gtk_notebook_append_page (priv->book, new_view, gtk_label_new (camel_folder_get_full_name(folder)));
+		e_mail_reader_set_folder (E_MAIL_READER(new_view), folder, folder_uri);
+	}
+}
+
+static void
+mail_notebook_view_show_search_bar (EMailReader *reader)
+{
+	EMailNotebookViewPrivate *priv = E_MAIL_NOTEBOOK_VIEW (reader)->priv;
+		
+	e_mail_reader_show_search_bar (E_MAIL_READER(priv->current_view));	
+}
+
+EShellSearchbar *
+e_mail_notebook_view_get_searchbar (EMailView *view)
+{
+	EShellView *shell_view;
+	EShellContent *shell_content;
+	GtkWidget *widget;
+
+	g_return_val_if_fail (
+		E_IS_MAIL_NOTEBOOK_VIEW (view), NULL);
+
+	shell_content = E_MAIL_VIEW (view)->content;
+	shell_view = e_shell_content_get_shell_view (shell_content);
+	widget = e_shell_view_get_searchbar (shell_view);
+
+	return E_SHELL_SEARCHBAR (widget);	
+/*	
+	if (!E_MAIL_NOTEBOOK_VIEW(view)->priv->current_view)
+		return NULL;
+	return e_mail_view_get_searchbar (E_MAIL_NOTEBOOK_VIEW(view)->priv->current_view); */
+}
+
+void
+e_mail_notebook_view_set_search_strings (EMailView *view,
+					 GSList *search_strings)
+{
+	e_mail_view_set_search_strings (E_MAIL_NOTEBOOK_VIEW (view)->priv->current_view, search_strings);
+}
+
+GalViewInstance *
+e_mail_notebook_view_get_view_instance (EMailView *view)
+{
+	if (!E_MAIL_NOTEBOOK_VIEW(view)->priv->current_view)
+		return NULL;
+
+	return e_mail_view_get_view_instance (E_MAIL_NOTEBOOK_VIEW (view)->priv->current_view);
+}
+
+void
+e_mail_notebook_view_update_view_instance (EMailView *view)
+{
+	e_mail_view_update_view_instance (E_MAIL_NOTEBOOK_VIEW (view)->priv->current_view);
+}
+
+static void
+mail_notebook_view_reader_init (EMailReaderIface *iface)
+{
+	iface->get_action_group = mail_notebook_view_get_action_group;
+	iface->get_formatter = mail_notebook_view_get_formatter;
+	iface->get_hide_deleted = mail_notebook_view_get_hide_deleted;
+	iface->get_message_list = mail_notebook_view_get_message_list;
+	iface->get_popup_menu = mail_notebook_view_get_popup_menu;
+	iface->get_shell_backend = mail_notebook_view_get_shell_backend;
+	iface->get_window = mail_notebook_view_get_window;
+	iface->set_folder = mail_notebook_view_set_folder;
+	iface->show_search_bar = mail_notebook_view_show_search_bar;
+}
+
+GType
+e_mail_notebook_view_get_type (void)
+{
+	return mail_notebook_view_type;
+}
+
+void
+e_mail_notebook_view_register_type (GTypeModule *type_module)
+{
+	static const GTypeInfo type_info = {
+		sizeof (EMailNotebookViewClass),
+		(GBaseInitFunc) NULL,
+		(GBaseFinalizeFunc) NULL,
+		(GClassInitFunc) mail_notebook_view_class_init,
+		(GClassFinalizeFunc) NULL,
+		NULL,  /* class_data */
+		sizeof (EMailNotebookView),
+		0,     /* n_preallocs */
+		(GInstanceInitFunc) mail_notebook_view_init,
+		NULL   /* value_table */
+	};
+
+	static const GInterfaceInfo reader_info = {
+		(GInterfaceInitFunc) mail_notebook_view_reader_init,
+		(GInterfaceFinalizeFunc) NULL,
+		NULL  /* interface_data */
+	};
+
+	mail_notebook_view_type = g_type_module_register_type (
+		type_module, E_MAIL_VIEW_TYPE,
+		"EMailNotebookView", &type_info, 0);
+
+	g_type_module_add_interface (
+		type_module, mail_notebook_view_type,
+		E_TYPE_MAIL_READER, &reader_info);
+}
diff --git a/mail/e-mail-notebook-view.h b/mail/e-mail-notebook-view.h
index 6dfd3c6..a335e15 100644
--- a/mail/e-mail-notebook-view.h
+++ b/mail/e-mail-notebook-view.h
@@ -25,12 +25,14 @@
 
 #include <gtk/gtk.h>
 #include "e-mail-view.h"
+#include <shell/e-shell-searchbar.h>
+#include "widgets/menus/gal-view-instance.h"
 
 #define E_MAIL_NOTEBOOK_VIEW_TYPE        (e_mail_notebook_view_get_type ())
-#define E_MAIL_NOTEBOOK_VIEW(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), E_MAIL_NOTEBOOK_VIEW_TYPE, MailFolderView))
-#define E_MAIL_NOTEBOOK_VIEW_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST((k), E_MAIL_NOTEBOOK_VIEW_TYPE, MailFolderViewClass))
-#define IS_E_MAIL_NOTEBOOK_VIEW(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_MAIL_NOTEBOOK_VIEW_TYPE))
-#define IS_E_MAIL_NOTEBOOK_VIEW_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_MAIL_NOTEBOOK_VIEW_TYPE))
+#define E_MAIL_NOTEBOOK_VIEW(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), E_MAIL_NOTEBOOK_VIEW_TYPE, EMailNotebookView))
+#define E_MAIL_NOTEBOOK_VIEW_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST((k), E_MAIL_NOTEBOOK_VIEW_TYPE, EMailNotebookViewClass))
+#define E_IS_MAIL_NOTEBOOK_VIEW(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_MAIL_NOTEBOOK_VIEW_TYPE))
+#define E_IS_MAIL_NOTEBOOK_VIEW_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_MAIL_NOTEBOOK_VIEW_TYPE))
 #define E_MAIL_NOTEBOOK_VIEW_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), E_MAIL_NOTEBOOK_VIEW_TYPE, EMailNotebookViewClass))
 
 
@@ -47,4 +49,13 @@ typedef struct _EMailNotebookViewClass {
 
 } EMailNotebookViewClass;
 
+GType e_mail_notebook_view_get_type (void);
+void e_mail_notebook_view_register_type (GTypeModule *type_module);
+GtkWidget * e_mail_notebook_view_new (EShellContent *content);
+
+EShellSearchbar * e_mail_notebook_view_get_searchbar (EMailView *view);
+void e_mail_notebook_view_set_search_strings (EMailView *view, GSList *search_strings);
+GalViewInstance * e_mail_notebook_view_get_view_instance (EMailView *view);
+void e_mail_notebook_view_update_view_instance (EMailView *view);
+
 #endif
diff --git a/mail/e-mail-paned-view.c b/mail/e-mail-paned-view.c
index a1688d6..365f6c9 100644
--- a/mail/e-mail-paned-view.c
+++ b/mail/e-mail-paned-view.c
@@ -586,6 +586,8 @@ mail_paned_view_constructed (GObject *object)
 	web_view = em_format_html_get_web_view (
 		EM_FORMAT_HTML (priv->formatter));
 
+	e_mail_reader_init (E_MAIL_READER(object));
+
 	/* Build content widgets. */
 
 	container = GTK_WIDGET (object);
diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c
index abfbf3b..937726c 100644
--- a/mail/e-mail-reader.c
+++ b/mail/e-mail-reader.c
@@ -2077,6 +2077,7 @@ mail_reader_set_folder (EMailReader *reader,
 
 	priv = E_MAIL_READER_GET_PRIVATE (reader);
 
+	printf("PRIV %p\n", priv);
 	formatter = e_mail_reader_get_formatter (reader);
 	message_list = e_mail_reader_get_message_list (reader);
 
@@ -2603,6 +2604,7 @@ e_mail_reader_init (EMailReader *reader)
 		menu_tool_action, "activate",
 		G_CALLBACK (action_mail_forward_cb), reader);
 
+	if (action_group) {
 	gtk_action_group_add_action_with_accel (
 		action_group, GTK_ACTION (menu_tool_action), "<Control>f");
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]