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