Migrate ModestMsgEditWindow to inherit from ModestHildon2Window
[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         GList *attachments;
101         GList *images;
102         TnyHeaderFlags priority_flags;
103         TnyMsg *draft_msg;
104         gchar *account_name;
105 } MsgData;
106
107 typedef struct {
108         gboolean bold;
109         gboolean italics;
110         gboolean bullet;
111         GdkColor color;
112         const gchar *font_family;
113         gint font_size;
114         GtkJustification justification;
115 } ModestMsgEditFormatState;
116
117
118 /**
119  * modest_msg_edit_window_get_type:
120  * 
121  * get the GType for the #ModestMsgEditWindow class
122  *
123  * Returns: a GType for #ModestMsgEditWindow
124  */
125 GType        modest_msg_edit_window_get_type    (void) G_GNUC_CONST;
126
127
128 /**
129  * modest_msg_edit_window_new:
130  * @msg: a #TnyMsg instance
131  * @account_name: the account this message applies to
132  * @preserve_is_rich: if @msg is not rich, open the message as plain text
133  * 
134  * instantiates a new #ModestMsgEditWindow widget
135  *
136  * Returns: a new #ModestMsgEditWindow, or NULL in case of error
137  */
138 ModestWindow*   modest_msg_edit_window_new         (TnyMsg *msg, 
139                                                     const gchar *account_name, 
140                                                     gboolean preserve_is_rich);
141
142
143 /**
144  * modest_msg_edit_window_get_msg_data:
145  * @self: a #ModestMsgEditWindow
146  * 
147  * gets the message data already present in the edit message
148  * window. The message data must be freed with
149  * modest_msg_edit_window_free_msg_data
150  * 
151  * Returns: the message data
152  **/
153 MsgData *               modest_msg_edit_window_get_msg_data          (ModestMsgEditWindow *self);
154
155 /**
156  * modest_msg_edit_window_free_msg_data:
157  * @self: a #ModestMsgEditWindow
158  * @data: 
159  * 
160  * frees the message data passed as argument
161  **/
162 void                    modest_msg_edit_window_free_msg_data         (ModestMsgEditWindow *self,
163                                                                       MsgData *data);
164
165 /**
166  * modest_msg_edit_window_get_format:
167  * @self: a #ModestMsgEditWindow
168  *
169  * obtains the format type of the message body.
170  *
171  * Returns: a #ModestMsgEditFormat
172  **/
173 ModestMsgEditFormat     modest_msg_edit_window_get_format            (ModestMsgEditWindow *self);
174
175 /**
176  * modest_msg_edit_window_set_format:
177  * @self: a #ModestMsgEditWindow
178  * @format: a #ModestMsgEditFormat
179  *
180  * set the @format of the edit window message body.
181  **/
182 void                    modest_msg_edit_window_set_format            (ModestMsgEditWindow *self,
183                                                                       ModestMsgEditFormat format);
184
185 /**
186  * modest_msg_edit_window_get_format_state:
187  * @self: a #ModestMsgEditWindow
188  *
189  * get the current format state (the format attributes the text user inserts
190  * will get).
191  *
192  * Returns: a #ModestMsgEditFormatState structure that should be freed with g_free().
193  **/
194 ModestMsgEditFormatState *modest_msg_edit_window_get_format_state    (ModestMsgEditWindow *self);
195
196 /**
197  * modest_msg_edit_window_set_format_state:
198  * @self: a #ModestMsgEditWindow
199  * @format_state: a #ModestMsgEditWindowFormatState
200  *
201  * sets a new format state (the format attributes the text user inserts 
202  * will get).
203  **/
204 void                    modest_msg_edit_window_set_format_state      (ModestMsgEditWindow *self,
205                                                                       const ModestMsgEditFormatState *format_state);
206
207 /**
208  * modest_msg_edit_window_select_color:
209  * @self: a #ModestMsgEditWindow
210  *
211  * show color selection dialog and update text color
212  */
213 void                    modest_msg_edit_window_select_color          (ModestMsgEditWindow *window);
214
215 /**
216  * modest_msg_edit_window_select_background_color:
217  * @self: a #ModestMsgEditWindow
218  *
219  * show color selection dialog and update background color
220  */
221 void                    modest_msg_edit_window_select_background_color          (ModestMsgEditWindow *window);
222
223 /**
224  * modest_msg_edit_window_insert_image:
225  * @self: a #ModestMsgEditWindow
226  *
227  * show a file selection dialog to insert an image
228  */
229 void                    modest_msg_edit_window_insert_image          (ModestMsgEditWindow *window);
230
231 /**
232  * modest_msg_edit_window_offer_attach_file:
233  * @self: a #ModestMsgEditWindow
234  *
235  * show a file selection dialog to attach a file
236  */
237 void                    modest_msg_edit_window_offer_attach_file           (ModestMsgEditWindow *window);
238
239 /**
240  * modest_msg_edit_window_attach_file_one:
241  * @self: a #ModestMsgEditWindow
242  * @file_uri: The URI of a file to attach to the email message.
243  * @allowed_size: max size allowed for this attachment, 0 for unlimited
244  *
245  * attach a file to a MsgEditWindow non interactively, 
246  * without file dialog. This is needed by dbus callbacks.
247  *
248  * Returns: the filesize (if available)
249  */
250 GnomeVFSFileSize modest_msg_edit_window_attach_file_one           (ModestMsgEditWindow *window, const gchar *file_uri, GnomeVFSFileSize allowed_size);
251
252 /**
253  * modest_msg_edit_window_remove_attachments:
254  * @self: a #ModestMsgEditWindow
255  * @att_list: a #GList of #TnyMimePart
256  *
257  * remove attachments in @att_list, with a confirmation dialog
258  */
259 void                    modest_msg_edit_window_remove_attachments    (ModestMsgEditWindow *window, 
260                                                                       TnyList *att_list);
261
262 /**
263  * modest_msg_edit_window_get_parts_size:
264  * @window: a #ModestMsgEditWindow
265  * @parts_count: number of attachments and images attached to the message
266  * @parts_size: sum of sizes of attachments and images
267  */
268 void                    modest_msg_edit_window_get_parts_size (ModestMsgEditWindow *window,
269                                                                gint *parts_count,
270                                                                guint64 *parts_size);
271 /**
272  * modest_msg_edit_window_add_part:
273  * @self: a #ModestMsgEditWindow
274  * @part: a #TnyMimePart
275  *
276  * Adds @part as an attachment
277  */
278 void                    modest_msg_edit_window_add_part (ModestMsgEditWindow *window,
279                                                          TnyMimePart *part);
280
281 /**
282  * modest_msg_edit_window_show_cc:
283  * @window: a #ModestMsgEditWindow
284  * @show: a #gboolean
285  *
286  * Set the CC field as visible (or not visible) depending on @show
287  */
288 void                    modest_msg_edit_window_show_cc               (ModestMsgEditWindow *window, gboolean show);
289
290 /**
291  * modest_msg_edit_window_show_bcc:
292  * @window: a #ModestMsgEditWindow
293  * @show: a #gboolean
294  *
295  * Set the BCC field as visible (or not visible) depending on @show
296  */
297 void                    modest_msg_edit_window_show_bcc               (ModestMsgEditWindow *window, gboolean show);
298
299 /**
300  * modest_msg_edit_window_set_priority_flags:
301  * @window: a #ModestMsgEditWindow
302  * @priority_flags: a #TnyHeaderFlags with priority information
303  *
304  * Updates the icon and priority flag to send.
305  */
306 void            modest_msg_edit_window_set_priority_flags (ModestMsgEditWindow *window,
307                                                            TnyHeaderFlags priority_flags);
308
309 /**
310  * modest_msg_edit_window_set_file_format:
311  * @window: a #ModestMsgEditWindow
312  * @file_format: %MODEST_FILE_FORMAT_PLAIN_TEXT or %MODEST_FILE_FORMAT_FORMATTED_TEXT
313  *
314  * Changes the current file format.
315  */
316 void            modest_msg_edit_window_set_file_format (ModestMsgEditWindow *window,
317                                                         gint file_format);
318
319 /**
320  * modest_msg_edit_window_select_font:
321  * @window: a #ModestMsgEditWindow
322  *
323  * Show the dialog to select the editor font and update the
324  * used font in the editor.
325  */
326 void            modest_msg_edit_window_select_font        (ModestMsgEditWindow *window);
327
328 /**
329  * modest_msg_edit_window_undo:
330  * @window: a #ModestMsgEditWindow
331  *
332  * Undoes the last operation.
333  */
334 void            modest_msg_edit_window_undo               (ModestMsgEditWindow *window);
335
336 /**
337  * modest_msg_edit_window_can_undo:
338  * @window: a #ModestMsgEditWindow
339  *
340  * Checks if an undo operation is available
341  *
342  * Returns: %TRUE if undo can be done, %FALSE otherwise.
343  */
344 gboolean            modest_msg_edit_window_can_undo               (ModestMsgEditWindow *window);
345
346 /**
347  * modest_msg_edit_window_redo:
348  * @window: a #ModestMsgEditWindow
349  *
350  * Revert last undo
351  */
352 void            modest_msg_edit_window_redo               (ModestMsgEditWindow *window);
353
354 /**
355  * modest_msg_edit_window_can_redo:
356  * @window: a #ModestMsgEditWindow
357  *
358  * Checks if a redp operation is available
359  *
360  * Returns: %TRUE if redo can be done, %FALSE otherwise.
361  */
362 gboolean            modest_msg_edit_window_can_redo               (ModestMsgEditWindow *window);
363
364 /**
365  * modest_msg_edit_window_select_contacts:
366  * @window: a #ModestMsgEditWindow
367  *
368  * Shows the dialog to add contacts to the currently focused recipient list,
369  * or to To: recipient if no recipient list is focused.
370  */
371 void            modest_msg_edit_window_select_contacts    (ModestMsgEditWindow *window);
372
373 /**
374  * modest_msg_edit_window_check_names:
375  * @window: a #ModestMsgEditWindow
376  * @add_to_addressbook: if TRUE, add valid addresses to the addressbook
377  *
378  * Validates all the recipients, and shows (if required) dialogs for adding contacts
379  * or fixing problems in specific fields.
380  *
381  * Returns: %TRUE if all fields were validated, %FALSE otherwise
382  */
383 gboolean        modest_msg_edit_window_check_names    (ModestMsgEditWindow *window,
384                                                        gboolean add_to_addressbook);
385
386 /**
387  * modest_msg_edit_window_toggle_find_toolbar:
388  * @window: a #ModestMsgEditWindow
389  * @show: a #gboolean
390  *
391  * Shows/Hides the find toolbar
392  */
393 void            modest_msg_edit_window_toggle_find_toolbar (ModestMsgEditWindow *window,
394                                                             gboolean show);
395
396
397 /**
398  * modest_msg_edit_window_is_modified:
399  * @window: a #ModestMsgEditWindow
400  *
401  * Examines whether or not the message has been modified
402  *
403  * Returns: %TRUE if any field has been modified, %FALSE otherwise
404  */
405 gboolean        modest_msg_edit_window_is_modified         (ModestMsgEditWindow *window);
406
407 /**
408  * modest_msg_edit_window_reset_modified:
409  * @window: a #ModestMsgEditWindow
410  * @modified: wheter or not we want to make the buffer as modified or not
411  *
412  * Sets the message as modified or not
413  */
414 void            modest_msg_edit_window_set_modified      (ModestMsgEditWindow *window,
415                                                           gboolean modified);
416
417
418 gboolean        modest_msg_edit_window_get_sent            (ModestMsgEditWindow *window);
419 void            modest_msg_edit_window_set_sent            (ModestMsgEditWindow *window, 
420                                                             gboolean sent);
421
422 /**
423  * modest_msg_edit_window_set_draft:
424  * @window: a #ModestMsgEditWindow
425  * @draft: a #TnyMsg, or %NULL
426  *
427  * Set @draft as the original draft message of the editor. This
428  * message will be removed on saving or sending the message.
429  */
430 void            modest_msg_edit_window_set_draft           (ModestMsgEditWindow *window,
431                                                             TnyMsg *draft);
432 /**
433  * modest_msg_edit_window_get_message_uid:
434  * @msg: an #ModestMsgEditWindow instance
435  * 
436  * gets the unique identifier for the message in this msg editor.
437  * This is the identifier of the draft or outbox message the editor was
438  * opened from. If it's a new message, then it returns %NULL
439  * 
440  * Returns: the id of the #TnyMsg being shown, or NULL in case of error
441  */
442 const gchar*    modest_msg_edit_window_get_message_uid (ModestMsgEditWindow *window);
443
444 /**
445  * modest_msg_edit_window_get_child_widget:
446  * @win: a #ModestMsgEditWindow
447  * @widget_type: the type of the child to obtain
448  *
449  * Obtain the child widget of @win of type @widget_type
450  *
451  * Returns: a #GtkWidget, or %NULL
452  */
453 GtkWidget *
454 modest_msg_edit_window_get_child_widget (ModestMsgEditWindow *win,
455                                          ModestMsgEditWindowWidgetType widget_type);
456
457 /**
458  * modest_msg_edit_window_get_clipboard_text:
459  * @win: a #ModestMsgEditWindow
460  *
461  * Obtains the currently selected text in selection clipboard
462  *
463  * Returns: a string
464  */
465 const gchar *
466 modest_msg_edit_window_get_clipboard_text (ModestMsgEditWindow *win);
467
468 G_END_DECLS
469
470 #endif /* __MODEST_MSG_EDIT_WINDOW_H__ */