aboutsummaryrefslogtreecommitdiffstats
path: root/mail/message-list.h
diff options
context:
space:
mode:
Diffstat (limited to 'mail/message-list.h')
-rw-r--r--mail/message-list.h258
1 files changed, 157 insertions, 101 deletions
diff --git a/mail/message-list.h b/mail/message-list.h
index dd57d69d1d..c3233db6a2 100644
--- a/mail/message-list.h
+++ b/mail/message-list.h
@@ -1,19 +1,54 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * 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:
+ * Jeffrey Stedfast <fejj@ximian.com>
+ *
+ * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
+ *
+ */
+
#ifndef _MESSAGE_LIST_H_
#define _MESSAGE_LIST_H_
-#include <gtk/gtkobject.h>
-#include <gtk/gtkwidget.h>
-
-#include <gal/e-table/e-table-simple.h>
-#include <gal/e-table/e-tree-scrolled.h>
-#include "mail-types.h"
-
-#define MESSAGE_LIST_TYPE (message_list_get_type ())
-#define MESSAGE_LIST(o) (GTK_CHECK_CAST ((o), MESSAGE_LIST_TYPE, MessageList))
-#define MESSAGE_LIST_CLASS(k) (GTK_CHECK_CLASS_CAST((k), MESSAGE_LIST_TYPE, MessageListClass))
-#define IS_MESSAGE_LIST(o) (GTK_CHECK_TYPE ((o), MESSAGE_LIST_TYPE))
-#define IS_MESSAGE_LIST_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), MESSAGE_LIST_TYPE))
+#include <gtk/gtk.h>
+#include <camel/camel.h>
+
+#include <e-util/e-util.h>
+#include <libemail-engine/e-mail-session.h>
+
+/* Standard GObject macros */
+#define MESSAGE_LIST_TYPE \
+ (message_list_get_type ())
+#define MESSAGE_LIST(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST \
+ ((obj), MESSAGE_LIST_TYPE, MessageList))
+#define MESSAGE_LIST_CLASS(cls) \
+ (G_TYPE_CHECK_CLASS_CAST \
+ ((cls), MESSAGE_LIST_TYPE, MessageListClass))
+#define IS_MESSAGE_LIST(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE \
+ ((obj), MESSAGE_LIST_TYPE))
+#define IS_MESSAGE_LIST_CLASS(cls) \
+ (G_TYPE_CHECK_CLASS_TYPE \
+ ((cls), MESSAGE_LIST_TYPE))
+#define MESSAGE_LIST_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS \
+ ((obj), MESSAGE_LIST_TYPE, MessageListClass))
+
+G_BEGIN_DECLS
enum {
COL_MESSAGE_STATUS,
@@ -30,131 +65,152 @@ enum {
COL_FOLLOWUP_FLAG,
COL_FOLLOWUP_DUE_BY,
COL_LOCATION, /* vfolder location? */
-
+ COL_SENDER,
+ COL_RECIPIENTS,
+ COL_MIXED_SENDER,
+ COL_MIXED_RECIPIENTS,
+ COL_LABELS,
+
+ /* subject with junk removed */
+ COL_SUBJECT_TRIMMED,
+
/* normalised strings */
COL_FROM_NORM,
COL_SUBJECT_NORM,
COL_TO_NORM,
-
+
COL_LAST,
-
+
/* Invisible columns */
COL_DELETED,
COL_UNREAD,
- COL_COLOUR,
+ COL_COLOUR
};
#define MESSAGE_LIST_COLUMN_IS_ACTIVE(col) (col == COL_MESSAGE_STATUS || \
col == COL_FLAGGED)
-#define ML_HIDE_NONE_START (0)
-#define ML_HIDE_NONE_END (2147483647)
-/* dont change */
-#define ML_HIDE_SAME (2147483646)
+typedef struct _MessageList MessageList;
+typedef struct _MessageListClass MessageListClass;
+typedef struct _MessageListPrivate MessageListPrivate;
struct _MessageList {
- ETreeScrolled parent;
+ ETree parent;
+
+ MessageListPrivate *priv;
/* The table */
- ETreeModel *model;
- ETree *tree;
- ETreePath tree_root;
ETableExtras *extras;
- /* The folder */
- CamelFolder *folder;
-
GHashTable *uid_nodemap; /* uid (from info) -> tree node mapping */
-
+
GHashTable *normalised_hash;
-
- /* UID's to hide. Keys in the mempool */
- /* IMPORTANT: You MUST have obtained the hide lock, to operate on this data */
- GHashTable *hidden;
- struct _EMemPool *hidden_pool;
- int hide_unhidden, /* total length, before hiding */
- hide_before, hide_after; /* hide ranges of messages */
/* Current search string, or %NULL */
- char *search;
+ gchar *search;
- /* Are we displaying threaded view? */
- gboolean threaded;
- /* do we automatically hide deleted messages? */
- gboolean hidedeleted;
+ /* are we regenerating the message_list because set_folder
+ * was just called? */
+ guint just_set_folder : 1;
- /* Where the ETree cursor is. */
- int cursor_row;
- char *cursor_uid;
+ guint expand_all :1;
+ guint collapse_all :1;
- /* Row-selection and seen-marking timers */
- guint idle_id, seen_id;
+ /* frozen count */
+ guint frozen : 16;
- /* locks */
- GMutex *hide_lock; /* for any 'hide' info above */
+ /* Where the ETree cursor is. */
+ gchar *cursor_uid;
- /* list of outstanding regeneration requests */
- GList *regen;
+ /* whether the last selection was on a single row or none/multi */
+ gboolean last_sel_single;
- /* the current camel folder thread tree, if any */
- struct _CamelFolderThread *thread_tree;
+ /* Row-selection and seen-marking timers */
+ guint idle_id, seen_id;
- /* for message/folder chagned event handling */
- struct _MailAsyncEvent *async_event;
+ gchar *frozen_search; /* to save search took place while we were frozen */
};
-typedef struct {
- ETreeScrolledClass parent_class;
+struct _MessageListClass {
+ ETreeClass parent_class;
/* signals - select a message */
- void (*message_selected) (MessageList *ml, const char *uid);
- void (*message_list_built) (MessageList *ml);
-} MessageListClass;
-
-typedef void (*MessageListForeachFunc) (MessageList *message_list,
- const char *uid,
- gpointer user_data);
+ void (*message_selected) (MessageList *message_list, const gchar *uid);
+ void (*message_list_built) (MessageList *message_list);
+ void (*message_list_scrolled) (MessageList *message_list);
+};
typedef enum {
- MESSAGE_LIST_SELECT_NEXT = 1,
- MESSAGE_LIST_SELECT_PREVIOUS = -1
+ MESSAGE_LIST_SELECT_NEXT = 0,
+ MESSAGE_LIST_SELECT_PREVIOUS = 1,
+ MESSAGE_LIST_SELECT_DIRECTION = 1, /* direction mask */
+ MESSAGE_LIST_SELECT_WRAP = 1<<1 /* option bit */
} MessageListSelectDirection;
-GtkType message_list_get_type (void);
-GtkWidget *message_list_new (void);
-void message_list_set_folder (MessageList *message_list,
- CamelFolder *camel_folder,
- gboolean outgoing);
-
-void message_list_foreach (MessageList *message_list,
- MessageListForeachFunc callback,
- gpointer user_data);
-
-gboolean message_list_select (MessageList *message_list,
- MessageListSelectDirection direction,
- guint32 flags,
- guint32 mask,
- gboolean wraparound);
-
-void message_list_select_uid (MessageList *message_list,
- const char *uid);
-
-void message_list_select_next_thread (MessageList *messageList);
-
-/* info */
-unsigned int message_list_length(MessageList *ml);
-unsigned int message_list_hidden(MessageList *ml);
-
-/* hide specific messages */
-void message_list_hide_add(MessageList *ml, const char *expr, unsigned int lower, unsigned int upper);
-void message_list_hide_uids(MessageList *ml, GPtrArray *uids);
-void message_list_hide_clear(MessageList *ml);
-
-void message_list_set_threaded(MessageList *ml, gboolean threaded);
-void message_list_set_hidedeleted(MessageList *ml, gboolean hidedeleted);
-void message_list_set_search(MessageList *ml, const char *search);
-
-#define MESSAGE_LIST_LOCK(m, l) g_mutex_lock(((MessageList *)m)->l)
-#define MESSAGE_LIST_UNLOCK(m, l) g_mutex_unlock(((MessageList *)m)->l)
+GType message_list_get_type (void);
+GtkWidget * message_list_new (EMailSession *session);
+EMailSession * message_list_get_session (MessageList *message_list);
+CamelFolder * message_list_ref_folder (MessageList *message_list);
+void message_list_set_folder (MessageList *message_list,
+ CamelFolder *folder);
+GtkTargetList * message_list_get_copy_target_list
+ (MessageList *message_list);
+GtkTargetList * message_list_get_paste_target_list
+ (MessageList *message_list);
+void message_list_set_expanded_default
+ (MessageList *message_list,
+ gboolean expanded_default);
+gboolean message_list_get_group_by_threads
+ (MessageList *message_list);
+void message_list_set_group_by_threads
+ (MessageList *message_list,
+ gboolean group_by_threads);
+gboolean message_list_get_show_deleted (MessageList *message_list);
+void message_list_set_show_deleted (MessageList *message_list,
+ gboolean show_deleted);
+gboolean message_list_get_thread_latest (MessageList *message_list);
+void message_list_set_thread_latest (MessageList *message_list,
+ gboolean thread_latest);
+gboolean message_list_get_thread_subject (MessageList *message_list);
+void message_list_set_thread_subject (MessageList *message_list,
+ gboolean thread_subject);
+void message_list_freeze (MessageList *message_list);
+void message_list_thaw (MessageList *message_list);
+GPtrArray * message_list_get_selected (MessageList *message_list);
+void message_list_set_selected (MessageList *message_list,
+ GPtrArray *uids);
+gboolean message_list_select (MessageList *message_list,
+ MessageListSelectDirection direction,
+ guint32 flags,
+ guint32 mask);
+gboolean message_list_can_select (MessageList *message_list,
+ MessageListSelectDirection direction,
+ guint32 flags,
+ guint32 mask);
+void message_list_select_uid (MessageList *message_list,
+ const gchar *uid,
+ gboolean with_fallback);
+void message_list_select_next_thread (MessageList *message_list);
+void message_list_select_prev_thread (MessageList *message_list);
+void message_list_select_all (MessageList *message_list);
+void message_list_select_thread (MessageList *message_list);
+void message_list_select_subthread (MessageList *message_list);
+void message_list_copy (MessageList *message_list,
+ gboolean cut);
+void message_list_paste (MessageList *message_list);
+guint message_list_count (MessageList *message_list);
+guint message_list_selected_count (MessageList *message_list);
+void message_list_set_threaded_expand_all
+ (MessageList *message_list);
+void message_list_set_threaded_collapse_all
+ (MessageList *message_list);
+void message_list_set_search (MessageList *message_list,
+ const gchar *search);
+void message_list_save_state (MessageList *message_list);
+
+void message_list_sort_uids (MessageList *message_list,
+ GPtrArray *uids);
+
+G_END_DECLS
#endif /* _MESSAGE_LIST_H_ */