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