18097d395163f59fc21b79122cc65bf0b7590cbe
[claws.git] / src / toolbar.h
1 /*
2  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3  * Copyright (C) 2001-2007 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 2 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, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
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 _ToolbarSylpheedActions ToolbarSylpheedActions;
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 *get_btn;
53         GtkWidget *getall_btn;
54         ComboButton *getall_combo;
55         GtkWidget *send_btn;
56
57         GtkWidget *compose_mail_btn;
58         GtkWidget *compose_news_btn;
59         ComboButton *compose_combo;
60
61         GtkWidget *reply_btn;
62         ComboButton *reply_combo;
63         GtkWidget *replysender_btn;
64         ComboButton *replysender_combo;
65         GtkWidget *replyall_btn;
66         ComboButton *replyall_combo;
67         GtkWidget *replylist_btn;
68         ComboButton *replylist_combo;
69
70         GtkWidget *fwd_btn;
71         ComboButton *fwd_combo;
72         
73         GtkWidget *trash_btn;
74         GtkWidget *delete_btn;
75         GtkWidget *prev_btn;
76         GtkWidget *next_btn;
77         GtkWidget *exec_btn;
78
79         GtkWidget *separator;
80         GtkWidget *learn_spam_btn;
81         GtkWidget *learn_ham_btn;
82         ComboButton *ham_combo;
83         
84         GtkWidget *cancel_inc_btn;
85         
86         ComposeButtonType compose_btn_type;
87         LearnButtonType learn_btn_type;
88
89         /* compose buttons */
90         GtkWidget *sendl_btn;
91         GtkWidget *draft_btn;
92         GtkWidget *insert_btn;
93         GtkWidget *attach_btn;
94         GtkWidget *sig_btn;
95         GtkWidget *exteditor_btn;
96         GtkWidget *linewrap_current_btn;
97         GtkWidget *linewrap_all_btn;
98         GtkWidget *addrbook_btn;
99 #ifdef USE_ASPELL
100         GtkWidget *spellcheck_btn;
101 #endif
102
103         GSList    *action_list;
104         GSList    *item_list;
105
106 };
107
108 struct _ToolbarItem {
109         gint             index;
110         gchar           *file;
111         gchar           *text;
112         ToolbarType      type;
113         gpointer         parent;
114 };
115
116 #define TOOLBAR_DESTROY_ITEMS(item_list) \
117 { \
118         ToolbarItem *item; \
119         while (item_list != NULL) { \
120                 item = (ToolbarItem*)item_list->data; \
121                 item_list = g_slist_remove(item_list, item); \
122                 if (item->file) \
123                         g_free(item->file); \
124                 if (item->text) \
125                         g_free(item->text); \
126                 g_free(item);\
127         }\
128         g_slist_free(item_list);\
129 }
130
131 #define TOOLBAR_DESTROY_ACTIONS(action_list) \
132 { \
133         ToolbarSylpheedActions *action; \
134         while (action_list != NULL) { \
135                 action = (ToolbarSylpheedActions*)action_list->data;\
136                 action_list = \
137                         g_slist_remove(action_list, action);\
138                 if (action->name) \
139                         g_free(action->name); \
140                 g_free(action); \
141         } \
142         g_slist_free(action_list); \
143 }
144
145
146
147
148 /* enum holds available actions for both 
149    Compose Toolbar and Main Toolbar 
150 */
151 enum {
152         /* main toolbar */
153         A_RECEIVE_ALL = 0,
154         A_RECEIVE_CUR,
155         A_SEND_QUEUED,
156         A_COMPOSE_EMAIL,
157         A_COMPOSE_NEWS,
158         A_REPLY_MESSAGE,
159         A_REPLY_SENDER,
160         A_REPLY_ALL,
161         A_REPLY_ML,
162         A_FORWARD,
163         A_TRASH,
164         A_DELETE_REAL,
165         A_EXECUTE,
166         A_GOTO_PREV,
167         A_GOTO_NEXT,
168         A_IGNORE_THREAD,
169         A_PRINT,
170         A_LEARN_SPAM,
171
172         /* compose toolbar */
173         A_SEND,
174         A_SENDL,
175         A_DRAFT,
176         A_INSERT,
177         A_ATTACH,
178         A_SIG,
179         A_EXTEDITOR,
180         A_LINEWRAP_CURRENT,
181         A_LINEWRAP_ALL,
182         A_ADDRBOOK,
183 #ifdef USE_ASPELL
184         A_CHECK_SPELLING,
185 #endif
186
187         /* common items */
188         A_SYL_ACTIONS,
189         A_CANCEL_INC,
190
191         A_SEPARATOR,
192
193         N_ACTION_VAL
194 };
195
196 struct _ToolbarSylpheedActions {
197         GtkWidget *widget;
198         gchar     *name;
199 };
200
201
202 void    toolbar_action_execute          (GtkWidget      *widget,
203                                          GSList         *action_list, 
204                                          gpointer        data,
205                                          gint            source);
206
207 GList   *toolbar_get_action_items       (ToolbarType     source);
208
209 void    toolbar_save_config_file        (ToolbarType     source);
210 void    toolbar_read_config_file        (ToolbarType     source);
211
212 void    toolbar_set_default             (ToolbarType     source);
213 void    toolbar_clear_list              (ToolbarType     source);
214
215 GSList  *toolbar_get_list               (ToolbarType     source);
216 void    toolbar_set_list_item           (ToolbarItem    *t_item, 
217                                          ToolbarType     source);
218
219 gint    toolbar_ret_val_from_descr      (const gchar    *descr);
220 gchar   *toolbar_ret_descr_from_val     (gint            val);
221
222 void    toolbar_main_set_sensitive      (gpointer        data);
223 void    toolbar_comp_set_sensitive      (gpointer        data, 
224                                          gboolean        sensitive);
225
226 /* invoked by mainwindow entries and toolbar actions */
227 void    delete_msgview_cb               (gpointer        data, 
228                                          guint           action, 
229                                          GtkWidget      *widget);
230 void    inc_mail_cb                     (gpointer        data,
231                                          guint           action,
232                                          GtkWidget      *widget);
233 void    inc_all_account_mail_cb         (gpointer        data,
234                                          guint           action,
235                                          GtkWidget      *widget);
236 void    send_queue_cb                   (gpointer        data,
237                                          guint           action,
238                                          GtkWidget      *widget);
239 void    compose_mail_cb                 (gpointer       data, 
240                                          guint           action,
241                                          GtkWidget      *widget);
242 void    compose_news_cb                 (gpointer        data, 
243                                          guint           action,
244                                          GtkWidget      *widget);
245 /* END */
246
247 void    toolbar_toggle                  (guint           action,
248                                          gpointer        data);
249 void    toolbar_update                  (ToolbarType     type, 
250                                         gpointer         data);        
251 Toolbar *toolbar_create                 (ToolbarType     type, 
252                                          GtkWidget      *container,
253                                          gpointer        data);
254 void    toolbar_set_style               (GtkWidget      *toolbar_wid,
255                                          GtkWidget      *handlebox_wid,
256                                          guint           action);
257 void    toolbar_destroy                 (Toolbar        *toolbar);
258 void    toolbar_init                    (Toolbar        *toolbar);
259 void toolbar_set_learn_button           (Toolbar        *toolbar, 
260                                          LearnButtonType  learn_btn_type);
261
262 #endif /* __CUSTOM_TOOLBAR_H__ */