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 {
53 #define MODEST_EDITOR_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
54 MODEST_TYPE_EDITOR_WINDOW, \
55 ModestEditorWindowPrivate))
57 static GObjectClass *parent_class = NULL;
59 /* uncomment the following if you have defined any signals */
60 /* static guint signals[LAST_SIGNAL] = {0}; */
63 modest_editor_window_get_type (void)
65 static GType my_type = 0;
67 static const GTypeInfo my_info = {
68 sizeof(ModestEditorWindowClass),
70 NULL, /* base finalize */
71 (GClassInitFunc) modest_editor_window_class_init,
72 NULL, /* class finalize */
73 NULL, /* class data */
74 sizeof(ModestEditorWindow),
76 (GInstanceInitFunc) modest_editor_window_init,
78 my_type = g_type_register_static (G_TYPE_OBJECT,
86 modest_editor_window_class_init (ModestEditorWindowClass *klass)
88 GObjectClass *gobject_class;
89 gobject_class = (GObjectClass*) klass;
91 parent_class = g_type_class_peek_parent (klass);
92 gobject_class->finalize = modest_editor_window_finalize;
94 g_type_class_add_private (gobject_class, sizeof(ModestEditorWindowPrivate));
99 modest_editor_window_init (ModestEditorWindow *obj)
101 ModestEditorWindowPrivate *priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(obj);
103 priv->user_data = NULL;
104 priv->modified = FALSE;
105 priv->attachments = NULL;
106 priv->identity = NULL;
107 priv->transport = NULL;
112 modest_editor_window_finalize (GObject *obj)
114 ModestEditorWindowPrivate *priv;
116 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(obj);
119 g_free(priv->user_data);
121 modest_editor_window_set_attachments(MODEST_EDITOR_WINDOW(obj), NULL);
122 g_free(priv->identity);
123 g_free(priv->transport);
124 g_object_unref (MODEST_EDITOR_WINDOW(obj)->window);
125 MODEST_EDITOR_WINDOW(obj)->window = NULL;
127 G_OBJECT_CLASS(parent_class)->finalize (obj);
131 modest_editor_window_new (ModestUI *ui)
134 ModestEditorWindowPrivate *priv;
138 self = G_OBJECT(g_object_new(MODEST_TYPE_EDITOR_WINDOW, NULL));
139 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(self);
141 /* for now create a local test-window */
144 edit_win = G_OBJECT(modest_ui_new_editor_window(ui, &data));
149 g_message("editor window user data is emtpy");
151 MODEST_EDITOR_WINDOW(self)->window = GTK_WINDOW(edit_win);
152 priv->user_data = data;
158 * return user defined data from a ModestEditorWindow instance
159 * like e.g. a refernce to a GladeXML*
161 gpointer modest_editor_window_get_data(ModestEditorWindow *edit_win)
163 ModestEditorWindowPrivate *priv;
168 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
170 // g_message("get priv->data = %p", priv->user_data);
172 return priv->user_data;
175 gboolean modest_editor_window_set_modified(ModestEditorWindow *edit_win, gboolean modified)
177 ModestEditorWindowPrivate *priv;
182 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
184 priv->modified = modified;
186 return priv->modified;
189 gboolean modest_editor_window_get_modified(ModestEditorWindow *edit_win)
191 ModestEditorWindowPrivate *priv;
196 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
198 // g_message("get priv->data = %p", priv->user_data);
200 return priv->modified;
203 gboolean modest_editor_window_set_to_header(ModestEditorWindow *edit_win, const gchar *to)
205 ModestEditorWindowPrivate *priv;
210 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
212 return modest_ui_editor_window_set_to_header(to, priv->user_data);
216 gboolean modest_editor_window_set_cc_header(ModestEditorWindow *edit_win, const gchar *cc)
218 ModestEditorWindowPrivate *priv;
223 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
225 return modest_ui_editor_window_set_cc_header(cc, priv->user_data);
228 gboolean modest_editor_window_set_bcc_header(ModestEditorWindow *edit_win, const gchar *bcc)
230 ModestEditorWindowPrivate *priv;
234 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
236 return modest_ui_editor_window_set_bcc_header(bcc, priv->user_data);
239 gboolean modest_editor_window_set_subject_header(ModestEditorWindow *edit_win, const gchar *subject)
241 ModestEditorWindowPrivate *priv;
245 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
247 return modest_ui_editor_window_set_subject_header(subject, priv->user_data);
250 gboolean modest_editor_window_set_body(ModestEditorWindow *edit_win, const gchar *body)
252 ModestEditorWindowPrivate *priv;
256 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
258 return modest_ui_editor_window_set_body(body, priv->user_data);
262 gboolean modest_editor_window_attach_file(ModestEditorWindow *edit_win,
263 ModestTnyAttachment *attachment)
265 ModestEditorWindowPrivate *priv;
269 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
271 priv->attachments = g_list_append(priv->attachments,
274 return modest_ui_editor_window_update_attachments(priv->user_data);
277 GList * modest_editor_window_set_attachments(ModestEditorWindow *edit_win, const GList* attachments)
279 ModestEditorWindowPrivate *priv;
282 g_return_val_if_fail(edit_win, NULL);
284 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
286 modest_tny_attachment_free_list(priv->attachments);
287 priv->attachments = g_list_copy((GList *)attachments);
288 for (pos = priv->attachments ; pos ; pos = pos->next )
289 g_object_ref(pos->data);
291 return priv->attachments;
294 GList * modest_editor_window_get_attachments(ModestEditorWindow *edit_win)
296 ModestEditorWindowPrivate *priv;
298 g_return_val_if_fail(edit_win, NULL);
300 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
301 return priv->attachments;
306 modest_editor_window_set_identity(ModestEditorWindow *edit_win, const gchar *identity)
308 ModestEditorWindowPrivate *priv;
310 g_return_if_fail(edit_win);
312 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
314 g_free(priv->identity);
315 priv->identity = g_strdup(identity);
320 modest_editor_window_get_identity(ModestEditorWindow *edit_win)
322 ModestEditorWindowPrivate *priv;
324 g_return_val_if_fail(edit_win, NULL);
326 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
328 return priv->identity;
333 modest_editor_window_set_transport(ModestEditorWindow *edit_win, const gchar *transport)
335 ModestEditorWindowPrivate *priv;
337 g_return_if_fail(edit_win);
339 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
341 g_free(priv->transport);
342 priv->transport = g_strdup(transport);
347 modest_editor_window_get_transport(ModestEditorWindow *edit_win)
349 ModestEditorWindowPrivate *priv;
351 g_return_val_if_fail(edit_win, NULL);
353 priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
355 return priv->transport;