1 /*
2  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3  * Copyright (C) 1999-2010 Hiroyuki Yamamoto
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18  */
19 
20 #ifndef __SUMMARY_H__
21 #define __SUMMARY_H__
22 
23 #include <glib.h>
24 #include <gdk/gdk.h>
25 #include <gtk/gtkwidget.h>
26 #include <gtk/gtkitemfactory.h>
27 #include <gtk/gtktreestore.h>
28 #include <gtk/gtktreeview.h>
29 #include <gtk/gtkdnd.h>
30 
31 typedef struct _SummaryView		SummaryView;
32 typedef struct _SummaryColumnState	SummaryColumnState;
33 
34 #include "enums.h"
35 #include "mainwindow.h"
36 #include "folderview.h"
37 #include "headerview.h"
38 #include "messageview.h"
39 #include "quick_search.h"
40 #include "compose.h"
41 #include "filter.h"
42 #include "folder.h"
43 #include "procmsg.h"
44 
45 typedef enum
46 {
47 	SUMMARY_NONE,
48 	SUMMARY_SELECTED_NONE,
49 	SUMMARY_SELECTED_SINGLE,
50 	SUMMARY_SELECTED_MULTIPLE
51 } SummarySelection;
52 
53 struct _SummaryColumnState
54 {
55 	SummaryColumnType type;
56 	gboolean visible;
57 };
58 
59 struct _SummaryView
60 {
61 	GtkWidget *vbox;
62 
63 	GtkWidget *scrolledwin;
64 	GtkWidget *treeview;
65 
66 	GtkTreeStore *store;
67 	GtkTreeSelection *selection;
68 	GtkTreeViewColumn *columns[N_SUMMARY_VISIBLE_COLS];
69 
70 	GtkWidget *hseparator;
71 	GtkWidget *hbox;
72 	GtkWidget *statlabel_folder;
73 	GtkWidget *statlabel_select;
74 	GtkWidget *statlabel_msgs;
75 	GtkWidget *toggle_eventbox;
76 	GtkWidget *toggle_arrow;
77 	GtkWidget *popupmenu;
78 	GtkWidget *colorlabel_menu;
79 
80 	GtkItemFactory *popupfactory;
81 
82 	GtkWidget *reedit_menuitem;
83 	GtkWidget *reedit_separator;
84 	GtkWidget *junk_menuitem;
85 	GtkWidget *nojunk_menuitem;
86 	GtkWidget *junk_separator;
87 
88 	GtkWidget *window;
89 
90 	GtkTreeRowReference *selected;
91 	GtkTreeRowReference *displayed;
92 
93 	GList *selection_list;
94 
95 	gboolean display_msg;
96 
97 	SummaryColumnState col_state[N_SUMMARY_VISIBLE_COLS];
98 	gint col_pos[N_SUMMARY_VISIBLE_COLS];
99 
100 	GdkColor color_marked;
101 	GdkColor color_dim;
102 
103 	guint lock_count;
104 
105 	MainWindow  *mainwin;
106 	FolderView  *folderview;
107 	HeaderView  *headerview;
108 	MessageView *messageview;
109 	QuickSearch *qsearch;
110 
111 	FolderItem *folder_item;
112 
113 	/* current message status */
114 	gint64 total_size;
115 	gint deleted;
116 	gint moved;
117 	gint copied;
118 
119 /*
120 private:
121 */
122 	/* table for looking up message-id */
123 	GHashTable *msgid_table;
124 
125 	/* all message list */
126 	GSList *all_mlist;
127 	/* filtered message list */
128 	GSList *flt_mlist;
129 
130 	gint64 total_flt_msg_size;
131 	gint flt_msg_total;
132 	gint flt_deleted;
133 	gint flt_moved;
134 	gint flt_copied;
135 	gint flt_new;
136 	gint flt_unread;
137 
138 	gboolean on_filter;
139 
140 	/* list for moving/deleting messages */
141 	GSList *tmp_mlist;
142 	FolderItem *to_folder;
143 	/* table for updating folder tree */
144 	GHashTable *folder_table;
145 	/* counter for filtering */
146 	gint filtered;
147 	gint flt_count;
148 	gint flt_total;
149 
150 	gboolean on_button_press;
151 
152 	/* for DnD */
153 	gboolean can_toggle_selection;
154 	gboolean on_drag;
155 	GtkTreePath *pressed_path;
156 	gchar *drag_list;
157 
158 	/* unthreading */
159 	GSList *pos_list;
160 
161 	guint write_lock_count;
162 
163 	/* junk filter list */
164 	GSList *junk_fltlist;
165 
166 	/* generic flag */
167 	gint tmp_flag;
168 };
169 
170 SummaryView	*summary_create(void);
171 
172 void summary_init		  (SummaryView		*summaryview);
173 gboolean summary_show		  (SummaryView		*summaryview,
174 				   FolderItem		*fitem,
175 				   gboolean		 update_cache);
176 void summary_clear_list		  (SummaryView		*summaryview);
177 void summary_clear_all		  (SummaryView		*summaryview);
178 
179 void summary_show_queued_msgs	  (SummaryView		*summaryview);
180 
181 /* full lock */
182 void summary_lock		  (SummaryView		*summaryview);
183 void summary_unlock		  (SummaryView		*summaryview);
184 gboolean summary_is_locked	  (SummaryView		*summaryview);
185 gboolean summary_is_read_locked	  (SummaryView		*summaryview);
186 
187 /* write lock (read only) */
188 void summary_write_lock		  (SummaryView		*summaryview);
189 void summary_write_unlock	  (SummaryView		*summaryview);
190 gboolean summary_is_write_locked  (SummaryView		*summaryview);
191 
192 FolderItem *summary_get_current_folder		(SummaryView	*summaryview);
193 
194 SummarySelection summary_get_selection_type	(SummaryView	*summaryview);
195 GSList *summary_get_selected_msg_list		(SummaryView	*summaryview);
196 GSList *summary_get_changed_msg_list		(SummaryView	*summaryview);
197 GSList *summary_get_msg_list			(SummaryView	*summaryview);
198 GSList *summary_get_flagged_msg_list		(SummaryView	*summaryview,
199 						 MsgPermFlags	 flags);
200 
201 MsgInfo *summary_get_msginfo_by_msgnum		(SummaryView	*summaryview,
202 						 guint		 msgnum);
203 
204 void summary_select_prev_unread	  (SummaryView		*summaryview);
205 void summary_select_next_unread	  (SummaryView		*summaryview);
206 void summary_select_prev_new	  (SummaryView		*summaryview);
207 void summary_select_next_new	  (SummaryView		*summaryview);
208 void summary_select_prev_marked	  (SummaryView		*summaryview);
209 void summary_select_next_marked	  (SummaryView		*summaryview);
210 void summary_select_prev_labeled  (SummaryView		*summaryview);
211 void summary_select_next_labeled  (SummaryView		*summaryview);
212 void summary_select_by_msgnum	  (SummaryView		*summaryview,
213 				   guint		 msgnum);
214 gboolean summary_select_by_msginfo(SummaryView		*summaryview,
215 				   MsgInfo		*msginfo);
216 
217 void summary_select_row		  (SummaryView		*summaryview,
218 				   GtkTreeIter		*iter,
219 				   gboolean		 display_msg,
220 				   gboolean		 do_refresh);
221 
222 void summary_thread_build	  (SummaryView		*summaryview);
223 void summary_unthread		  (SummaryView		*summaryview);
224 
225 void summary_expand_threads	  (SummaryView		*summaryview);
226 void summary_collapse_threads	  (SummaryView		*summaryview);
227 
228 void summary_filter		  (SummaryView		*summaryview,
229 				   gboolean		 selected_only);
230 void summary_filter_open	  (SummaryView		*summaryview,
231 				   FilterCreateType	 type);
232 
233 void summary_filter_junk	  (SummaryView		*summaryview,
234 				   gboolean		 selected_only);
235 
236 void summary_junk		  (SummaryView		*summaryview);
237 void summary_not_junk		  (SummaryView		*summaryview);
238 
239 void summary_sort		  (SummaryView		*summaryview,
240 				   FolderSortKey	 sort_key,
241 				   FolderSortType	 sort_type);
242 
243 void summary_delete		  (SummaryView		*summaryview);
244 void summary_delete_duplicated	  (SummaryView		*summaryview);
245 
246 gboolean summary_execute	  (SummaryView		*summaryview);
247 
248 void summary_attract_by_subject	  (SummaryView		*summaryview);
249 
250 gint summary_write_cache	  (SummaryView		*summaryview);
251 
252 void summary_pass_key_press_event (SummaryView		*summaryview,
253 				   GdkEventKey		*event);
254 
255 void summary_display_msg_selected (SummaryView		*summaryview,
256 				   gboolean		 new_window,
257 				   gboolean		 all_headers);
258 void summary_redisplay_msg	  (SummaryView		*summaryview);
259 void summary_open_msg		  (SummaryView		*summaryview);
260 void summary_view_source	  (SummaryView		*summaryview);
261 void summary_reedit		  (SummaryView		*summaryview);
262 gboolean summary_step		  (SummaryView		*summaryview,
263 				   GtkScrollType	 type);
264 void summary_toggle_view	  (SummaryView		*summaryview);
265 
266 void summary_update_selected_rows (SummaryView		*summaryview);
267 void summary_update_by_msgnum	  (SummaryView		*summaryview,
268 				   guint		 msgnum);
269 
270 void summary_move_selected_to	  (SummaryView		*summaryview,
271 				   FolderItem		*to_folder);
272 void summary_move_to		  (SummaryView		*summaryview);
273 void summary_copy_selected_to	  (SummaryView		*summaryview,
274 				   FolderItem		*to_folder);
275 void summary_copy_to		  (SummaryView		*summaryview);
276 void summary_save_as		  (SummaryView		*summaryview);
277 void summary_print		  (SummaryView		*summaryview);
278 void summary_mark		  (SummaryView		*summaryview);
279 void summary_unmark		  (SummaryView		*summaryview);
280 void summary_mark_as_unread	  (SummaryView		*summaryview);
281 void summary_mark_as_read	  (SummaryView		*summaryview);
282 void summary_mark_thread_as_read  (SummaryView		*summaryview);
283 void summary_mark_all_read	  (SummaryView		*summaryview);
284 void summary_add_address	  (SummaryView		*summaryview);
285 void summary_select_all		  (SummaryView		*summaryview);
286 void summary_unselect_all	  (SummaryView		*summaryview);
287 void summary_select_thread	  (SummaryView		*summaryview);
288 
289 void summary_mark_displayed_read  (SummaryView		*summaryview,
290 				   GtkTreeIter		*iter);
291 
292 void summary_reply		  (SummaryView		*summaryview,
293 				   ComposeMode		 mode);
294 
295 void summary_set_colorlabel	  (SummaryView		*summaryview,
296 				   guint		 labelcolor,
297 				   GtkWidget		*widget);
298 
299 void summary_set_column_order	  (SummaryView		*summaryview);
300 void summary_get_column_order	  (SummaryView		*summaryview);
301 
302 void summary_qsearch_reset	  (SummaryView		*summaryview);
303 void summary_qsearch_clear_entry  (SummaryView		*summaryview);
304 void summary_qsearch		  (SummaryView		*summaryview);
305 
306 #endif /* __SUMMARY_H__ */
307