2 * This program is free software; you can redistribute it and/or modify it
3 * under the terms of the GNU Lesser General Public License as published by
4 * the Free Software Foundation.
6 * This program is distributed in the hope that it will be useful, but
7 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
8 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
11 * You should have received a copy of the GNU Lesser General Public License
12 * along with this program; if not, see <http://www.gnu.org/licenses/>.
16 * Jeffrey Stedfast <fejj@ximian.com>
18 * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
22 #ifndef _MESSAGE_LIST_H_
23 #define _MESSAGE_LIST_H_
26 #include <camel/camel.h>
28 #include <e-util/e-util.h>
29 #include <libemail-engine/libemail-engine.h>
31 /* Standard GObject macros */
32 #define MESSAGE_LIST_TYPE \
33 (message_list_get_type ())
34 #define MESSAGE_LIST(obj) \
35 (G_TYPE_CHECK_INSTANCE_CAST \
36 ((obj), MESSAGE_LIST_TYPE, MessageList))
37 #define MESSAGE_LIST_CLASS(cls) \
38 (G_TYPE_CHECK_CLASS_CAST \
39 ((cls), MESSAGE_LIST_TYPE, MessageListClass))
40 #define IS_MESSAGE_LIST(obj) \
41 (G_TYPE_CHECK_INSTANCE_TYPE \
42 ((obj), MESSAGE_LIST_TYPE))
43 #define IS_MESSAGE_LIST_CLASS(cls) \
44 (G_TYPE_CHECK_CLASS_TYPE \
45 ((cls), MESSAGE_LIST_TYPE))
46 #define MESSAGE_LIST_GET_CLASS(obj) \
47 (G_TYPE_INSTANCE_GET_CLASS \
48 ((obj), MESSAGE_LIST_TYPE, MessageListClass))
63 COL_FOLLOWUP_FLAG_STATUS
,
66 COL_LOCATION
, /* vfolder location? */
73 /* subject with junk removed */
76 /* normalised strings */
85 /* Invisible columns */
89 COL_JUNK_STRIKEOUT_COLOR
,
95 #define MESSAGE_LIST_COLUMN_IS_ACTIVE(col) (col == COL_MESSAGE_STATUS || \
98 typedef struct _MessageList MessageList
;
99 typedef struct _MessageListClass MessageListClass
;
100 typedef struct _MessageListPrivate MessageListPrivate
;
102 struct _MessageList
{
105 MessageListPrivate
*priv
;
108 ETableExtras
*extras
;
110 GHashTable
*uid_nodemap
; /* uid (from info) -> tree node mapping */
112 GHashTable
*normalised_hash
;
114 /* Current search string, or %NULL */
117 /* are we regenerating the message_list because set_folder
118 * was just called? */
119 guint just_set_folder
: 1;
122 guint collapse_all
:1;
127 /* Where the ETree cursor is. */
130 /* whether the last selection was on a single row or none/multi */
131 gboolean last_sel_single
;
133 /* Row-selection and seen-marking timers */
134 guint idle_id
, seen_id
;
136 gchar
*frozen_search
; /* to save search took place while we were frozen */
139 struct _MessageListClass
{
140 ETreeClass parent_class
;
142 /* signals - select a message */
143 void (*message_selected
) (MessageList
*message_list
, const gchar
*uid
);
144 void (*message_list_built
) (MessageList
*message_list
);
145 void (*message_list_scrolled
) (MessageList
*message_list
);
149 MESSAGE_LIST_SELECT_NEXT
= 0,
150 MESSAGE_LIST_SELECT_PREVIOUS
= 1,
151 MESSAGE_LIST_SELECT_DIRECTION
= 1, /* direction mask */
152 MESSAGE_LIST_SELECT_WRAP
= 1 << 1, /* option bit */
153 MESSAGE_LIST_SELECT_INCLUDE_COLLAPSED
= 1 << 2 /* whether to search collapsed nodes as well */
154 } MessageListSelectDirection
;
156 GType
message_list_get_type (void);
157 GtkWidget
* message_list_new (EMailSession
*session
);
158 EMailSession
* message_list_get_session (MessageList
*message_list
);
159 CamelFolder
* message_list_ref_folder (MessageList
*message_list
);
160 void message_list_set_folder (MessageList
*message_list
,
161 CamelFolder
*folder
);
162 GtkTargetList
* message_list_get_copy_target_list
163 (MessageList
*message_list
);
164 GtkTargetList
* message_list_get_paste_target_list
165 (MessageList
*message_list
);
166 void message_list_set_expanded_default
167 (MessageList
*message_list
,
168 gboolean expanded_default
);
169 gboolean message_list_get_group_by_threads
170 (MessageList
*message_list
);
171 void message_list_set_group_by_threads
172 (MessageList
*message_list
,
173 gboolean group_by_threads
);
174 gboolean
message_list_get_show_deleted (MessageList
*message_list
);
175 void message_list_set_show_deleted (MessageList
*message_list
,
176 gboolean show_deleted
);
177 gboolean
message_list_get_show_junk (MessageList
*message_list
);
178 void message_list_set_show_junk (MessageList
*message_list
,
180 gboolean message_list_get_show_subject_above_sender
181 (MessageList
*message_list
);
182 void message_list_set_show_subject_above_sender
183 (MessageList
*message_list
,
184 gboolean show_subject_above_sender
);
185 gboolean
message_list_get_thread_latest (MessageList
*message_list
);
186 void message_list_set_thread_latest (MessageList
*message_list
,
187 gboolean thread_latest
);
188 gboolean
message_list_get_thread_subject (MessageList
*message_list
);
189 void message_list_set_thread_subject (MessageList
*message_list
,
190 gboolean thread_subject
);
191 void message_list_freeze (MessageList
*message_list
);
192 void message_list_thaw (MessageList
*message_list
);
193 GPtrArray
* message_list_get_selected (MessageList
*message_list
);
194 GPtrArray
* message_list_get_selected_with_collapsed_threads
195 (MessageList
*message_list
);
196 void message_list_set_selected (MessageList
*message_list
,
198 gboolean
message_list_select (MessageList
*message_list
,
199 MessageListSelectDirection direction
,
202 gboolean
message_list_can_select (MessageList
*message_list
,
203 MessageListSelectDirection direction
,
206 void message_list_select_uid (MessageList
*message_list
,
208 gboolean with_fallback
);
209 void message_list_select_next_thread (MessageList
*message_list
);
210 void message_list_select_prev_thread (MessageList
*message_list
);
211 void message_list_select_all (MessageList
*message_list
);
212 void message_list_select_thread (MessageList
*message_list
);
213 void message_list_select_subthread (MessageList
*message_list
);
214 void message_list_copy (MessageList
*message_list
,
216 void message_list_paste (MessageList
*message_list
);
217 guint
message_list_count (MessageList
*message_list
);
218 guint
message_list_selected_count (MessageList
*message_list
);
219 void message_list_set_threaded_expand_all
220 (MessageList
*message_list
);
221 void message_list_set_threaded_collapse_all
222 (MessageList
*message_list
);
223 void message_list_set_search (MessageList
*message_list
,
224 const gchar
*search
);
225 void message_list_save_state (MessageList
*message_list
);
227 void message_list_sort_uids (MessageList
*message_list
,
229 gboolean
message_list_contains_uid (MessageList
*message_list
,
234 #endif /* _MESSAGE_LIST_H_ */