diff options
Diffstat (limited to 'mail/e-mail-view.c')
-rw-r--r-- | mail/e-mail-view.c | 495 |
1 files changed, 495 insertions, 0 deletions
diff --git a/mail/e-mail-view.c b/mail/e-mail-view.c new file mode 100644 index 0000000000..35326a1677 --- /dev/null +++ b/mail/e-mail-view.c @@ -0,0 +1,495 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) version 3. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the program; if not, see <http://www.gnu.org/licenses/> + * + * + * Authors: + * Srinivasa Ragavan <sragavan@gnome.org> + * + * Copyright (C) 2010 Intel corporation. (www.intel.com) + * + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "e-mail-view.h" + +#include <glib/gi18n-lib.h> + +#define E_MAIL_VIEW_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE \ + ((obj), E_TYPE_MAIL_VIEW, EMailViewPrivate)) + +struct _EMailViewPrivate { + EShellView *shell_view; + GtkOrientation orientation; + EMailView *previous_view; + + guint preview_visible : 1; + guint show_deleted : 1; +}; + +enum { + PROP_0, + PROP_ORIENTATION, + PROP_PREVIEW_VISIBLE, + PROP_PREVIOUS_VIEW, + PROP_SHELL_VIEW, + PROP_SHOW_DELETED +}; + +enum { + PANE_CLOSE, + VIEW_CHANGED, + OPEN_MAIL, + LAST_SIGNAL +}; + +static guint signals[LAST_SIGNAL]; + +G_DEFINE_TYPE (EMailView, e_mail_view, GTK_TYPE_VBOX) + +static void +mail_view_set_shell_view (EMailView *view, + EShellView *shell_view) +{ + g_return_if_fail (E_IS_SHELL_VIEW (shell_view)); + g_return_if_fail (view->priv->shell_view == NULL); + + view->priv->shell_view = g_object_ref (shell_view); +} + +static void +mail_view_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + switch (property_id) { + case PROP_ORIENTATION: + e_mail_view_set_orientation ( + E_MAIL_VIEW (object), + g_value_get_enum (value)); + return; + + case PROP_PREVIEW_VISIBLE: + e_mail_view_set_preview_visible ( + E_MAIL_VIEW (object), + g_value_get_boolean (value)); + return; + + case PROP_PREVIOUS_VIEW: + e_mail_view_set_previous_view ( + E_MAIL_VIEW (object), + g_value_get_object (value)); + return; + + case PROP_SHELL_VIEW: + mail_view_set_shell_view ( + E_MAIL_VIEW (object), + g_value_get_object (value)); + return; + + case PROP_SHOW_DELETED: + e_mail_view_set_show_deleted ( + E_MAIL_VIEW (object), + g_value_get_boolean (value)); + return; + } + + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); +} + +static void +mail_view_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + switch (property_id) { + case PROP_ORIENTATION: + g_value_set_enum ( + value, e_mail_view_get_orientation ( + E_MAIL_VIEW (object))); + return; + + case PROP_PREVIEW_VISIBLE: + g_value_set_boolean ( + value, e_mail_view_get_preview_visible ( + E_MAIL_VIEW (object))); + return; + + case PROP_PREVIOUS_VIEW: + g_value_set_object ( + value, e_mail_view_get_previous_view ( + E_MAIL_VIEW (object))); + return; + + case PROP_SHELL_VIEW: + g_value_set_object ( + value, e_mail_view_get_shell_view ( + E_MAIL_VIEW (object))); + return; + + case PROP_SHOW_DELETED: + g_value_set_boolean ( + value, e_mail_view_get_show_deleted ( + E_MAIL_VIEW (object))); + return; + } + + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); +} + +static void +mail_view_dispose (GObject *object) +{ + EMailViewPrivate *priv; + + priv = E_MAIL_VIEW_GET_PRIVATE (object); + + if (priv->shell_view != NULL) { + g_object_unref (priv->shell_view); + priv->shell_view = NULL; + } + + if (priv->previous_view != NULL) { + g_object_unref (priv->previous_view); + priv->previous_view = NULL; + } + + /* Chain up to parent's dispose() method. */ + G_OBJECT_CLASS (e_mail_view_parent_class)->dispose (object); +} + +static GtkOrientation +mail_view_get_orientation (EMailView *view) +{ + return view->priv->orientation; +} + +static void +mail_view_set_orientation (EMailView *view, + GtkOrientation orientation) +{ + if (view->priv->orientation == orientation) + return; + + view->priv->orientation = orientation; + + g_object_notify (G_OBJECT (view), "orientation"); + + e_mail_view_update_view_instance (view); +} + +static gboolean +mail_view_get_preview_visible (EMailView *view) +{ + return view->priv->preview_visible; +} + +static void +mail_view_set_preview_visible (EMailView *view, + gboolean preview_visible) +{ + if (view->priv->preview_visible == preview_visible) + return; + + view->priv->preview_visible = preview_visible; + + g_object_notify (G_OBJECT (view), "preview-visible"); +} + +static gboolean +mail_view_get_show_deleted (EMailView *view) +{ + return view->priv->show_deleted; +} + +static void +mail_view_set_show_deleted (EMailView *view, + gboolean show_deleted) +{ + if (view->priv->show_deleted == show_deleted) + return; + + view->priv->show_deleted = show_deleted; + + g_object_notify (G_OBJECT (view), "show-deleted"); +} + +static void +e_mail_view_class_init (EMailViewClass *class) +{ + GObjectClass *object_class; + + g_type_class_add_private (class, sizeof (EMailViewPrivate)); + + object_class = G_OBJECT_CLASS (class); + object_class->set_property = mail_view_set_property; + object_class->get_property = mail_view_get_property; + object_class->dispose = mail_view_dispose; + + class->get_orientation = mail_view_get_orientation; + class->set_orientation = mail_view_set_orientation; + class->get_preview_visible = mail_view_get_preview_visible; + class->set_preview_visible = mail_view_set_preview_visible; + class->get_show_deleted = mail_view_get_show_deleted; + class->set_show_deleted = mail_view_set_show_deleted; + + signals[PANE_CLOSE] = g_signal_new ( + "pane-close", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (EMailViewClass , pane_close), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + signals[VIEW_CHANGED] = g_signal_new ( + "view-changed", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (EMailViewClass , view_changed), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + signals[OPEN_MAIL] = g_signal_new ( + "open-mail", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (EMailViewClass , open_mail), + NULL, NULL, + g_cclosure_marshal_VOID__STRING, + G_TYPE_NONE, 1, G_TYPE_STRING); + + g_object_class_install_property ( + object_class, + PROP_ORIENTATION, + g_param_spec_enum ( + "orientation", + "Orientation", + NULL, + GTK_TYPE_ORIENTATION, + GTK_ORIENTATION_HORIZONTAL, + G_PARAM_READWRITE)); + + g_object_class_install_property ( + object_class, + PROP_PREVIEW_VISIBLE, + g_param_spec_boolean ( + "preview-visible", + "Preview Visible", + NULL, + FALSE, + G_PARAM_READWRITE)); + + g_object_class_install_property ( + object_class, + PROP_PREVIOUS_VIEW, + g_param_spec_object ( + "previous-view", + "Previous View", + NULL, + E_TYPE_MAIL_VIEW, + G_PARAM_READWRITE)); + + g_object_class_install_property ( + object_class, + PROP_SHELL_VIEW, + g_param_spec_object ( + "shell-view", + "Shell View", + NULL, + E_TYPE_SHELL_VIEW, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + + g_object_class_install_property ( + object_class, + PROP_SHOW_DELETED, + g_param_spec_boolean ( + "show-deleted", + "Show Deleted", + NULL, + FALSE, + G_PARAM_READWRITE)); +} + +static void +e_mail_view_init (EMailView *view) +{ + view->priv = E_MAIL_VIEW_GET_PRIVATE (view); +} + +EShellView * +e_mail_view_get_shell_view (EMailView *view) +{ + g_return_val_if_fail (E_IS_MAIL_VIEW (view), NULL); + + return view->priv->shell_view; +} + +void +e_mail_view_update_view_instance (EMailView *view) +{ + EMailViewClass *class; + + g_return_if_fail (E_IS_MAIL_VIEW (view)); + + class = E_MAIL_VIEW_GET_CLASS (view); + g_return_if_fail (class->update_view_instance != NULL); + + class->update_view_instance (view); +} + +GalViewInstance * +e_mail_view_get_view_instance (EMailView *view) +{ + EMailViewClass *class; + + g_return_val_if_fail (E_IS_MAIL_VIEW (view), NULL); + + class = E_MAIL_VIEW_GET_CLASS (view); + g_return_val_if_fail (class->get_view_instance != NULL, NULL); + + return class->get_view_instance (view); +} + +void +e_mail_view_set_search_strings (EMailView *view, + GSList *search_strings) +{ + EMailViewClass *class; + + g_return_if_fail (E_IS_MAIL_VIEW (view)); + + class = E_MAIL_VIEW_GET_CLASS (view); + g_return_if_fail (class->set_search_strings != NULL); + + class->set_search_strings (view, search_strings); +} + +GtkOrientation +e_mail_view_get_orientation (EMailView *view) +{ + EMailViewClass *class; + + g_return_val_if_fail (E_IS_MAIL_VIEW (view), 0); + + class = E_MAIL_VIEW_GET_CLASS (view); + g_return_val_if_fail (class->get_orientation != NULL, 0); + + return class->get_orientation (view); +} + +void +e_mail_view_set_orientation (EMailView *view, + GtkOrientation orientation) +{ + EMailViewClass *class; + + g_return_if_fail (E_IS_MAIL_VIEW (view)); + + class = E_MAIL_VIEW_GET_CLASS (view); + g_return_if_fail (class->set_orientation != NULL); + + class->set_orientation (view, orientation); +} + +gboolean +e_mail_view_get_preview_visible (EMailView *view) +{ + EMailViewClass *class; + + g_return_val_if_fail (E_IS_MAIL_VIEW (view), FALSE); + + class = E_MAIL_VIEW_GET_CLASS (view); + g_return_val_if_fail (class->get_preview_visible != NULL, FALSE); + + return class->get_preview_visible (view); +} + +void +e_mail_view_set_preview_visible (EMailView *view, + gboolean visible) +{ + EMailViewClass *class; + + g_return_if_fail (E_IS_MAIL_VIEW (view)); + + class = E_MAIL_VIEW_GET_CLASS (view); + g_return_if_fail (class->set_preview_visible != NULL); + + class->set_preview_visible (view, visible); +} + +EMailView * +e_mail_view_get_previous_view (EMailView *view) +{ + g_return_val_if_fail (E_IS_MAIL_VIEW (view), NULL); + + return view->priv->previous_view; +} + +void +e_mail_view_set_previous_view (EMailView *view, + EMailView *previous_view) +{ + g_return_if_fail (E_IS_MAIL_VIEW (view)); + + if (view->priv->previous_view == previous_view) + return; + + if (previous_view != NULL) { + g_return_if_fail (E_IS_MAIL_VIEW (previous_view)); + g_object_ref (previous_view); + } + + if (view->priv->previous_view != NULL) + g_object_unref (view->priv->previous_view); + + view->priv->previous_view = previous_view; + + g_object_notify (G_OBJECT (view), "previous-view"); +} + +gboolean +e_mail_view_get_show_deleted (EMailView *view) +{ + EMailViewClass *class; + + g_return_val_if_fail (E_IS_MAIL_VIEW (view), FALSE); + + class = E_MAIL_VIEW_GET_CLASS (view); + g_return_val_if_fail (class->get_show_deleted != NULL, FALSE); + + return class->get_show_deleted (view); +} + +void +e_mail_view_set_show_deleted (EMailView *view, + gboolean show_deleted) +{ + EMailViewClass *class; + + g_return_if_fail (E_IS_MAIL_VIEW (view)); + + class = E_MAIL_VIEW_GET_CLASS (view); + g_return_if_fail (class->set_show_deleted != NULL); + + class->set_show_deleted (view, show_deleted); +} |