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