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