0.8.6claws111
[claws.git] / src / toolbar.h
1 /*
2  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3  * Copyright (C) 1999-2002 Hiroyuki Yamamoto
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 #define SEPARATOR            "separator"
24 #define SEPARATOR_PIXMAP     "---"
25
26 typedef struct _ToolbarSylpheedActions ToolbarSylpheedActions;
27 typedef struct _ToolbarConfig ToolbarConfig;
28 typedef struct _ToolbarItem ToolbarItem;
29 typedef struct _ToolbarParent ToolbarParent;
30 typedef struct _Toolbar Toolbar;
31
32 typedef enum {
33         TOOLBAR_MAIN = 0,       
34         TOOLBAR_COMPOSE,
35         TOOLBAR_MSGVIEW
36 } ToolbarType;
37
38 typedef enum 
39 {
40         COMPOSEBUTTON_MAIL,
41         COMPOSEBUTTON_NEWS
42 } ComposeButtonType;
43
44 struct _Toolbar {
45         GtkWidget *toolbar;
46
47         GtkWidget *get_btn;
48         GtkWidget *getall_btn;
49         GtkWidget *send_btn;
50
51         GtkWidget *compose_mail_btn;
52         GtkWidget *compose_news_btn;
53
54         GtkWidget *reply_btn;
55         GtkWidget *replysender_btn;
56         GtkWidget *replyall_btn;
57         GtkWidget *replylist_btn;
58
59         GtkWidget *fwd_btn;
60
61         GtkWidget *delete_btn;
62         GtkWidget *next_btn;
63         GtkWidget *exec_btn;
64
65         GtkWidget *separator;
66
67         /* for the reply buttons */
68         GtkWidget *reply_popup;
69         GtkWidget *replyall_popup;
70         GtkWidget *replylist_popup;
71         GtkWidget *replysender_popup;
72         
73         /* the forward button similar to the reply buttons*/
74         GtkWidget *fwd_popup;
75
76         ComposeButtonType compose_btn_type;
77
78         /* compose buttons */
79         GtkWidget *sendl_btn;
80         GtkWidget *draft_btn;
81         GtkWidget *insert_btn;
82         GtkWidget *attach_btn;
83         GtkWidget *sig_btn;
84         GtkWidget *exteditor_btn;
85         GtkWidget *linewrap_btn;
86         GtkWidget *addrbook_btn;
87
88         GSList    *action_list;
89         GSList    *item_list;
90
91 };
92
93 struct _ToolbarParent {
94         ToolbarType type;
95         gpointer    data;
96 };
97
98
99 #define TOOLBAR_DESTROY_ITEMS(item_list) \
100 { \
101         ToolbarItem *item; \
102         while (item_list != NULL) { \
103                 item = (ToolbarItem*)item_list->data; \
104                 item_list = g_slist_remove(item_list, item); \
105                 if (item->file) \
106                         g_free(item->file); \
107                 if (item->text) \
108                         g_free(item->text); \
109                 if (item->parent) \
110                         g_free(item->parent); \
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 struct _ToolbarConfig {
131         const gchar  *conf_file;
132         GSList       *item_list;
133 };
134
135
136 /* enum holds available actions for both 
137    Compose Toolbar and Main Toolbar 
138 */
139 enum {
140         /* main toolbar */
141         A_RECEIVE_ALL = 0,
142         A_RECEIVE_CUR,
143         A_SEND_QUEUED,
144         A_COMPOSE_EMAIL,
145         A_COMPOSE_NEWS,
146         A_REPLY_MESSAGE,
147         A_REPLY_SENDER,
148         A_REPLY_ALL,
149         A_REPLY_ML,
150         A_FORWARD,
151         A_DELETE,
152         A_EXECUTE,
153         A_GOTO_NEXT,
154
155         /* compose toolbar */
156         A_SEND,
157         A_SENDL,
158         A_DRAFT,
159         A_INSERT,
160         A_ATTACH,
161         A_SIG,
162         A_EXTEDITOR,
163         A_LINEWRAP,
164         A_ADDRBOOK,
165
166         /* common items */
167         A_SYL_ACTIONS,
168         A_SEPARATOR,
169
170         N_ACTION_VAL
171 };
172
173 struct _ToolbarItem 
174 {
175         gint      index;
176         gchar    *file;
177         gchar    *text;
178         ToolbarParent *parent;
179 };
180
181
182 struct _ToolbarSylpheedActions
183 {
184         GtkWidget *widget;
185         gchar     *name;
186 };
187
188
189 void      toolbar_action_execute           (GtkWidget           *widget,
190                                             GSList              *action_list, 
191                                             gpointer            data,
192                                             gint                source);
193
194 GList    *toolbar_get_action_items         (ToolbarType         source);
195
196 void      toolbar_save_config_file         (ToolbarType         source);
197 void      toolbar_read_config_file         (ToolbarType         source);
198
199 void      toolbar_set_default              (ToolbarType         source);
200 void      toolbar_clear_list               (ToolbarType         source);
201
202 GSList   *toolbar_get_list                 (ToolbarType         source);
203 void      toolbar_set_list_item            (ToolbarItem        *t_item, 
204                                             ToolbarType         source);
205
206 gint      toolbar_ret_val_from_descr       (const gchar        *descr);
207 gchar    *toolbar_ret_descr_from_val       (gint                val);
208
209 void common_toolbar_delete_cb              (GtkWidget           *widget,
210                                             gpointer             data);
211
212 void common_toolbar_compose_cb             (GtkWidget           *widget,
213                                             gpointer             data);
214
215 void common_toolbar_reply_cb               (GtkWidget           *widget,
216                                             gpointer             data);
217
218 void common_toolbar_reply_to_all_cb        (GtkWidget           *widget,
219                                             gpointer             data);
220
221 void common_toolbar_reply_to_list_cb       (GtkWidget           *widget,
222                                             gpointer             data);
223
224 void common_toolbar_reply_to_sender_cb     (GtkWidget           *widget,
225                                             gpointer             data);
226
227 void common_toolbar_forward_cb             (GtkWidget           *widget,
228                                             gpointer             data);
229
230 void common_toolbar_next_unread_cb         (GtkWidget           *widget,
231                                             gpointer             data);
232
233 void common_toolbar_actions_execute_cb     (GtkWidget           *widget,
234                                             gpointer             data);
235
236 void common_toolbar_set_style              (gpointer             data, 
237                                             ToolbarType          type);
238 #endif /* __CUSTOM_TOOLBAR_H__ */