summaryview.h (10400B)
1 /* 2 * Claws Mail -- a GTK based, lightweight, and fast e-mail client 3 * Copyright (C) 1999-2025 the Claws Mail team and 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 3 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, see <http://www.gnu.org/licenses/>. 17 */ 18 19 #ifndef __SUMMARY_H__ 20 #define __SUMMARY_H__ 21 22 #include <sys/types.h> 23 #include <regex.h> 24 25 #include <glib.h> 26 #include <gdk/gdk.h> 27 #include <gtk/gtk.h> 28 29 #include "viewtypes.h" 30 typedef struct _SummaryColumnState SummaryColumnState; 31 32 #define MAIL_MANUAL_FILTERING_HOOKLIST "mail_manual_filtering_hooklist" 33 34 typedef enum 35 { 36 S_COL_MARK, 37 S_COL_STATUS, 38 S_COL_MIME, 39 S_COL_SUBJECT, 40 S_COL_FROM, 41 S_COL_TO, 42 S_COL_DATE, 43 S_COL_SIZE, 44 S_COL_NUMBER, 45 S_COL_SCORE, 46 S_COL_LOCKED, 47 S_COL_TAGS 48 } SummaryColumnType; 49 50 #define N_SUMMARY_COLS 12 51 52 typedef enum 53 { 54 SUMMARY_NONE, 55 SUMMARY_SELECTED_NONE, 56 SUMMARY_SELECTED_SINGLE, 57 SUMMARY_SELECTED_MULTIPLE 58 } SummarySelection; 59 60 typedef enum 61 { 62 TARGET_MAIL_URI_LIST, 63 TARGET_DUMMY, 64 TARGET_MAIL_CM_PATH_LIST, 65 } TargetInfo; 66 67 #include "mainwindow.h" 68 #include "compose.h" 69 #include "folder.h" 70 #include "gtk/gtksctree.h" 71 72 struct _SummaryColumnState 73 { 74 SummaryColumnType type; 75 gboolean visible; 76 }; 77 78 struct _SummaryView 79 { 80 GtkWidget *vbox; 81 GtkWidget *mainwidget_book; 82 GtkWidget *scrolledwin; 83 GtkWidget *ctree; 84 GtkWidget *hbox; 85 GtkWidget *hbox_l; 86 GtkWidget *hbox_spc; 87 GtkWidget *stat_box; 88 GtkWidget *stat_box2; 89 GtkWidget *folder_pixmap; 90 GtkWidget *folder_pixmap_eventbox; 91 GtkWidget *statlabel_folder; 92 GtkWidget *statlabel_select; 93 GtkWidget *statlabel_msgs; 94 GtkWidget *toggle_eventbox; 95 GtkWidget *toggle_arrow; 96 GtkWidget *toggle_search; 97 GtkWidget *popupmenu; 98 GtkWidget *headerpopupmenu; 99 GtkWidget *tags_menu; 100 GtkWidget *window; 101 102 GtkCMCTreeNode *selected; 103 GtkCMCTreeNode *displayed; 104 105 gboolean display_msg; 106 107 SummaryColumnState col_state[N_SUMMARY_COLS]; 108 gint col_pos[N_SUMMARY_COLS]; 109 110 GdkRGBA color_marked; 111 GdkRGBA color_dim; 112 113 guint lock_count; 114 115 MainWindow *mainwin; 116 FolderView *folderview; 117 MessageView *messageview; 118 MessageView *ext_messageview; 119 120 FolderItem *folder_item; 121 122 /* summaryview prefs */ 123 gint important_score; 124 FolderSortKey sort_key; 125 FolderSortType sort_type; 126 guint threaded; 127 guint thread_collapsed; 128 129 /* Extra data for summaryview */ 130 regex_t *simplify_subject_preg; 131 132 /* current message status */ 133 gint unreadmarked; 134 goffset total_size; 135 gint deleted; 136 gint moved; 137 gint copied; 138 139 /* 140 private: 141 */ 142 /* table for looking up message-id */ 143 GHashTable *msgid_table; 144 GHashTable *subject_table; 145 146 /* list for moving/deleting messages */ 147 GSList *mlist; 148 int msginfo_update_callback_id; 149 150 /* update folder label when renaming */ 151 gint folder_item_update_callback_id; 152 gint folder_update_callback_id; 153 154 GtkTargetList *target_list; /* DnD */ 155 156 /* folders with matches for recursive quicksearch queries */ 157 GSList *recursive_matched_folders; 158 FolderItem *search_root_folder; 159 160 guint mark_as_read_timeout_tag; 161 162 /* A flag to indicate to header popup menuitem handlers that 163 * they should not do anything, because the menu items are 164 * being set up prior to the popup menu being displayed. */ 165 gboolean header_menu_lock; 166 167 GtkActionGroup *action_group; 168 GtkUIManager *ui_manager; 169 }; 170 171 SummaryView *summary_create(MainWindow *mainwin); 172 void summaryview_destroy(SummaryView *summaryview); 173 void summary_init (SummaryView *summaryview); 174 gboolean summary_show (SummaryView *summaryview, 175 FolderItem *fitem, 176 gboolean avoid_refresh); 177 void summary_clear_list (SummaryView *summaryview); 178 void summary_clear_all (SummaryView *summaryview); 179 180 void summary_lock (SummaryView *summaryview); 181 void summary_unlock (SummaryView *summaryview); 182 void summary_freeze (SummaryView *summaryview); 183 void summary_thaw (SummaryView *summaryview); 184 void summary_thaw_with_status (SummaryView *summaryview); 185 void summary_grab_focus (SummaryView *summaryview); 186 GtkWidget *summary_get_main_widget(SummaryView *summaryview); 187 gboolean summary_is_locked (SummaryView *summaryview); 188 189 SummarySelection summary_get_selection_type (SummaryView *summaryview); 190 MsgInfo *summary_get_selected_msg (SummaryView *summaryview); 191 GSList *summary_get_selected_msg_list (SummaryView *summaryview); 192 193 void summary_select_prev (SummaryView *summaryview); 194 void summary_select_next (SummaryView *summaryview); 195 void summary_select_prev_unread (SummaryView *summaryview); 196 void summary_select_next_unread (SummaryView *summaryview); 197 void summary_select_prev_new (SummaryView *summaryview); 198 void summary_select_next_new (SummaryView *summaryview); 199 void summary_select_prev_marked (SummaryView *summaryview); 200 void summary_select_next_marked (SummaryView *summaryview); 201 void summary_select_prev_labeled (SummaryView *summaryview); 202 void summary_select_next_labeled (SummaryView *summaryview); 203 void summary_select_parent (SummaryView *summaryview); 204 void summary_select_by_msgnum (SummaryView *summaryview, 205 guint msgnum, 206 gboolean show); 207 void summary_select_by_msg_list (SummaryView *summaryview, GSList *msginfos); 208 guint summary_get_current_msgnum (SummaryView *summaryview); 209 void summary_select_node (SummaryView *summaryview, 210 GtkCMCTreeNode *node, 211 gboolean display_msg); 212 213 void summary_expand_threads (SummaryView *summaryview); 214 void summary_collapse_threads (SummaryView *summaryview); 215 void summary_toggle_ignore_thread (SummaryView *summaryview); 216 void summary_toggle_watch_thread (SummaryView *summaryview); 217 218 void summary_sort (SummaryView *summaryview, 219 FolderSortKey sort_key, 220 FolderSortType sort_type); 221 222 void summary_delete (SummaryView *summaryview); 223 void summary_delete_trash (SummaryView *summaryview); 224 225 void summary_cancel (SummaryView *summaryview); 226 227 gboolean summary_execute (SummaryView *summaryview); 228 gboolean summary_expunge (SummaryView *summaryview); 229 230 void summary_attract_by_subject (SummaryView *summaryview); 231 232 gint summary_write_cache (SummaryView *summaryview); 233 234 gboolean summary_pass_key_press_event (SummaryView *summaryview, 235 GdkEventKey *event); 236 237 void summary_display_msg_selected (SummaryView *summaryview, 238 gboolean all_headers); 239 void summary_redisplay_msg (SummaryView *summaryview); 240 void summary_open_msg (SummaryView *summaryview, 241 gboolean new_window, 242 gboolean from_sep_msgview); 243 void summary_open_row (GtkSCTree *sctree, SummaryView *summaryview); 244 void summary_view_source (SummaryView *summaryview); 245 void summary_reedit (SummaryView *summaryview); 246 gboolean summary_step (SummaryView *summaryview, 247 GtkScrollType type); 248 void summary_toggle_view (SummaryView *summaryview); 249 void summary_set_marks_selected (SummaryView *summaryview); 250 guint summary_get_msgnum (SummaryView *summaryview, 251 GtkCMCTreeNode *node); 252 253 void summary_move_selected_to (SummaryView *summaryview, 254 FolderItem *to_folder); 255 void summary_move_to (SummaryView *summaryview); 256 void summary_copy_selected_to (SummaryView *summaryview, 257 FolderItem *to_folder); 258 GSList *summary_get_selection (SummaryView *summaryview); 259 guint summary_get_selection_count (SummaryView *summaryview); 260 void summary_copy_to (SummaryView *summaryview); 261 void summary_save_as (SummaryView *summaryview); 262 void summary_mark (SummaryView *summaryview); 263 void summary_unmark (SummaryView *summaryview); 264 void summary_mark_as_read (SummaryView *summaryview); 265 void summary_mark_as_unread (SummaryView *summaryview); 266 void summary_msgs_lock (SummaryView *summaryview); 267 void summary_msgs_unlock (SummaryView *summaryview); 268 void summary_mark_all_read (SummaryView *summaryview, gboolean ask_if_needed); 269 void summary_mark_all_unread (SummaryView *summaryview, gboolean ask_if_needed); 270 void summary_ignore_thread (SummaryView *summaryview); 271 void summary_unignore_thread (SummaryView *summaryview); 272 void summary_watch_thread (SummaryView *summaryview); 273 void summary_unwatch_thread (SummaryView *summaryview); 274 275 void summary_add_address (SummaryView *summaryview); 276 void summary_select_all (SummaryView *summaryview); 277 void summary_unselect_all (SummaryView *summaryview); 278 void summary_select_thread (SummaryView *summaryview, 279 gboolean delete_thread, 280 gboolean trash_thread); 281 282 void summary_set_tag (SummaryView *summaryview, 283 gint tag_id, 284 GtkWidget *widget); 285 286 void summary_set_column_order (SummaryView *summaryview); 287 288 void summary_toggle_show_read_messages 289 (SummaryView *summaryview); 290 void summary_toggle_show_read_threads 291 (SummaryView *summaryview); 292 void summary_toggle_show_del_messages 293 (SummaryView *summaryview); 294 295 void summary_toggle_view_real (SummaryView *summaryview); 296 297 void summary_reflect_prefs_pixmap_theme 298 (SummaryView *summaryview); 299 void summary_reflect_prefs_custom_colors(SummaryView *summaryview); 300 void summary_reflect_tags_changes(SummaryView *summaryview); 301 void summary_harvest_address (SummaryView *summaryview); 302 void summary_set_prefs_from_folderitem 303 (SummaryView *summaryview, FolderItem *item); 304 void summary_save_prefs_to_folderitem 305 (SummaryView *summaryview, FolderItem *item); 306 void summary_set_menu_sensitive (SummaryView *summaryview); 307 void summary_relayout(SummaryView *summaryview); 308 void summary_update_unread(SummaryView *summaryview, FolderItem *removed_item); 309 gboolean summary_is_list(SummaryView *summaryview); 310 gboolean summaryview_search_root_progress(gpointer data, guint at, guint matched, guint total); 311 gboolean summary_is_opened_message_selected(SummaryView *summaryview); 312 gboolean summary_has_opened_message(SummaryView *summaryview); 313 #endif /* __SUMMARY_H__ */