1 /* 2 * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client 3 * Copyright (C) 2001-2017 Hiroyuki Yamamoto and the Claws Mail team 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 __CUSTOM_TOOLBAR_H__ 20 #define __CUSTOM_TOOLBAR_H__ 21 22 #include "gtk/gtkutils.h" 23 24 #define SEPARATOR_PIXMAP "---" 25 26 typedef struct _Toolbar Toolbar; 27 typedef struct _ToolbarItem ToolbarItem; 28 typedef struct _ToolbarClawsActions ToolbarClawsActions; 29 30 typedef enum { 31 TOOLBAR_MAIN = 0, 32 TOOLBAR_COMPOSE, 33 TOOLBAR_MSGVIEW 34 } ToolbarType; 35 36 #define NUM_TOOLBARS 3 37 38 typedef enum 39 { 40 COMPOSEBUTTON_MAIL, 41 COMPOSEBUTTON_NEWS 42 } ComposeButtonType; 43 44 typedef enum 45 { 46 LEARN_SPAM, 47 LEARN_HAM 48 } LearnButtonType; 49 50 struct _Toolbar { 51 GtkWidget *toolbar; 52 53 GtkWidget *folders_btn; 54 GtkWidget *get_btn; 55 GtkWidget *getall_btn; 56 GtkWidget *send_btn; 57 58 GtkWidget *compose_mail_btn; 59 GtkWidget *compose_mail_icon; 60 GtkWidget *compose_news_icon; 61 62 GtkWidget *reply_btn; 63 GtkWidget *replysender_btn; 64 GtkWidget *replyall_btn; 65 GtkWidget *replylist_btn; 66 67 GtkWidget *fwd_btn; 68 69 GtkWidget *trash_btn; 70 GtkWidget *delete_btn; 71 GtkWidget *delete_dup_btn; 72 GtkWidget *prev_btn; 73 GtkWidget *next_btn; 74 GtkWidget *exec_btn; 75 76 GtkWidget *separator; 77 GtkWidget *learn_spam_btn; 78 GtkWidget *learn_spam_icon; 79 GtkWidget *learn_ham_icon; 80 81 GtkWidget *cancel_inc_btn; 82 GtkWidget *cancel_send_btn; 83 GtkWidget *cancel_all_btn; 84 85 ComposeButtonType compose_btn_type; 86 LearnButtonType learn_btn_type; 87 88 /* compose buttons */ 89 GtkWidget *sendl_btn; 90 GtkWidget *draft_btn; 91 GtkWidget *insert_btn; 92 GtkWidget *attach_btn; 93 GtkWidget *sig_btn; 94 GtkWidget *repsig_btn; 95 GtkWidget *exteditor_btn; 96 GtkWidget *linewrap_current_btn; 97 GtkWidget *linewrap_all_btn; 98 GtkWidget *addrbook_btn; 99 100 GtkWidget *open_mail_btn; 101 GtkWidget *close_window_btn; 102 103 GtkWidget *preferences_btn; 104 105 GSList *action_list; 106 GSList *item_list; 107 108 #ifdef USE_ENCHANT 109 GtkWidget *spellcheck_btn; 110 #endif 111 112 GtkWidget *privacy_sign_btn; 113 GtkWidget *privacy_encrypt_btn; 114 }; 115 116 struct _ToolbarItem { 117 gint index; 118 gchar *file; 119 gchar *text; 120 ToolbarType type; 121 gpointer parent; 122 }; 123 124 #define TOOLBAR_DESTROY_ITEMS(item_list) \ 125 { \ 126 ToolbarItem *item; \ 127 while (item_list != NULL) { \ 128 item = (ToolbarItem*)item_list->data; \ 129 item_list = g_slist_remove(item_list, item); \ 130 if (item->file) \ 131 g_free(item->file); \ 132 if (item->text) \ 133 g_free(item->text); \ 134 g_free(item);\ 135 }\ 136 g_slist_free(item_list);\ 137 } 138 139 #define TOOLBAR_DESTROY_ACTIONS(action_list) \ 140 { \ 141 ToolbarClawsActions *action; \ 142 while (action_list != NULL) { \ 143 action = (ToolbarClawsActions*)action_list->data;\ 144 action_list = \ 145 g_slist_remove(action_list, action);\ 146 if (action->name) \ 147 g_free(action->name); \ 148 g_free(action); \ 149 } \ 150 g_slist_free(action_list); \ 151 } 152 153 154 155 156 /* enum holds available actions for both 157 Compose Toolbar and Main Toolbar 158 */ 159 enum { 160 /* main toolbar */ 161 A_RECEIVE_ALL = 0, 162 A_RECEIVE_CUR, 163 A_SEND_QUEUED, 164 A_COMPOSE_EMAIL, 165 A_COMPOSE_NEWS, 166 A_REPLY_MESSAGE, 167 A_REPLY_SENDER, 168 A_REPLY_ALL, 169 A_REPLY_ML, 170 A_OPEN_MAIL, 171 A_FORWARD, 172 A_TRASH, 173 A_DELETE_REAL, 174 A_DELETE_DUP, 175 A_EXECUTE, 176 A_GOTO_PREV, 177 A_GOTO_NEXT, 178 179 A_IGNORE_THREAD, 180 A_WATCH_THREAD, 181 A_MARK, 182 A_UNMARK, 183 A_LOCK, 184 A_UNLOCK, 185 A_ALL_READ, 186 A_ALL_UNREAD, 187 A_READ, 188 A_UNREAD, 189 190 A_PRINT, 191 A_LEARN_SPAM, 192 A_GO_FOLDERS, 193 A_PREFERENCES, 194 195 /* compose toolbar */ 196 A_SEND, 197 A_SEND_LATER, 198 A_DRAFT, 199 A_INSERT, 200 A_ATTACH, 201 A_SIG, 202 A_REP_SIG, 203 A_EXTEDITOR, 204 A_LINEWRAP_CURRENT, 205 A_LINEWRAP_ALL, 206 A_ADDRBOOK, 207 #ifdef USE_ENCHANT 208 A_CHECK_SPELLING, 209 #endif 210 A_PRIVACY_SIGN, 211 A_PRIVACY_ENCRYPT, 212 213 /* common items */ 214 A_CLAWS_ACTIONS, 215 A_CANCEL_INC, 216 A_CANCEL_SEND, 217 A_CANCEL_ALL, 218 A_CLOSE, 219 220 A_SEPARATOR, 221 222 A_CLAWS_PLUGINS, 223 224 N_ACTION_VAL 225 }; 226 227 struct _ToolbarClawsActions { 228 GtkWidget *widget; 229 gchar *name; 230 }; 231 232 233 GList *toolbar_get_action_items (ToolbarType source); 234 235 void toolbar_save_config_file (ToolbarType source); 236 void toolbar_read_config_file (ToolbarType source); 237 238 void toolbar_set_default (ToolbarType source); 239 void toolbar_clear_list (ToolbarType source); 240 241 GSList *toolbar_get_list (ToolbarType source); 242 void toolbar_set_list_item (ToolbarItem *t_item, 243 ToolbarType source); 244 245 gint toolbar_ret_val_from_descr (const gchar *descr); 246 gchar *toolbar_ret_descr_from_val (gint val); 247 248 void toolbar_main_set_sensitive (gpointer data); 249 void toolbar_comp_set_sensitive (gpointer data, 250 gboolean sensitive); 251 252 /* invoked by mainwindow entries and toolbar actions */ 253 void delete_msgview_cb (gpointer data, 254 guint action, 255 GtkWidget *widget); 256 void inc_mail_cb (gpointer data, 257 guint action, 258 GtkWidget *widget); 259 void inc_all_account_mail_cb (gpointer data, 260 guint action, 261 GtkWidget *widget); 262 void send_queue_cb (gpointer data, 263 guint action, 264 GtkWidget *widget); 265 void compose_mail_cb (gpointer data, 266 guint action, 267 GtkWidget *widget); 268 void compose_news_cb (gpointer data, 269 guint action, 270 GtkWidget *widget); 271 /* END */ 272 273 void toolbar_toggle (guint action, 274 gpointer data); 275 void toolbar_update (ToolbarType type, 276 gpointer data); 277 Toolbar *toolbar_create (ToolbarType type, 278 GtkWidget *container, 279 gpointer data); 280 void toolbar_set_style (GtkWidget *toolbar_wid, 281 GtkWidget *handlebox_wid, 282 guint action); 283 void toolbar_destroy (Toolbar *toolbar); 284 void toolbar_set_learn_button (Toolbar *toolbar, 285 LearnButtonType learn_btn_type); 286 const gchar *toolbar_get_short_text (int action); 287 int toolbar_get_icon (int action); 288 gboolean toolbar_check_action_btns (ToolbarType type); 289 #endif /* __CUSTOM_TOOLBAR_H__ */ 290