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