c4af36c0e630384db3ea1aa7b70f4f2d0ae23189
[modest] / src / widgets / modest-msg-edit-window.h
1 /* Copyright (c) 2006,2007 Nokia Corporation
2  * All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *
8  * * Redistributions of source code must retain the above copyright
9  *   notice, this list of conditions and the following disclaimer.
10  * * Redistributions in binary form must reproduce the above copyright
11  *   notice, this list of conditions and the following disclaimer in the
12  *   documentation and/or other materials provided with the distribution.
13  * * Neither the name of the Nokia Corporation nor the names of its
14  *   contributors may be used to endorse or promote products derived from
15  *   this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
18  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
20  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
21  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29
30 #ifndef __MODEST_MSG_EDIT_WINDOW_H__
31 #define __MODEST_MSG_EDIT_WINDOW_H__
32
33 #include <tny-msg.h>
34 #include <widgets/modest-window.h>
35
36 G_BEGIN_DECLS
37
38 /* convenience macros */
39 #define MODEST_TYPE_MSG_EDIT_WINDOW             (modest_msg_edit_window_get_type())
40 #define MODEST_MSG_EDIT_WINDOW(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_MSG_EDIT_WINDOW,ModestMsgEditWindow))
41 #define MODEST_MSG_EDIT_WINDOW_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_MSG_EDIT_WINDOW,ModestWindow))
42 #define MODEST_IS_MSG_EDIT_WINDOW(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_MSG_EDIT_WINDOW))
43 #define MODEST_IS_MSG_EDIT_WINDOW_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_MSG_EDIT_WINDOW))
44 #define MODEST_MSG_EDIT_WINDOW_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_MSG_EDIT_WINDOW,ModestMsgEditWindowClass))
45
46 typedef struct _ModestMsgEditWindow      ModestMsgEditWindow;
47 typedef struct _ModestMsgEditWindowClass ModestMsgEditWindowClass;
48
49 struct _ModestMsgEditWindow {
50          ModestWindow parent;
51         /* insert public members, if any */
52 };
53
54 struct _ModestMsgEditWindowClass {
55         ModestWindowClass parent_class;
56         /* insert signal callback declarations, eg. */
57         /* void (* my_event) (ModestMsgEditWindow* obj); */
58 };
59
60 typedef enum  {
61         MODEST_EDIT_TYPE_NEW,
62         MODEST_EDIT_TYPE_REPLY,
63         MODEST_EDIT_TYPE_FORWARD,
64         
65         MODEST_EDIT_TYPE_NUM
66 } ModestEditType;
67
68 typedef enum {
69         MODEST_MSG_EDIT_FORMAT_TEXT,
70         MODEST_MSG_EDIT_FORMAT_HTML
71 } ModestMsgEditFormat;
72
73 typedef enum {
74         MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_BODY,
75         MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_TO,
76         MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_CC,
77         MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_BCC,
78         MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_SUBJECT,
79         MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_ATTACHMENTS,
80         MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_NUM,
81 } ModestMsgEditWindowWidgetType;
82
83 /** Get these with modest_msg_edit_window_get_msg_data() 
84  * and free them with modest_msg_edit_window_free_msg_data().
85  */
86 typedef struct  {
87         gchar *from, *to, *cc, *bcc, *subject, *plain_body, *html_body;
88         GList *attachments;
89         GList *images;
90         TnyHeaderFlags priority_flags;
91         TnyMsg *draft_msg;
92         gchar *account_name;
93 } MsgData;
94
95 typedef struct {
96         gboolean bold;
97         gboolean italics;
98         gboolean bullet;
99         GdkColor color;
100         const gchar *font_family;
101         gint font_size;
102         GtkJustification justification;
103 } ModestMsgEditFormatState;
104
105
106 /**
107  * modest_msg_edit_window_get_type:
108  * 
109  * get the GType for the #ModestMsgEditWindow class
110  *
111  * Returns: a GType for #ModestMsgEditWindow
112  */
113 GType        modest_msg_edit_window_get_type    (void) G_GNUC_CONST;
114
115
116 /**
117  * modest_msg_edit_window_new:
118  * @msg: a #TnyMsg instance
119  * @account_name: the account this message applies to
120  * @preserve_is_rich: if @msg is not rich, open the message as plain text
121  * 
122  * instantiates a new #ModestMsgEditWindow widget
123  *
124  * Returns: a new #ModestMsgEditWindow, or NULL in case of error
125  */
126 ModestWindow*   modest_msg_edit_window_new         (TnyMsg *msg, 
127                                                     const gchar *account_name, 
128                                                     gboolean preserve_is_rich);
129
130
131 /**
132  * modest_msg_edit_window_get_msg_data:
133  * @self: a #ModestMsgEditWindow
134  * 
135  * gets the message data already present in the edit message
136  * window. The message data must be freed with
137  * modest_msg_edit_window_free_msg_data
138  * 
139  * Returns: the message data
140  **/
141 MsgData *               modest_msg_edit_window_get_msg_data          (ModestMsgEditWindow *self);
142
143 /**
144  * modest_msg_edit_window_free_msg_data:
145  * @self: a #ModestMsgEditWindow
146  * @data: 
147  * 
148  * frees the message data passed as argument
149  **/
150 void                    modest_msg_edit_window_free_msg_data         (ModestMsgEditWindow *self,
151                                                                       MsgData *data);
152
153 /**
154  * modest_msg_edit_window_get_format:
155  * @self: a #ModestMsgEditWindow
156  *
157  * obtains the format type of the message body.
158  *
159  * Returns: a #ModestMsgEditFormat
160  **/
161 ModestMsgEditFormat     modest_msg_edit_window_get_format            (ModestMsgEditWindow *self);
162
163 /**
164  * modest_msg_edit_window_set_format:
165  * @self: a #ModestMsgEditWindow
166  * @format: a #ModestMsgEditFormat
167  *
168  * set the @format of the edit window message body.
169  **/
170 void                    modest_msg_edit_window_set_format            (ModestMsgEditWindow *self,
171                                                                       ModestMsgEditFormat format);
172
173 /**
174  * modest_msg_edit_window_get_format_state:
175  * @self: a #ModestMsgEditWindow
176  *
177  * get the current format state (the format attributes the text user inserts
178  * will get).
179  *
180  * Returns: a #ModestMsgEditFormatState structure that should be freed with g_free().
181  **/
182 ModestMsgEditFormatState *modest_msg_edit_window_get_format_state    (ModestMsgEditWindow *self);
183
184 /**
185  * modest_msg_edit_window_set_format_state:
186  * @self: a #ModestMsgEditWindow
187  * @format_state: a #ModestMsgEditWindowFormatState
188  *
189  * sets a new format state (the format attributes the text user inserts 
190  * will get).
191  **/
192 void                    modest_msg_edit_window_set_format_state      (ModestMsgEditWindow *self,
193                                                                       const ModestMsgEditFormatState *format_state);
194
195 /**
196  * modest_msg_edit_window_select_color:
197  * @self: a #ModestMsgEditWindow
198  *
199  * show color selection dialog and update text color
200  */
201 void                    modest_msg_edit_window_select_color          (ModestMsgEditWindow *window);
202
203 /**
204  * modest_msg_edit_window_select_background_color:
205  * @self: a #ModestMsgEditWindow
206  *
207  * show color selection dialog and update background color
208  */
209 void                    modest_msg_edit_window_select_background_color          (ModestMsgEditWindow *window);
210
211 /**
212  * modest_msg_edit_window_insert_image:
213  * @self: a #ModestMsgEditWindow
214  *
215  * show a file selection dialog to insert an image
216  */
217 void                    modest_msg_edit_window_insert_image          (ModestMsgEditWindow *window);
218
219 /**
220  * modest_msg_edit_window_offer_attach_file:
221  * @self: a #ModestMsgEditWindow
222  *
223  * show a file selection dialog to attach a file
224  */
225 void                    modest_msg_edit_window_offer_attach_file           (ModestMsgEditWindow *window);
226
227 /**
228  * modest_msg_edit_window_attach_file_one:
229  * @self: a #ModestMsgEditWindow
230  * @file_uri: The URI of a file to attach to the email message.
231  *
232  * attach a file to a MsgEditWindow non interactively, 
233  * without file dialog. This is needed by dbus callbacks.
234  */
235 void                    modest_msg_edit_window_attach_file_one           (ModestMsgEditWindow *window, const gchar *file_uri);
236
237 /**
238  * modest_msg_edit_window_remove_attachments:
239  * @self: a #ModestMsgEditWindow
240  * @att_list: a #GList of #TnyMimePart
241  *
242  * remove attachments in @att_list, with a confirmation dialog
243  */
244 void                    modest_msg_edit_window_remove_attachments    (ModestMsgEditWindow *window, 
245                                                                       TnyList *att_list);
246
247 /**
248  * modest_msg_edit_window_add_part:
249  * @self: a #ModestMsgEditWindow
250  * @part: a #TnyMimePart
251  *
252  * Adds @part as an attachment
253  */
254 void                    modest_msg_edit_window_add_part (ModestMsgEditWindow *window,
255                                                          TnyMimePart *part);
256
257 /**
258  * modest_msg_edit_window_show_cc:
259  * @window: a #ModestMsgEditWindow
260  * @show: a #gboolean
261  *
262  * Set the CC field as visible (or not visible) depending on @show
263  */
264 void                    modest_msg_edit_window_show_cc               (ModestMsgEditWindow *window, gboolean show);
265
266 /**
267  * modest_msg_edit_window_show_bcc:
268  * @window: a #ModestMsgEditWindow
269  * @show: a #gboolean
270  *
271  * Set the BCC field as visible (or not visible) depending on @show
272  */
273 void                    modest_msg_edit_window_show_bcc               (ModestMsgEditWindow *window, gboolean show);
274
275 /**
276  * modest_msg_edit_window_set_priority_flags:
277  * @window: a #ModestMsgEditWindow
278  * @priority_flags: a #TnyHeaderFlags with priority information
279  *
280  * Updates the icon and priority flag to send.
281  */
282 void            modest_msg_edit_window_set_priority_flags (ModestMsgEditWindow *window,
283                                                            TnyHeaderFlags priority_flags);
284
285 /**
286  * modest_msg_edit_window_set_file_format:
287  * @window: a #ModestMsgEditWindow
288  * @file_format: %MODEST_FILE_FORMAT_PLAIN_TEXT or %MODEST_FILE_FORMAT_FORMATTED_TEXT
289  *
290  * Changes the current file format.
291  */
292 void            modest_msg_edit_window_set_file_format (ModestMsgEditWindow *window,
293                                                         gint file_format);
294
295 /**
296  * modest_msg_edit_window_select_font:
297  * @window: a #ModestMsgEditWindow
298  *
299  * Show the dialog to select the editor font and update the
300  * used font in the editor.
301  */
302 void            modest_msg_edit_window_select_font        (ModestMsgEditWindow *window);
303
304 /**
305  * modest_msg_edit_window_undo:
306  * @window: a #ModestMsgEditWindow
307  *
308  * Undoes the last operation.
309  */
310 void            modest_msg_edit_window_undo               (ModestMsgEditWindow *window);
311
312 /**
313  * modest_msg_edit_window_can_undo:
314  * @window: a #ModestMsgEditWindow
315  *
316  * Checks if an undo operation is available
317  *
318  * Returns: %TRUE if undo can be done, %FALSE otherwise.
319  */
320 gboolean            modest_msg_edit_window_can_undo               (ModestMsgEditWindow *window);
321
322 /**
323  * modest_msg_edit_window_redo:
324  * @window: a #ModestMsgEditWindow
325  *
326  * Revert last undo
327  */
328 void            modest_msg_edit_window_redo               (ModestMsgEditWindow *window);
329
330 /**
331  * modest_msg_edit_window_can_redo:
332  * @window: a #ModestMsgEditWindow
333  *
334  * Checks if a redp operation is available
335  *
336  * Returns: %TRUE if redo can be done, %FALSE otherwise.
337  */
338 gboolean            modest_msg_edit_window_can_redo               (ModestMsgEditWindow *window);
339
340 /**
341  * modest_msg_edit_window_select_contacts:
342  * @window: a #ModestMsgEditWindow
343  *
344  * Shows the dialog to add contacts to the currently focused recipient list,
345  * or to To: recipient if no recipient list is focused.
346  */
347 void            modest_msg_edit_window_select_contacts    (ModestMsgEditWindow *window);
348
349 /**
350  * modest_msg_edit_window_check_names:
351  * @window: a #ModestMsgEditWindow
352  * @add_to_addressbook: if TRUE, add valid addresses to the addressbook
353  *
354  * Validates all the recipients, and shows (if required) dialogs for adding contacts
355  * or fixing problems in specific fields.
356  *
357  * Returns: %TRUE if all fields were validated, %FALSE otherwise
358  */
359 gboolean        modest_msg_edit_window_check_names    (ModestMsgEditWindow *window,
360                                                        gboolean add_to_addressbook);
361
362 /**
363  * modest_msg_edit_window_toggle_find_toolbar:
364  * @window: a #ModestMsgEditWindow
365  * @show: a #gboolean
366  *
367  * Shows/Hides the find toolbar
368  */
369 void            modest_msg_edit_window_toggle_find_toolbar (ModestMsgEditWindow *window,
370                                                             gboolean show);
371
372
373 /**
374  * modest_msg_edit_window_is_modified:
375  * @window: a #ModestMsgEditWindow
376  *
377  * Examines whether or not the message has been modified
378  *
379  * Returns: %TRUE if any field has been modified, %FALSE otherwise
380  */
381 gboolean        modest_msg_edit_window_is_modified         (ModestMsgEditWindow *window);
382
383 /**
384  * modest_msg_edit_window_reset_modified:
385  * @window: a #ModestMsgEditWindow
386  *
387  * Resets the message as not modified
388  */
389 void            modest_msg_edit_window_reset_modified      (ModestMsgEditWindow *window);
390
391 gboolean        modest_msg_edit_window_get_sent            (ModestMsgEditWindow *window);
392 void            modest_msg_edit_window_set_sent            (ModestMsgEditWindow *window, 
393                                                             gboolean sent);
394
395 /**
396  * modest_msg_edit_window_set_draft:
397  * @window: a #ModestMsgEditWindow
398  * @draft: a #TnyMsg, or %NULL
399  *
400  * Set @draft as the original draft message of the editor. This
401  * message will be removed on saving or sending the message.
402  */
403 void            modest_msg_edit_window_set_draft           (ModestMsgEditWindow *window,
404                                                             TnyMsg *draft);
405 /**
406  * modest_msg_edit_window_get_message_uid:
407  * @msg: an #ModestMsgEditWindow instance
408  * 
409  * gets the unique identifier for the message in this msg editor.
410  * This is the identifier of the draft or outbox message the editor was
411  * opened from. If it's a new message, then it returns %NULL
412  * 
413  * Returns: the id of the #TnyMsg being shown, or NULL in case of error
414  */
415 const gchar*    modest_msg_edit_window_get_message_uid (ModestMsgEditWindow *window);
416
417 /**
418  * modest_msg_edit_window_get_child_widget:
419  * @win: a #ModestMsgEditWindow
420  * @widget_type: the type of the child to obtain
421  *
422  * Obtain the child widget of @win of type @widget_type
423  *
424  * Returns: a #GtkWidget, or %NULL
425  */
426 GtkWidget *
427 modest_msg_edit_window_get_child_widget (ModestMsgEditWindow *win,
428                                          ModestMsgEditWindowWidgetType widget_type);
429
430 /**
431  * modest_msg_edit_window_get_clipboard_text:
432  * @win: a #ModestMsgEditWindow
433  *
434  * Obtains the currently selected text in selection clipboard
435  *
436  * Returns: a string
437  */
438 const gchar *
439 modest_msg_edit_window_get_clipboard_text (ModestMsgEditWindow *win);
440
441 G_END_DECLS
442
443 #endif /* __MODEST_MSG_EDIT_WINDOW_H__ */