14c113bb99b550dd77a68da1b75359a426c348cd
[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 <tny-vfs-stream.h>
35 #ifdef MODEST_TOOLKIT_HILDON2
36 #include <modest-hildon2-window.h>
37 #endif
38 #include <widgets/modest-window.h>
39
40 G_BEGIN_DECLS
41
42 /* convenience macros */
43 #define MODEST_TYPE_MSG_EDIT_WINDOW             (modest_msg_edit_window_get_type())
44 #define MODEST_MSG_EDIT_WINDOW(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_MSG_EDIT_WINDOW,ModestMsgEditWindow))
45 #define MODEST_MSG_EDIT_WINDOW_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_MSG_EDIT_WINDOW,ModestWindow))
46 #define MODEST_IS_MSG_EDIT_WINDOW(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_MSG_EDIT_WINDOW))
47 #define MODEST_IS_MSG_EDIT_WINDOW_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_MSG_EDIT_WINDOW))
48 #define MODEST_MSG_EDIT_WINDOW_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_MSG_EDIT_WINDOW,ModestMsgEditWindowClass))
49
50 typedef struct _ModestMsgEditWindow      ModestMsgEditWindow;
51 typedef struct _ModestMsgEditWindowClass ModestMsgEditWindowClass;
52
53 struct _ModestMsgEditWindow {
54 #ifdef MODEST_TOOLKIT_HILDON2
55         ModestHildon2Window parent;
56 #else
57          ModestWindow parent;
58 #endif
59         /* insert public members, if any */
60 };
61
62 struct _ModestMsgEditWindowClass {
63 #ifdef MODEST_TOOLKIT_HILDON2
64         ModestHildon2WindowClass parent_class;
65 #else
66         ModestWindowClass parent_class;
67 #endif
68         /* insert signal callback declarations, eg. */
69         /* void (* my_event) (ModestMsgEditWindow* obj); */
70 };
71
72 typedef enum  {
73         MODEST_EDIT_TYPE_NEW,
74         MODEST_EDIT_TYPE_REPLY,
75         MODEST_EDIT_TYPE_FORWARD,
76         
77         MODEST_EDIT_TYPE_NUM
78 } ModestEditType;
79
80 typedef enum {
81         MODEST_MSG_EDIT_FORMAT_TEXT,
82         MODEST_MSG_EDIT_FORMAT_HTML
83 } ModestMsgEditFormat;
84
85 typedef enum {
86         MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_BODY,
87         MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_TO,
88         MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_CC,
89         MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_BCC,
90         MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_SUBJECT,
91         MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_ATTACHMENTS,
92         MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_NUM,
93 } ModestMsgEditWindowWidgetType;
94
95 /** Get these with modest_msg_edit_window_get_msg_data() 
96  * and free them with modest_msg_edit_window_free_msg_data().
97  */
98 typedef struct  {
99         gchar *from, *to, *cc, *bcc, *subject, *plain_body, *html_body;
100         gchar *references, *in_reply_to;
101         GList *attachments;
102         GList *images;
103         TnyHeaderFlags priority_flags;
104         TnyMsg *draft_msg;
105         gchar *account_name;
106 } MsgData;
107
108 typedef struct {
109         gboolean bold;
110         gboolean italics;
111         gboolean bullet;
112         GdkColor color;
113         const gchar *font_family;
114         gint font_size;
115         GtkJustification justification;
116 } ModestMsgEditFormatState;
117
118
119 /**
120  * modest_msg_edit_window_get_type:
121  * 
122  * get the GType for the #ModestMsgEditWindow class
123  *
124  * Returns: a GType for #ModestMsgEditWindow
125  */
126 GType        modest_msg_edit_window_get_type    (void) G_GNUC_CONST;
127
128
129 /**
130  * modest_msg_edit_window_new:
131  * @msg: a #TnyMsg instance
132  * @account_name: the account this message applies to
133  * @mailbox: the mailbox (if any)
134  * @preserve_is_rich: if @msg is not rich, open the message as plain text
135  * 
136  * instantiates a new #ModestMsgEditWindow widget
137  *
138  * Returns: a new #ModestMsgEditWindow, or NULL in case of error
139  */
140 ModestWindow*   modest_msg_edit_window_new         (TnyMsg *msg, 
141                                                     const gchar *account_name, 
142                                                     const gchar *mailbox,
143                                                     gboolean preserve_is_rich);
144
145
146 /**
147  * modest_msg_edit_window_get_msg_data:
148  * @self: a #ModestMsgEditWindow
149  * 
150  * gets the message data already present in the edit message
151  * window. The message data must be freed with
152  * modest_msg_edit_window_free_msg_data
153  * 
154  * Returns: the message data
155  **/
156 MsgData *               modest_msg_edit_window_get_msg_data          (ModestMsgEditWindow *self);
157
158 /**
159  * modest_msg_edit_window_free_msg_data:
160  * @self: a #ModestMsgEditWindow
161  * @data: 
162  * 
163  * frees the message data passed as argument
164  **/
165 void                    modest_msg_edit_window_free_msg_data         (ModestMsgEditWindow *self,
166                                                                       MsgData *data);
167
168 /**
169  * modest_msg_edit_window_get_format:
170  * @self: a #ModestMsgEditWindow
171  *
172  * obtains the format type of the message body.
173  *
174  * Returns: a #ModestMsgEditFormat
175  **/
176 ModestMsgEditFormat     modest_msg_edit_window_get_format            (ModestMsgEditWindow *self);
177
178 /**
179  * modest_msg_edit_window_set_format:
180  * @self: a #ModestMsgEditWindow
181  * @format: a #ModestMsgEditFormat
182  *
183  * set the @format of the edit window message body.
184  **/
185 void                    modest_msg_edit_window_set_format            (ModestMsgEditWindow *self,
186                                                                       ModestMsgEditFormat format);
187
188 /**
189  * modest_msg_edit_window_get_format_state:
190  * @self: a #ModestMsgEditWindow
191  *
192  * get the current format state (the format attributes the text user inserts
193  * will get).
194  *
195  * Returns: a #ModestMsgEditFormatState structure that should be freed with g_free().
196  **/
197 ModestMsgEditFormatState *modest_msg_edit_window_get_format_state    (ModestMsgEditWindow *self);
198
199 /**
200  * modest_msg_edit_window_set_format_state:
201  * @self: a #ModestMsgEditWindow
202  * @format_state: a #ModestMsgEditWindowFormatState
203  *
204  * sets a new format state (the format attributes the text user inserts 
205  * will get).
206  **/
207 void                    modest_msg_edit_window_set_format_state      (ModestMsgEditWindow *self,
208                                                                       const ModestMsgEditFormatState *format_state);
209
210 /**
211  * modest_msg_edit_window_select_color:
212  * @self: a #ModestMsgEditWindow
213  *
214  * show color selection dialog and update text color
215  */
216 void                    modest_msg_edit_window_select_color          (ModestMsgEditWindow *window);
217
218 /**
219  * modest_msg_edit_window_select_background_color:
220  * @self: a #ModestMsgEditWindow
221  *
222  * show color selection dialog and update background color
223  */
224 void                    modest_msg_edit_window_select_background_color          (ModestMsgEditWindow *window);
225
226 /**
227  * modest_msg_edit_window_insert_image:
228  * @self: a #ModestMsgEditWindow
229  *
230  * show a file selection dialog to insert an image
231  */
232 void                    modest_msg_edit_window_insert_image          (ModestMsgEditWindow *window);
233
234 /**
235  * modest_msg_edit_window_offer_attach_file:
236  * @self: a #ModestMsgEditWindow
237  *
238  * show a file selection dialog to attach a file
239  */
240 void                    modest_msg_edit_window_offer_attach_file           (ModestMsgEditWindow *window);
241
242 /**
243  * modest_msg_edit_window_attach_file_one:
244  * @self: a #ModestMsgEditWindow
245  * @file_uri: The URI of a file to attach to the email message.
246  * @allowed_size: max size allowed for this attachment, 0 for unlimited
247  *
248  * attach a file to a MsgEditWindow non interactively, 
249  * without file dialog. This is needed by dbus callbacks.
250  *
251  * Returns: the filesize (if available)
252  */
253 GnomeVFSFileSize modest_msg_edit_window_attach_file_one           (ModestMsgEditWindow *window, const gchar *file_uri, GnomeVFSFileSize allowed_size);
254
255 /**
256  * modest_msg_edit_window_remove_attachments:
257  * @self: a #ModestMsgEditWindow
258  * @att_list: a #GList of #TnyMimePart
259  *
260  * remove attachments in @att_list, with a confirmation dialog
261  */
262 void                    modest_msg_edit_window_remove_attachments    (ModestMsgEditWindow *window, 
263                                                                       TnyList *att_list);
264
265 /**
266  * modest_msg_edit_window_get_parts_size:
267  * @window: a #ModestMsgEditWindow
268  * @parts_count: number of attachments and images attached to the message
269  * @parts_size: sum of sizes of attachments and images
270  */
271 void                    modest_msg_edit_window_get_parts_size (ModestMsgEditWindow *window,
272                                                                gint *parts_count,
273                                                                guint64 *parts_size);
274 /**
275  * modest_msg_edit_window_add_part:
276  * @self: a #ModestMsgEditWindow
277  * @part: a #TnyMimePart
278  *
279  * Adds @part as an attachment
280  */
281 void                    modest_msg_edit_window_add_part (ModestMsgEditWindow *window,
282                                                          TnyMimePart *part);
283
284 /**
285  * modest_msg_edit_window_show_cc:
286  * @window: a #ModestMsgEditWindow
287  * @show: a #gboolean
288  *
289  * Set the CC field as visible (or not visible) depending on @show
290  */
291 void                    modest_msg_edit_window_show_cc               (ModestMsgEditWindow *window, gboolean show);
292
293 /**
294  * modest_msg_edit_window_show_bcc:
295  * @window: a #ModestMsgEditWindow
296  * @show: a #gboolean
297  *
298  * Set the BCC field as visible (or not visible) depending on @show
299  */
300 void                    modest_msg_edit_window_show_bcc               (ModestMsgEditWindow *window, gboolean show);
301
302 /**
303  * modest_msg_edit_window_set_priority_flags:
304  * @window: a #ModestMsgEditWindow
305  * @priority_flags: a #TnyHeaderFlags with priority information
306  *
307  * Updates the icon and priority flag to send.
308  */
309 void            modest_msg_edit_window_set_priority_flags (ModestMsgEditWindow *window,
310                                                            TnyHeaderFlags priority_flags);
311
312 /**
313  * modest_msg_edit_window_set_file_format:
314  * @window: a #ModestMsgEditWindow
315  * @file_format: %MODEST_FILE_FORMAT_PLAIN_TEXT or %MODEST_FILE_FORMAT_FORMATTED_TEXT
316  *
317  * Changes the current file format.
318  */
319 void            modest_msg_edit_window_set_file_format (ModestMsgEditWindow *window,
320                                                         gint file_format);
321
322 /**
323  * modest_msg_edit_window_select_font:
324  * @window: a #ModestMsgEditWindow
325  *
326  * Show the dialog to select the editor font and update the
327  * used font in the editor.
328  */
329 void            modest_msg_edit_window_select_font        (ModestMsgEditWindow *window);
330
331 /**
332  * modest_msg_edit_window_undo:
333  * @window: a #ModestMsgEditWindow
334  *
335  * Undoes the last operation.
336  */
337 void            modest_msg_edit_window_undo               (ModestMsgEditWindow *window);
338
339 /**
340  * modest_msg_edit_window_can_undo:
341  * @window: a #ModestMsgEditWindow
342  *
343  * Checks if an undo operation is available
344  *
345  * Returns: %TRUE if undo can be done, %FALSE otherwise.
346  */
347 gboolean            modest_msg_edit_window_can_undo               (ModestMsgEditWindow *window);
348
349 /**
350  * modest_msg_edit_window_redo:
351  * @window: a #ModestMsgEditWindow
352  *
353  * Revert last undo
354  */
355 void            modest_msg_edit_window_redo               (ModestMsgEditWindow *window);
356
357 /**
358  * modest_msg_edit_window_can_redo:
359  * @window: a #ModestMsgEditWindow
360  *
361  * Checks if a redp operation is available
362  *
363  * Returns: %TRUE if redo can be done, %FALSE otherwise.
364  */
365 gboolean            modest_msg_edit_window_can_redo               (ModestMsgEditWindow *window);
366
367 /**
368  * modest_msg_edit_window_select_contacts:
369  * @window: a #ModestMsgEditWindow
370  *
371  * Shows the dialog to add contacts to the currently focused recipient list,
372  * or to To: recipient if no recipient list is focused.
373  */
374 void            modest_msg_edit_window_select_contacts    (ModestMsgEditWindow *window);
375
376 /**
377  * modest_msg_edit_window_add_to_contacts:
378  * @self: a #ModestMsgEditWindow
379  *
380  * activates the add to contacts use. It shows the add to contacts
381  * dialog to select the recipient to add.
382  */
383 void            modest_msg_edit_window_add_to_contacts     (ModestMsgEditWindow *self);
384
385 /**
386  * modest_msg_edit_window_check_names:
387  * @window: a #ModestMsgEditWindow
388  * @add_to_addressbook: if TRUE, add valid addresses to the addressbook
389  *
390  * Validates all the recipients, and shows (if required) dialogs for adding contacts
391  * or fixing problems in specific fields.
392  *
393  * Returns: %TRUE if all fields were validated, %FALSE otherwise
394  */
395 gboolean        modest_msg_edit_window_check_names    (ModestMsgEditWindow *window,
396                                                        gboolean add_to_addressbook);
397
398 /**
399  * modest_msg_edit_window_has_pending_addresses:
400  * @window: a #ModestMsgEditWindow
401  * @add_to_addressbook: if TRUE, add valid addresses to the addressbook
402  *
403  * Validates all the recipients, and checks if there are addresses in
404  * any field that could be added to the addressbook
405  *
406  * Returns: %TRUE if there are valid pending addresses, %FALSE otherwise
407  */
408 gboolean        modest_msg_edit_window_has_pending_addresses    (ModestMsgEditWindow *window);
409
410 /**
411  * modest_msg_edit_window_toggle_find_toolbar:
412  * @window: a #ModestMsgEditWindow
413  * @show: a #gboolean
414  *
415  * Shows/Hides the find toolbar
416  */
417 void            modest_msg_edit_window_toggle_find_toolbar (ModestMsgEditWindow *window,
418                                                             gboolean show);
419
420
421 /**
422  * modest_msg_edit_window_is_modified:
423  * @window: a #ModestMsgEditWindow
424  *
425  * Examines whether or not the message has been modified
426  *
427  * Returns: %TRUE if any field has been modified, %FALSE otherwise
428  */
429 gboolean        modest_msg_edit_window_is_modified         (ModestMsgEditWindow *window);
430
431 /**
432  * modest_msg_edit_window_reset_modified:
433  * @window: a #ModestMsgEditWindow
434  * @modified: wheter or not we want to make the buffer as modified or not
435  *
436  * Sets the message as modified or not
437  */
438 void            modest_msg_edit_window_set_modified      (ModestMsgEditWindow *window,
439                                                           gboolean modified);
440
441
442 gboolean        modest_msg_edit_window_get_sent            (ModestMsgEditWindow *window);
443 void            modest_msg_edit_window_set_sent            (ModestMsgEditWindow *window, 
444                                                             gboolean sent);
445
446 /**
447  * modest_msg_edit_window_set_draft:
448  * @window: a #ModestMsgEditWindow
449  * @draft: a #TnyMsg, or %NULL
450  *
451  * Set @draft as the original draft message of the editor. This
452  * message will be removed on saving or sending the message.
453  */
454 void            modest_msg_edit_window_set_draft           (ModestMsgEditWindow *window,
455                                                             TnyMsg *draft);
456 /**
457  * modest_msg_edit_window_get_message_uid:
458  * @msg: an #ModestMsgEditWindow instance
459  * 
460  * gets the unique identifier for the message in this msg editor.
461  * This is the identifier of the draft or outbox message the editor was
462  * opened from. If it's a new message, then it returns %NULL
463  * 
464  * Returns: the id of the #TnyMsg being shown, or NULL in case of error
465  */
466 const gchar*    modest_msg_edit_window_get_message_uid (ModestMsgEditWindow *window);
467
468 /**
469  * modest_msg_edit_window_get_child_widget:
470  * @win: a #ModestMsgEditWindow
471  * @widget_type: the type of the child to obtain
472  *
473  * Obtain the child widget of @win of type @widget_type
474  *
475  * Returns: a #GtkWidget, or %NULL
476  */
477 GtkWidget *
478 modest_msg_edit_window_get_child_widget (ModestMsgEditWindow *win,
479                                          ModestMsgEditWindowWidgetType widget_type);
480
481 /**
482  * modest_msg_edit_window_get_clipboard_text:
483  * @win: a #ModestMsgEditWindow
484  *
485  * Obtains the currently selected text in selection clipboard
486  *
487  * Returns: a string
488  */
489 const gchar *
490 modest_msg_edit_window_get_clipboard_text (ModestMsgEditWindow *win);
491
492 G_END_DECLS
493
494 #endif /* __MODEST_MSG_EDIT_WINDOW_H__ */