1 /* Copyright (c) 2006, Nokia Corporation
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
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.
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.
31 /* modest-editor-window.c */
33 #include "modest-ui.h"
34 #include "modest-editor-window.h"
36 /* 'private'/'protected' functions */
37 static void modest_editor_window_class_init (ModestEditorWindowClass *klass);
38 static void modest_editor_window_init (ModestEditorWindow *obj);
39 static void modest_editor_window_finalize (GObject *obj);
48 typedef struct _ModestEditorWindowPrivate ModestEditorWindowPrivate;
49 struct _ModestEditorWindowPrivate {
57 #define MODEST_EDITOR_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
58 MODEST_TYPE_EDITOR_WINDOW, \
59 ModestEditorWindowPrivate))
61 static GObjectClass *parent_class = NULL;
63 /* uncomment the following if you have defined any signals */
64 /* static guint signals[LAST_SIGNAL] = {0}; */
67 modest_editor_window_get_type (void)
69 static GType my_type = 0;
71 static const GTypeInfo my_info = {
72 sizeof(ModestEditorWindowClass),
74 NULL, /* base finalize */
75 (GClassInitFunc) modest_editor_window_class_init,
76 NULL, /* class finalize */
77 NULL, /* class data */
78 sizeof(ModestEditorWindow),
80 (GInstanceInitFunc) modest_editor_window_init,
82 my_type = g_type_register_static (G_TYPE_OBJECT,
90 modest_editor_window_class_init (ModestEditorWindowClass *klass)
92 GObjectClass *gobject_class;
93 gobject_class = (GObjectClass*) klass;
95 parent_class = g_type_class_peek_parent (klass);
96 gobject_class->finalize = modest_editor_window_finalize;
98 g_type_class_add_private (gobject_class, sizeof(ModestEditorWindowPrivate));
103 modest_editor_window_init (ModestEditorWindow *obj)
105 ModestEditorWindowPrivate *priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(obj);
107 priv->user_data = NULL;
108 priv->modified = FALSE;
109 priv->attachments = NULL;
110 priv->identity = NULL;
111 priv->transport = NULL;
116 modest_editor_window_finalize (GObject *obj)
118 ModestEditorWindowPrivate *priv;
120 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(obj);
123 g_free(priv->user_data);
125 modest_editor_window_set_attachments(MODEST_EDITOR_WINDOW(obj), NULL);
126 g_free(priv->identity);
127 g_free(priv->transport);
128 g_object_unref (MODEST_EDITOR_WINDOW(obj)->window);
129 MODEST_EDITOR_WINDOW(obj)->window = NULL;
131 G_OBJECT_CLASS(parent_class)->finalize (obj);
135 modest_editor_window_new (ModestUI *ui)
138 ModestEditorWindowPrivate *priv;
142 self = G_OBJECT(g_object_new(MODEST_TYPE_EDITOR_WINDOW, NULL));
143 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(self);
145 /* for now create a local test-window */
148 edit_win = modest_ui_new_editor_window(ui, &data);
153 g_message("editor window user data is emtpy");
155 MODEST_EDITOR_WINDOW(self)->window = edit_win;
156 priv->user_data = data;
162 * return user defined data from a ModestEditorWindow instance
163 * like e.g. a refernce to a GladeXML*
165 gpointer modest_editor_window_get_data(ModestEditorWindow *edit_win)
167 ModestEditorWindowPrivate *priv;
172 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
174 // g_message("get priv->data = %p", priv->user_data);
176 return priv->user_data;
179 gboolean modest_editor_window_set_modified(ModestEditorWindow *edit_win, gboolean modified)
181 ModestEditorWindowPrivate *priv;
186 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
188 priv->modified = modified;
190 return priv->modified;
193 gboolean modest_editor_window_get_modified(ModestEditorWindow *edit_win)
195 ModestEditorWindowPrivate *priv;
200 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
202 // g_message("get priv->data = %p", priv->user_data);
204 return priv->modified;
207 gboolean modest_editor_window_set_to_header(ModestEditorWindow *edit_win, const gchar *to)
209 ModestEditorWindowPrivate *priv;
214 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
216 return modest_ui_editor_window_set_to_header(to, priv->user_data);
220 gboolean modest_editor_window_set_cc_header(ModestEditorWindow *edit_win, const gchar *cc)
222 ModestEditorWindowPrivate *priv;
227 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
229 return modest_ui_editor_window_set_cc_header(cc, priv->user_data);
232 gboolean modest_editor_window_set_bcc_header(ModestEditorWindow *edit_win, const gchar *bcc)
234 ModestEditorWindowPrivate *priv;
239 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
241 return modest_ui_editor_window_set_bcc_header(bcc, priv->user_data);
244 gboolean modest_editor_window_set_subject_header(ModestEditorWindow *edit_win, const gchar *subject)
246 ModestEditorWindowPrivate *priv;
251 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
253 return modest_ui_editor_window_set_subject_header(subject, priv->user_data);
256 gboolean modest_editor_window_set_body(ModestEditorWindow *edit_win, const gchar *body)
258 ModestEditorWindowPrivate *priv;
263 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
265 return modest_ui_editor_window_set_body(body, priv->user_data);
269 gboolean modest_editor_window_attach_file(ModestEditorWindow *edit_win, ModestTnyAttachment *attachment)
271 ModestEditorWindowPrivate *priv;
275 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
277 priv->attachments = g_list_append(
281 return modest_ui_editor_window_update_attachments(priv->user_data);
284 GList * modest_editor_window_set_attachments(ModestEditorWindow *edit_win, const GList* attachments)
286 ModestEditorWindowPrivate *priv;
289 g_return_val_if_fail(edit_win, NULL);
291 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
293 modest_tny_attachment_free_list(priv->attachments);
294 priv->attachments = g_list_copy((GList *)attachments);
295 for (pos = priv->attachments ; pos ; pos = pos->next )
296 g_object_ref(pos->data);
297 return priv->attachments;
300 GList * modest_editor_window_get_attachments(ModestEditorWindow *edit_win)
302 ModestEditorWindowPrivate *priv;
304 g_return_val_if_fail(edit_win, NULL);
306 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
307 return priv->attachments;
312 modest_editor_window_set_identity(ModestEditorWindow *edit_win, const gchar *identity)
314 ModestEditorWindowPrivate *priv;
316 g_return_if_fail(edit_win);
318 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
320 g_free(priv->identity);
321 priv->identity = g_strdup(identity);
326 modest_editor_window_get_identity(ModestEditorWindow *edit_win)
328 ModestEditorWindowPrivate *priv;
330 g_return_val_if_fail(edit_win, NULL);
332 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
334 return priv->identity;
339 modest_editor_window_set_transport(ModestEditorWindow *edit_win, const gchar *transport)
341 ModestEditorWindowPrivate *priv;
343 g_return_if_fail(edit_win);
345 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
347 g_free(priv->transport);
348 priv->transport = g_strdup(transport);
353 modest_editor_window_get_transport(ModestEditorWindow *edit_win)
355 ModestEditorWindowPrivate *priv;
357 g_return_val_if_fail(edit_win, NULL);
359 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
361 return priv->transport;