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