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.
30 #include "modest-ui.h"
31 #include "modest-editor-window.h"
33 /* 'private'/'protected' functions */
34 static void modest_editor_window_class_init (ModestEditorWindowClass *klass);
35 static void modest_editor_window_init (ModestEditorWindow *obj);
36 static void modest_editor_window_finalize (GObject *obj);
45 typedef struct _ModestEditorWindowPrivate ModestEditorWindowPrivate;
46 struct _ModestEditorWindowPrivate {
54 #define MODEST_EDITOR_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
55 MODEST_TYPE_EDITOR_WINDOW, \
56 ModestEditorWindowPrivate))
58 static GObjectClass *parent_class = NULL;
60 /* uncomment the following if you have defined any signals */
61 /* static guint signals[LAST_SIGNAL] = {0}; */
64 modest_editor_window_get_type (void)
66 static GType my_type = 0;
68 static const GTypeInfo my_info = {
69 sizeof(ModestEditorWindowClass),
71 NULL, /* base finalize */
72 (GClassInitFunc) modest_editor_window_class_init,
73 NULL, /* class finalize */
74 NULL, /* class data */
75 sizeof(ModestEditorWindow),
77 (GInstanceInitFunc) modest_editor_window_init,
79 my_type = g_type_register_static (G_TYPE_OBJECT,
87 modest_editor_window_class_init (ModestEditorWindowClass *klass)
89 GObjectClass *gobject_class;
90 gobject_class = (GObjectClass*) klass;
92 parent_class = g_type_class_peek_parent (klass);
93 gobject_class->finalize = modest_editor_window_finalize;
95 g_type_class_add_private (gobject_class, sizeof(ModestEditorWindowPrivate));
100 modest_editor_window_init (ModestEditorWindow *obj)
102 ModestEditorWindowPrivate *priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(obj);
104 priv->user_data = NULL;
105 priv->modified = FALSE;
106 priv->attachments = NULL;
107 priv->identity = NULL;
108 priv->transport = NULL;
113 modest_editor_window_finalize (GObject *obj)
115 ModestEditorWindowPrivate *priv;
117 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(obj);
120 g_free(priv->user_data);
122 modest_editor_window_set_attachments(MODEST_EDITOR_WINDOW(obj), NULL);
123 g_free(priv->identity);
124 g_free(priv->transport);
125 g_object_unref (MODEST_EDITOR_WINDOW(obj)->window);
126 MODEST_EDITOR_WINDOW(obj)->window = NULL;
128 G_OBJECT_CLASS(parent_class)->finalize (obj);
132 modest_editor_window_new (ModestUI *ui)
135 ModestEditorWindowPrivate *priv;
139 self = G_OBJECT(g_object_new(MODEST_TYPE_EDITOR_WINDOW, NULL));
140 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(self);
142 /* for now create a local test-window */
145 edit_win = modest_ui_new_editor_window(ui, &data);
150 g_message("editor window user data is emtpy");
152 MODEST_EDITOR_WINDOW(self)->window = edit_win;
153 priv->user_data = data;
159 * return user defined data from a ModestEditorWindow instance
160 * like e.g. a refernce to a GladeXML*
162 gpointer modest_editor_window_get_data(ModestEditorWindow *edit_win)
164 ModestEditorWindowPrivate *priv;
169 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
171 // g_message("get priv->data = %p", priv->user_data);
173 return priv->user_data;
176 gboolean modest_editor_window_set_modified(ModestEditorWindow *edit_win, gboolean modified)
178 ModestEditorWindowPrivate *priv;
183 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
185 priv->modified = modified;
187 return priv->modified;
190 gboolean modest_editor_window_get_modified(ModestEditorWindow *edit_win)
192 ModestEditorWindowPrivate *priv;
197 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
199 // g_message("get priv->data = %p", priv->user_data);
201 return priv->modified;
204 gboolean modest_editor_window_set_to_header(ModestEditorWindow *edit_win, const gchar *to)
206 ModestEditorWindowPrivate *priv;
211 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
213 return modest_ui_editor_window_set_to_header(to, priv->user_data);
217 gboolean modest_editor_window_set_cc_header(ModestEditorWindow *edit_win, const gchar *cc)
219 ModestEditorWindowPrivate *priv;
224 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
226 return modest_ui_editor_window_set_cc_header(cc, priv->user_data);
229 gboolean modest_editor_window_set_bcc_header(ModestEditorWindow *edit_win, const gchar *bcc)
231 ModestEditorWindowPrivate *priv;
235 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
237 return modest_ui_editor_window_set_bcc_header(bcc, priv->user_data);
240 gboolean modest_editor_window_set_subject_header(ModestEditorWindow *edit_win, const gchar *subject)
242 ModestEditorWindowPrivate *priv;
246 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
248 return modest_ui_editor_window_set_subject_header(subject, priv->user_data);
251 gboolean modest_editor_window_set_body(ModestEditorWindow *edit_win, const gchar *body)
253 ModestEditorWindowPrivate *priv;
257 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
259 return modest_ui_editor_window_set_body(body, priv->user_data);
263 gboolean modest_editor_window_attach_file(ModestEditorWindow *edit_win,
264 ModestTnyAttachment *attachment)
266 ModestEditorWindowPrivate *priv;
270 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
272 priv->attachments = g_list_append(priv->attachments,
275 return modest_ui_editor_window_update_attachments(priv->user_data);
278 GList * modest_editor_window_set_attachments(ModestEditorWindow *edit_win, const GList* attachments)
280 ModestEditorWindowPrivate *priv;
283 g_return_val_if_fail(edit_win, NULL);
285 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
287 modest_tny_attachment_free_list(priv->attachments);
288 priv->attachments = g_list_copy((GList *)attachments);
289 for (pos = priv->attachments ; pos ; pos = pos->next )
290 g_object_ref(pos->data);
292 return priv->attachments;
295 GList * modest_editor_window_get_attachments(ModestEditorWindow *edit_win)
297 ModestEditorWindowPrivate *priv;
299 g_return_val_if_fail(edit_win, NULL);
301 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
302 return priv->attachments;
307 modest_editor_window_set_identity(ModestEditorWindow *edit_win, const gchar *identity)
309 ModestEditorWindowPrivate *priv;
311 g_return_if_fail(edit_win);
313 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
315 g_free(priv->identity);
316 priv->identity = g_strdup(identity);
321 modest_editor_window_get_identity(ModestEditorWindow *edit_win)
323 ModestEditorWindowPrivate *priv;
325 g_return_val_if_fail(edit_win, NULL);
327 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
329 return priv->identity;
334 modest_editor_window_set_transport(ModestEditorWindow *edit_win, const gchar *transport)
336 ModestEditorWindowPrivate *priv;
338 g_return_if_fail(edit_win);
340 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
342 g_free(priv->transport);
343 priv->transport = g_strdup(transport);
348 modest_editor_window_get_transport(ModestEditorWindow *edit_win)
350 ModestEditorWindowPrivate *priv;
352 g_return_val_if_fail(edit_win, NULL);
354 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
356 return priv->transport;