New method for OAuth2 authentication and receiving of access token from David Fletche...
[claws.git] / src / toolbar.h
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                 toolbar_item_destroy(item); \
131         }\
132         g_slist_free(item_list);\
133 }
134
135 #define TOOLBAR_DESTROY_ACTIONS(action_list) \
136 { \
137         ToolbarClawsActions *action; \
138         while (action_list != NULL) { \
139                 action = (ToolbarClawsActions*)action_list->data;\
140                 action_list = \
141                         g_slist_remove(action_list, action);\
142                 if (action->name) \
143                         g_free(action->name); \
144                 g_free(action); \
145         } \
146         g_slist_free(action_list); \
147 }
148
149
150
151
152 /* enum holds available actions for both
153    Compose Toolbar and Main Toolbar
154 */
155 enum {
156         /* main toolbar */
157         A_RECEIVE_ALL = 0,
158         A_RECEIVE_CUR,
159         A_SEND_QUEUED,
160         A_COMPOSE_EMAIL,
161         A_COMPOSE_NEWS,
162         A_REPLY_MESSAGE,
163         A_REPLY_SENDER,
164         A_REPLY_ALL,
165         A_REPLY_ML,
166         A_OPEN_MAIL,
167         A_FORWARD,
168         A_TRASH,
169         A_DELETE_REAL,
170         A_DELETE_DUP,
171         A_EXECUTE,
172         A_GOTO_PREV,
173         A_GOTO_NEXT,
174
175         A_IGNORE_THREAD,
176         A_WATCH_THREAD,
177         A_MARK,
178         A_UNMARK,
179         A_LOCK,
180         A_UNLOCK,
181         A_ALL_READ,
182         A_ALL_UNREAD,
183         A_READ,
184         A_UNREAD,
185         A_RUN_PROCESSING,
186
187         A_PRINT,
188         A_LEARN_SPAM,
189         A_GO_FOLDERS,
190         A_PREFERENCES,
191
192         /* compose toolbar */
193         A_SEND,
194         A_SEND_LATER,
195         A_DRAFT,
196         A_INSERT,
197         A_ATTACH,
198         A_SIG,
199         A_REP_SIG,
200         A_EXTEDITOR,
201         A_LINEWRAP_CURRENT,
202         A_LINEWRAP_ALL,
203         A_ADDRBOOK,
204 #ifdef USE_ENCHANT
205         A_CHECK_SPELLING,
206 #endif
207         A_PRIVACY_SIGN,
208         A_PRIVACY_ENCRYPT,
209
210         /* common items */
211         A_CLAWS_ACTIONS,
212         A_CANCEL_INC,
213         A_CANCEL_SEND,
214         A_CANCEL_ALL,
215         A_CLOSE,
216
217         A_SEPARATOR,
218
219         A_CLAWS_PLUGINS,
220
221         N_ACTION_VAL
222 };
223
224 struct _ToolbarClawsActions {
225         GtkWidget *widget;
226         gchar     *name;
227 };
228
229
230 GList   *toolbar_get_action_items       (ToolbarType     source);
231
232 void    toolbar_save_config_file        (ToolbarType     source);
233 void    toolbar_read_config_file        (ToolbarType     source);
234
235 void    toolbar_set_default             (ToolbarType     source);
236 void    toolbar_clear_list              (ToolbarType     source);
237
238 GSList  *toolbar_get_list               (ToolbarType     source);
239 void    toolbar_set_list_item           (ToolbarItem    *t_item, 
240                                          ToolbarType     source);
241
242 gint    toolbar_ret_val_from_descr      (const gchar    *descr);
243 gchar   *toolbar_ret_descr_from_val     (gint            val);
244
245 void    toolbar_main_set_sensitive      (gpointer        data);
246 void    toolbar_comp_set_sensitive      (gpointer        data, 
247                                          gboolean        sensitive);
248
249 /* invoked by mainwindow entries and toolbar actions */
250 void    delete_msgview_cb               (gpointer        data, 
251                                          guint           action, 
252                                          GtkWidget      *widget);
253 void    inc_mail_cb                     (gpointer        data,
254                                          guint           action,
255                                          GtkWidget      *widget);
256 void    inc_all_account_mail_cb         (gpointer        data,
257                                          guint           action,
258                                          GtkWidget      *widget);
259 void    send_queue_cb                   (gpointer        data,
260                                          guint           action,
261                                          GtkWidget      *widget);
262 void    compose_mail_cb                 (gpointer       data, 
263                                          guint           action,
264                                          GtkWidget      *widget);
265 void    compose_news_cb                 (gpointer        data, 
266                                          guint           action,
267                                          GtkWidget      *widget);
268 /* END */
269
270 void    toolbar_toggle                  (guint           action,
271                                          gpointer        data);
272 void    toolbar_update                  (ToolbarType     type, 
273                                         gpointer         data);        
274 Toolbar *toolbar_create                 (ToolbarType     type, 
275                                          GtkWidget      *container,
276                                          gpointer        data);
277 void    toolbar_set_style               (GtkWidget      *toolbar_wid,
278                                          GtkWidget      *handlebox_wid,
279                                          guint           action);
280 void    toolbar_destroy                 (Toolbar        *toolbar);
281 void    toolbar_item_destroy            (ToolbarItem    *toolbar_item);
282
283 void toolbar_set_learn_button           (Toolbar        *toolbar, 
284                                          LearnButtonType  learn_btn_type);
285 const gchar *toolbar_get_short_text     (int action);
286 int          toolbar_get_icon           (int action);
287 gboolean toolbar_check_action_btns      (ToolbarType    type);
288 #endif /* __CUSTOM_TOOLBAR_H__ */