aboutsummaryrefslogtreecommitdiffstats
path: root/mail/e-mail-notebook-view.c
diff options
context:
space:
mode:
authorSrinivasa Ragavan <sragavan@gnome.org>2010-07-14 16:17:41 +0800
committerMatthew Barnes <mbarnes@redhat.com>2010-07-26 09:29:59 +0800
commitb9564c4d01c08c976e01256b308e3f2891c6e164 (patch)
tree90999088a74fb9f7f7d4064af0a0431b412ca85c /mail/e-mail-notebook-view.c
parent75de89ef04f0bd69fe5d33919e281bdb8c30bd9e (diff)
downloadgsoc2013-evolution-b9564c4d01c08c976e01256b308e3f2891c6e164.tar
gsoc2013-evolution-b9564c4d01c08c976e01256b308e3f2891c6e164.tar.gz
gsoc2013-evolution-b9564c4d01c08c976e01256b308e3f2891c6e164.tar.bz2
gsoc2013-evolution-b9564c4d01c08c976e01256b308e3f2891c6e164.tar.lz
gsoc2013-evolution-b9564c4d01c08c976e01256b308e3f2891c6e164.tar.xz
gsoc2013-evolution-b9564c4d01c08c976e01256b308e3f2891c6e164.tar.zst
gsoc2013-evolution-b9564c4d01c08c976e01256b308e3f2891c6e164.zip
Add folder pane for tabbed browser.
Diffstat (limited to 'mail/e-mail-notebook-view.c')
-rw-r--r--mail/e-mail-notebook-view.c220
1 files changed, 203 insertions, 17 deletions
diff --git a/mail/e-mail-notebook-view.c b/mail/e-mail-notebook-view.c
index 5fa6c6844f..cdf21bc702 100644
--- a/mail/e-mail-notebook-view.c
+++ b/mail/e-mail-notebook-view.c
@@ -29,8 +29,10 @@
#include <glib/gi18n.h>
#include "mail/e-mail-reader.h"
+#include "mail/message-list.h"
#include "e-mail-notebook-view.h"
-#include "e-mail-paned-view.h"
+#include "e-mail-folder-pane.h"
+#include "e-mail-message-pane.h"
#include <shell/e-shell-window-actions.h>
@@ -40,6 +42,11 @@ struct _EMailNotebookViewPrivate {
GHashTable *views;
};
+enum {
+ PROP_0,
+ PROP_GROUP_BY_THREADS,
+};
+
#define E_SHELL_WINDOW_ACTION_GROUP_MAIL(window) \
E_SHELL_WINDOW_ACTION_GROUP ((window), "mail")
@@ -66,10 +73,14 @@ static void
mnv_page_changed (GtkNotebook *book, GtkNotebookPage *page,
guint page_num, EMailNotebookView *view)
{
- EMailView *mview = gtk_notebook_get_nth_page (book, page_num);
+ EMailView *mview = (EMailView *)gtk_notebook_get_nth_page (book, page_num);
view->priv->current_view = mview;
+ /* For EMailReader related changes to EShellView*/
g_signal_emit_by_name (view, "changed");
+ /* For EMailShellContent related changes */
+ g_signal_emit_by_name (view, "view-changed");
+
}
static void
@@ -89,19 +100,58 @@ mail_notebook_view_constructed (GObject *object)
g_signal_connect (widget, "switch-page", G_CALLBACK(mnv_page_changed), object);
- 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"));
+ priv->current_view = (EMailView *)e_mail_folder_pane_new (E_MAIL_VIEW(object)->content);
+ e_mail_paned_view_set_preview_visible ((EMailPanedView *)priv->current_view, FALSE);
+ gtk_widget_show ((GtkWidget *)priv->current_view);
+ gtk_notebook_append_page (priv->book, (GtkWidget *)priv->current_view, gtk_label_new ("Please select a folder"));
}
static void
+mail_notebook_view_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ switch (property_id) {
+ case PROP_GROUP_BY_THREADS:
+ e_mail_reader_set_group_by_threads (
+ E_MAIL_READER(E_MAIL_NOTEBOOK_VIEW(object)->priv->current_view),
+ g_value_get_boolean (value));
+ return;
+ }
+
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+mail_notebook_view_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ switch (property_id) {
+ case PROP_GROUP_BY_THREADS:
+ g_value_set_boolean (
+ value,
+ e_mail_reader_get_group_by_threads (
+ E_MAIL_READER(E_MAIL_NOTEBOOK_VIEW(object)->priv->current_view)));
+ return;
+
+ }
+
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
mail_notebook_view_class_init (EMailViewClass *klass)
{
GObjectClass * object_class = G_OBJECT_CLASS (klass);
parent_class = g_type_class_peek_parent (klass);
object_class->constructed = mail_notebook_view_constructed;
+ object_class->set_property = mail_notebook_view_set_property;
+ object_class->get_property = mail_notebook_view_get_property;
object_class->finalize = e_mail_notebook_view_finalize;
@@ -109,8 +159,41 @@ mail_notebook_view_class_init (EMailViewClass *klass)
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;
-
-
+ klass->set_orientation = e_mail_notebook_view_set_orientation;
+ klass->get_orientation = e_mail_notebook_view_get_orientation;
+ klass->set_show_deleted = e_mail_notebook_view_set_show_deleted;
+ klass->get_show_deleted = e_mail_notebook_view_get_show_deleted;
+ klass->set_preview_visible = e_mail_notebook_view_set_preview_visible;
+ klass->get_preview_visible = e_mail_notebook_view_get_preview_visible;
+
+ /* Inherited from EMailReader */
+ g_object_class_override_property (
+ object_class,
+ PROP_GROUP_BY_THREADS,
+ "group-by-threads");
+/*
+ g_object_class_install_property (
+ object_class,
+ PROP_PREVIEW_VISIBLE,
+ g_param_spec_boolean (
+ "preview-visible",
+ "Preview is Visible",
+ "Whether the preview pane is visible",
+ TRUE,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_SHOW_DELETED,
+ g_param_spec_boolean (
+ "show-deleted",
+ "Show Deleted",
+ NULL,
+ FALSE,
+ G_PARAM_READWRITE));
+
+ g_object_class_override_property (
+ object_class, PROP_ORIENTATION, "orientation"); */
}
@@ -231,6 +314,8 @@ emnv_get_page_num (EMailNotebookView *view,
}
g_warn_if_reached ();
+
+ return;
}
static void
@@ -246,6 +331,38 @@ reconnect_folder_loaded_event (EMailReader *child, EMailReader *parent)
}
static void
+mail_netbook_view_open_mail (EMailView *view, const char *uid, EMailNotebookView *nview)
+{
+ const gchar *folder_uri;
+ CamelFolder *folder;
+ EMailMessagePane *pane = e_mail_message_pane_new (E_MAIL_VIEW(nview)->content);
+ int page;
+ EMailNotebookViewPrivate *priv = E_MAIL_NOTEBOOK_VIEW (nview)->priv;
+
+
+ gtk_widget_show (pane);
+ folder = e_mail_reader_get_folder (E_MAIL_READER(view));
+ folder_uri = e_mail_reader_get_folder_uri (E_MAIL_READER(view));
+
+ page = gtk_notebook_append_page (priv->book, pane, gtk_label_new (_("Mail")));
+ gtk_notebook_set_current_page (priv->book, page);
+
+ g_signal_connect ( E_MAIL_READER(pane), "changed",
+ G_CALLBACK (reconnect_changed_event),
+ nview);
+ g_signal_connect ( E_MAIL_READER (pane), "folder-loaded",
+ G_CALLBACK (reconnect_folder_loaded_event),
+ nview);
+ e_mail_reader_set_folder (
+ E_MAIL_READER (pane), folder, folder_uri);
+ e_mail_reader_set_group_by_threads (
+ E_MAIL_READER (pane),
+ e_mail_reader_get_group_by_threads (E_MAIL_READER(view)));
+
+ e_mail_reader_set_message (E_MAIL_READER (pane), uid);
+}
+
+static void
mail_notebook_view_set_folder (EMailReader *reader,
CamelFolder *folder,
const gchar *folder_uri)
@@ -266,20 +383,25 @@ mail_notebook_view_set_folder (EMailReader *reader,
if (folder || folder_uri) {
int page;
-
- new_view = e_mail_paned_view_new (E_MAIL_VIEW(reader)->content);
- priv->current_view = (EMailView *)new_view;
- gtk_widget_show (new_view);
- page = 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);
- gtk_notebook_set_current_page (priv->book, page);
- g_hash_table_insert (priv->views, g_strdup(folder_uri), new_view);
- g_signal_connect ( E_MAIL_READER(new_view), "changed",
+
+ if (g_hash_table_size (priv->views) != 0) {
+ priv->current_view = e_mail_folder_pane_new (E_MAIL_VIEW(reader)->content);
+ gtk_widget_show (priv->current_view);
+ page = gtk_notebook_append_page (priv->book, priv->current_view, gtk_label_new (camel_folder_get_full_name(folder)));
+ gtk_notebook_set_current_page (priv->book, page);
+ } else
+ gtk_notebook_set_tab_label (priv->book, priv->current_view, gtk_label_new (camel_folder_get_full_name(folder)));
+
+ e_mail_reader_set_folder (E_MAIL_READER(priv->current_view), folder, folder_uri);
+ g_hash_table_insert (priv->views, g_strdup(folder_uri), priv->current_view);
+ g_signal_connect ( E_MAIL_READER(priv->current_view), "changed",
G_CALLBACK (reconnect_changed_event),
reader);
- g_signal_connect ( E_MAIL_READER (new_view), "folder-loaded",
+ g_signal_connect ( E_MAIL_READER (priv->current_view), "folder-loaded",
G_CALLBACK (reconnect_folder_loaded_event),
reader);
+ g_signal_connect ( priv->current_view, "open-mail",
+ G_CALLBACK (mail_netbook_view_open_mail), reader);
}
}
@@ -312,6 +434,17 @@ e_mail_notebook_view_get_searchbar (EMailView *view)
return e_mail_view_get_searchbar (E_MAIL_NOTEBOOK_VIEW(view)->priv->current_view); */
}
+static void
+mail_notebook_view_open_selected_mail (EMailReader *reader)
+{
+ EMailNotebookViewPrivate *priv = E_MAIL_NOTEBOOK_VIEW (reader)->priv;
+
+ if (!priv->current_view)
+ return ;
+
+ return e_mail_reader_open_selected_mail (E_MAIL_READER(priv->current_view));
+}
+
void
e_mail_notebook_view_set_search_strings (EMailView *view,
GSList *search_strings)
@@ -346,6 +479,7 @@ mail_notebook_view_reader_init (EMailReaderIface *iface)
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;
+ iface->open_selected_mail = mail_notebook_view_open_selected_mail;
}
GType
@@ -384,3 +518,55 @@ e_mail_notebook_view_register_type (GTypeModule *type_module)
type_module, mail_notebook_view_type,
E_TYPE_MAIL_READER, &reader_info);
}
+
+void
+e_mail_notebook_view_set_show_deleted (EMailNotebookView *view,
+ gboolean show_deleted)
+{
+ if (!view->priv->current_view)
+ return;
+
+ e_mail_view_set_show_deleted (view->priv->current_view, show_deleted);
+}
+gboolean
+e_mail_notebook_view_get_show_deleted (EMailNotebookView *view)
+{
+ if (!view->priv->current_view)
+ return FALSE;
+
+ return e_mail_view_get_show_deleted (view->priv->current_view);
+}
+void
+e_mail_notebook_view_set_preview_visible (EMailNotebookView *view,
+ gboolean preview_visible)
+{
+ if (!view->priv->current_view)
+ return ;
+
+ e_mail_view_set_preview_visible (view->priv->current_view, preview_visible);
+}
+gboolean
+e_mail_notebook_view_get_preview_visible (EMailNotebookView *view)
+{
+ if (!view->priv->current_view)
+ return FALSE;
+
+ return e_mail_view_get_preview_visible (view->priv->current_view);
+}
+void
+e_mail_notebook_view_set_orientation (EMailNotebookView *view,
+ GtkOrientation orientation)
+{
+ if (!view->priv->current_view)
+ return;
+
+ e_mail_view_set_orientation (view->priv->current_view, orientation);
+}
+GtkOrientation
+e_mail_notebook_view_get_orientation (EMailNotebookView *view)
+{
+ if (!view->priv->current_view)
+ return GTK_ORIENTATION_VERTICAL;
+
+ return e_mail_view_get_orientation (view->priv->current_view);
+}