1 /*
2  *
3  * This program is free software; you can redistribute it and/or modify it
4  * under the terms of the GNU Lesser General Public License as published by
5  * the Free Software Foundation.
6  *
7  * This program is distributed in the hope that it will be useful, but
8  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
9  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
10  * for more details.
11  *
12  * You should have received a copy of the GNU Lesser General Public License
13  * along with this program; if not, see <http://www.gnu.org/licenses/>.
14  *
15  *
16  * Authors:
17  *		Michel Zucchi <notzed@ximian.com>
18  *
19  * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
20  *
21  */
22 
23 #ifndef EM_EVENT_H
24 #define EM_EVENT_H
25 
26 #include <composer/e-msg-composer.h>
27 
28 /* Standard GObject macros */
29 #define EM_TYPE_EVENT \
30 	(em_event_get_type ())
31 #define EM_EVENT(obj) \
32 	(G_TYPE_CHECK_INSTANCE_CAST \
33 	((obj), EM_TYPE_EVENT, EMEvent))
34 #define EM_EVENT_CLASS(cls) \
35 	(G_TYPE_CHECK_CLASS_CAST \
36 	((cls), EM_TYPE_EVENT, EMEventClass))
37 #define EM_IS_EVENT(obj) \
38 	(G_TYPE_CHECK_INSTANCE_TYPE \
39 	((obj), EM_TYPE_EVENT))
40 #define EM_IS_EVENT_CLASS(cls) \
41 	(G_TYPE_CHECK_CLASS_TYPE \
42 	((cls), EM_TYPE_EVENT))
43 #define EM_EVENT_GET_CLASS(obj) \
44 	(G_TYPE_INSTANCE_GET_CLASS \
45 	((obj), EM_TYPE_EVENT, EMEventClass))
46 
47 G_BEGIN_DECLS
48 
49 typedef struct _EMEvent EMEvent;
50 typedef struct _EMEventClass EMEventClass;
51 typedef struct _EMEventPrivate EMEventPrivate;
52 
53 /* Current target description */
54 enum _em_event_target_t {
55 	EM_EVENT_TARGET_FOLDER,
56 	EM_EVENT_TARGET_MESSAGE,
57 	EM_EVENT_TARGET_COMPOSER,
58 	EM_EVENT_TARGET_SEND_RECEIVE,
59 	EM_EVENT_TARGET_CUSTOM_ICON,
60 	EM_EVENT_TARGET_FOLDER_UNREAD
61 };
62 
63 /* Flags that describe TARGET_FOLDER */
64 enum {
65 	EM_EVENT_FOLDER_NEWMAIL = 1<< 0
66 };
67 
68 /* Flags that describe TARGET_MESSAGE */
69 enum {
70 	EM_EVENT_MESSAGE_REPLY_ALL = 1<< 0,
71 	EM_EVENT_MESSAGE_REPLY = 1<< 1
72 };
73 
74 /* Flags that describe TARGET_COMPOSER */
75 enum {
76 	EM_EVENT_COMPOSER_SEND_OPTION = 1<< 0
77 };
78 
79 /* Flags that describe TARGET_SEND_RECEIVE*/
80 enum {
81 	EM_EVENT_SEND_RECEIVE = 1<< 0
82 };
83 
84 /* Flags that describe TARGET_CUSTOM_ICON*/
85 enum {
86 	EM_EVENT_CUSTOM_ICON = 1<< 0
87 };
88 
89 typedef struct _EMEventTargetFolder EMEventTargetFolder;
90 
91 struct _EMEventTargetFolder {
92 	EEventTarget target;
93 	CamelStore *store;
94 	gchar *folder_name;
95 	guint new;
96 	gboolean is_inbox;
97 	gchar *display_name;
98 	gchar *full_display_name;
99 
100 	/* valid (non-NULL) when only one new message reported */
101 	gchar *msg_uid;
102 	gchar *msg_sender;
103 	gchar *msg_subject;
104 };
105 
106 typedef struct _EMEventTargetFolderUnread EMEventTargetFolderUnread;
107 
108 struct _EMEventTargetFolderUnread {
109 	EEventTarget target;
110 	CamelStore *store;
111 	gchar *folder_uri;
112 	guint unread;
113 	gboolean is_inbox;
114 };
115 
116 typedef struct _EMEventTargetMessage EMEventTargetMessage;
117 
118 struct _EMEventTargetMessage {
119 	EEventTarget target;
120 	CamelFolder *folder;
121 	gchar *uid;
122 	CamelMimeMessage *message;
123 	EMsgComposer *composer;
124 };
125 
126 typedef struct _EMEventTargetComposer EMEventTargetComposer;
127 
128 struct _EMEventTargetComposer {
129 	EEventTarget target;
130 	EMsgComposer *composer;
131 };
132 
133 typedef struct _EMEventTargetSendReceive EMEventTargetSendReceive;
134 
135 struct _EMEventTargetSendReceive {
136 	EEventTarget target;
137 	GtkWidget *grid;
138 	gpointer data;
139 	gint row;
140 };
141 
142 typedef struct _EMEventTargetCustomIcon EMEventTargetCustomIcon;
143 
144 struct _EMEventTargetCustomIcon {
145 	EEventTarget target;
146 	GtkTreeStore *store;
147 	GtkTreeIter *iter;
148 	const gchar *folder_name;
149 };
150 
151 typedef struct _EEventItem EMEventItem;
152 
153 /* The object */
154 struct _EMEvent {
155 	EEvent popup;
156 	EMEventPrivate *priv;
157 };
158 
159 struct _EMEventClass {
160 	EEventClass popup_class;
161 };
162 
163 GType		em_event_get_type		(void);
164 EMEvent *	em_event_peek			(void);
165 EMEventTargetFolder *
166 		em_event_target_new_folder	(EMEvent *emp,
167 						 CamelStore *store,
168 						 const gchar *folder_name,
169 						 guint32 count_new_msgs,
170 						 const gchar *msg_uid,
171 						 const gchar *msg_sender,
172 						 const gchar *msg_subject);
173 EMEventTargetFolderUnread *
174 		em_event_target_new_folder_unread
175 						(EMEvent *emp,
176 						 CamelStore *store,
177 						 const gchar *folder_uri,
178 						 guint32 count_unread_msgs);
179 EMEventTargetComposer *
180 		em_event_target_new_composer	(EMEvent *emp,
181 						 EMsgComposer *composer,
182 						 guint32 flags);
183 EMEventTargetMessage *
184 		em_event_target_new_message	(EMEvent *emp,
185 						 CamelFolder *folder,
186 						 CamelMimeMessage *message,
187 						 const gchar *uid,
188 						 guint32 flags,
189 						 EMsgComposer *composer);
190 EMEventTargetSendReceive *
191 		em_event_target_new_send_receive
192 						(EMEvent *eme,
193 						 GtkWidget *grid,
194 						 gpointer data,
195 						 gint row,
196 						 guint32 flags);
197 EMEventTargetCustomIcon *
198 		em_event_target_new_custom_icon	(EMEvent *eme,
199 						 GtkTreeStore *store,
200 						 GtkTreeIter *iter,
201 						 const gchar *uri,
202 						 guint32 flags);
203 
204 G_END_DECLS
205 
206 #endif /* EM_EVENT_H */
207