generic toolbar generation
[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_PIXMAP     "---"
24
25 typedef struct _Toolbar Toolbar;
26 typedef struct _ToolbarItem ToolbarItem;
27 typedef struct _ToolbarSylpheedActions ToolbarSylpheedActions;
28
29 typedef enum {
30         TOOLBAR_MAIN = 0,       
31         TOOLBAR_COMPOSE,
32         TOOLBAR_MSGVIEW
33 } ToolbarType;
34
35 typedef enum 
36 {
37         COMPOSEBUTTON_MAIL,
38         COMPOSEBUTTON_NEWS
39 } ComposeButtonType;
40
41 struct _Toolbar {
42         GtkWidget *toolbar;
43
44         GtkWidget *get_btn;
45         GtkWidget *getall_btn;
46         GtkWidget *send_btn;
47
48         GtkWidget *compose_mail_btn;
49         GtkWidget *compose_news_btn;
50
51         GtkWidget *reply_btn;
52         GtkWidget *replysender_btn;
53         GtkWidget *replyall_btn;
54         GtkWidget *replylist_btn;
55
56         GtkWidget *fwd_btn;
57
58         GtkWidget *delete_btn;
59         GtkWidget *next_btn;
60         GtkWidget *exec_btn;
61
62         GtkWidget *separator;
63
64         /* for the reply buttons */
65         GtkWidget *reply_popup;
66         GtkWidget *replyall_popup;
67         GtkWidget *replylist_popup;
68         GtkWidget *replysender_popup;
69         
70         /* the forward button similar to the reply buttons*/
71         GtkWidget *fwd_popup;
72
73         ComposeButtonType compose_btn_type;
74
75         /* compose buttons */
76         GtkWidget *sendl_btn;
77         GtkWidget *draft_btn;
78         GtkWidget *insert_btn;
79         GtkWidget *attach_btn;
80         GtkWidget *sig_btn;
81         GtkWidget *exteditor_btn;
82         GtkWidget *linewrap_btn;
83         GtkWidget *addrbook_btn;
84
85         GSList    *action_list;
86         GSList    *item_list;
87
88 };
89
90 struct _ToolbarItem {
91         gint             index;
92         gchar           *file;
93         gchar           *text;
94         ToolbarType      type;
95         gpointer         parent;
96 };
97
98 #define TOOLBAR_DESTROY_ITEMS(item_list) \
99 { \
100         ToolbarItem *item; \
101         while (item_list != NULL) { \
102                 item = (ToolbarItem*)item_list->data; \
103                 item_list = g_slist_remove(item_list, item); \
104                 if (item->file) \
105                         g_free(item->file); \
106                 if (item->text) \
107                         g_free(item->text); \
108                 g_free(item);\
109         }\
110         g_slist_free(item_list);\
111 }
112
113 #define TOOLBAR_DESTROY_ACTIONS(action_list) \
114 { \
115         ToolbarSylpheedActions *action; \
116         while (action_list != NULL) { \
117                 action = (ToolbarSylpheedActions*)action_list->data;\
118                 action_list = \
119                         g_slist_remove(action_list, action);\
120                 if (action->name) \
121                         g_free(action->name); \
122                 g_free(action); \
123         } \
124         g_slist_free(action_list); \
125 }
126
127
128
129
130 /* enum holds available actions for both 
131    Compose Toolbar and Main Toolbar 
132 */
133 enum {
134         /* main toolbar */
135         A_RECEIVE_ALL = 0,
136         A_RECEIVE_CUR,
137         A_SEND_QUEUED,
138         A_COMPOSE_EMAIL,
139         A_COMPOSE_NEWS,
140         A_REPLY_MESSAGE,
141         A_REPLY_SENDER,
142         A_REPLY_ALL,
143         A_REPLY_ML,
144         A_FORWARD,
145         A_DELETE,
146         A_EXECUTE,
147         A_GOTO_NEXT,
148
149         /* compose toolbar */
150         A_SEND,
151         A_SENDL,
152         A_DRAFT,
153         A_INSERT,
154         A_ATTACH,
155         A_SIG,
156         A_EXTEDITOR,
157         A_LINEWRAP,
158         A_ADDRBOOK,
159
160         /* common items */
161         A_SYL_ACTIONS,
162         A_SEPARATOR,
163
164         N_ACTION_VAL
165 };
166
167 struct _ToolbarSylpheedActions {
168         GtkWidget *widget;
169         gchar     *name;
170 };
171
172
173 void    toolbar_action_execute          (GtkWidget      *widget,
174                                          GSList         *action_list, 
175                                          gpointer        data,
176                                          gint            source);
177
178 GList   *toolbar_get_action_items       (ToolbarType     source);
179
180 void    toolbar_save_config_file        (ToolbarType     source);
181 void    toolbar_read_config_file        (ToolbarType     source);
182
183 void    toolbar_set_default             (ToolbarType     source);
184 void    toolbar_clear_list              (ToolbarType     source);
185
186 GSList  *toolbar_get_list               (ToolbarType     source);
187 void    toolbar_set_list_item           (ToolbarItem    *t_item, 
188                                          ToolbarType     source);
189
190 gint    toolbar_ret_val_from_descr      (const gchar    *descr);
191 gchar   *toolbar_ret_descr_from_val     (gint            val);
192
193 void    toolbar_main_set_sensitive      (gpointer        data);
194 void    toolbar_comp_set_sensitive      (gpointer        data, 
195                                          gboolean        sensitive);
196
197 /* invoked by mainwindow entries and toolbar actions */
198 void    delete_msgview_cb               (gpointer        data, 
199                                          guint           action, 
200                                          GtkWidget      *widget);
201 void    reply_cb                        (gpointer        data, 
202                                          guint           action, 
203                                          GtkWidget      *widget);
204 void    inc_mail_cb                     (gpointer        data,
205                                          guint           action,
206                                          GtkWidget      *widget);
207 void    inc_all_account_mail_cb         (gpointer        data,
208                                          guint           action,
209                                          GtkWidget      *widget);
210 void    send_queue_cb                   (gpointer        data,
211                                          guint           action,
212                                          GtkWidget      *widget);
213 void    compose_mail_cb                 (gpointer       data, 
214                                          guint           action,
215                                          GtkWidget      *widget);
216 void    compose_news_cb                 (gpointer        data, 
217                                          guint           action,
218                                          GtkWidget      *widget);
219 /* END */
220
221 void    toolbar_toggle                  (guint           action,
222                                          gpointer        data);
223 void    toolbar_update                  (ToolbarType     type, 
224                                         gpointer         data);        
225 Toolbar *toolbar_create                 (ToolbarType     type, 
226                                          GtkWidget      *container,
227                                          gpointer        data);
228 void    toolbar_set_style               (GtkWidget      *toolbar_wid,
229                                          GtkWidget      *handlebox_wid,
230                                          guint           action);
231 void    toolbar_destroy                 (Toolbar        *toolbar);
232 void    toolbar_init                    (Toolbar        *toolbar);
233                                             
234 #endif /* __CUSTOM_TOOLBAR_H__ */