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