/*
* 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);
}