* don't depend on hildon when it's not there
[modest] / src / modest-editor-window.c
index 72ef31b..4dd7595 100644 (file)
@@ -1,6 +1,31 @@
-/* modest-editor-window.c */
-
-/* insert (c)/licensing information) */
+/* Copyright (c) 2006, Nokia Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * * Neither the name of the Nokia Corporation nor the names of its
+ *   contributors may be used to endorse or promote products derived from
+ *   this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
 
 #include "modest-ui.h"
 #include "modest-editor-window.h"
@@ -19,15 +44,18 @@ enum {
 
 typedef struct _ModestEditorWindowPrivate ModestEditorWindowPrivate;
 struct _ModestEditorWindowPrivate {
+       GtkWidget *window;
        gpointer user_data;
        gboolean modified;
        GList *attachments;
+       gchar *identity;
+       gchar *transport;
 };
 #define MODEST_EDITOR_WINDOW_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
                                                   MODEST_TYPE_EDITOR_WINDOW, \
                                                   ModestEditorWindowPrivate))
 /* globals */
-static GtkWindowClass *parent_class = NULL;
+static GObjectClass *parent_class = NULL;
 
 /* uncomment the following if you have defined any signals */
 /* static guint signals[LAST_SIGNAL] = {0}; */
@@ -48,7 +76,7 @@ modest_editor_window_get_type (void)
                        1,              /* n_preallocs */
                        (GInstanceInitFunc) modest_editor_window_init,
                };
-               my_type = g_type_register_static (GTK_TYPE_WINDOW,
+               my_type = g_type_register_static (G_TYPE_OBJECT,
                                                  "ModestEditorWindow",
                                                  &my_info, 0);
        }
@@ -66,12 +94,6 @@ modest_editor_window_class_init (ModestEditorWindowClass *klass)
 
        g_type_class_add_private (gobject_class, sizeof(ModestEditorWindowPrivate));
 
-       /* signal definitions go here, e.g.: */
-/*     signals[MY_SIGNAL_1] = */
-/*             g_signal_new ("my_signal_1",....); */
-/*     signals[MY_SIGNAL_2] = */
-/*             g_signal_new ("my_signal_2",....); */
-/*     etc. */
 }
 
 static void
@@ -82,6 +104,9 @@ modest_editor_window_init (ModestEditorWindow *obj)
        priv->user_data = NULL;
        priv->modified = FALSE;
        priv->attachments = NULL;
+       priv->identity = NULL;
+       priv->transport = NULL;
+       obj->window = NULL;
 }
 
 static void
@@ -94,15 +119,21 @@ modest_editor_window_finalize (GObject *obj)
        if (priv->user_data)
                g_free(priv->user_data);
 
+       modest_editor_window_set_attachments(MODEST_EDITOR_WINDOW(obj), NULL);
+       g_free(priv->identity);
+       g_free(priv->transport);
+       g_object_unref (MODEST_EDITOR_WINDOW(obj)->window);
+       MODEST_EDITOR_WINDOW(obj)->window = NULL;
+       
        G_OBJECT_CLASS(parent_class)->finalize (obj);
 }
 
-GtkWidget*
+GObject*
 modest_editor_window_new (ModestUI *ui)
 {
        GObject *self;
        ModestEditorWindowPrivate *priv;
-       GtkWidget *w;
+       GObject *edit_win;
        gpointer data;
 
        self = G_OBJECT(g_object_new(MODEST_TYPE_EDITOR_WINDOW, NULL));
@@ -111,18 +142,17 @@ modest_editor_window_new (ModestUI *ui)
        /* for now create a local test-window */
 
        data = NULL;
-       w = GTK_WIDGET(modest_ui_new_editor_window(ui, &data));
-       // g_message("new data = %p", data);
-       if (!w)
+       edit_win = modest_ui_new_editor_window(ui, &data);
+       
+       if (!edit_win)
                return NULL;
        if (!data)
                g_message("editor window user data is emtpy");
 
-       gtk_container_add(GTK_CONTAINER(self), w);
+       MODEST_EDITOR_WINDOW(self)->window = edit_win;
        priv->user_data = data;
-       // g_message("new priv->data = %p", priv->user_data);
        
-       return GTK_WIDGET(self);
+       return self;
 }
 
 /*
@@ -187,10 +217,10 @@ gboolean modest_editor_window_set_to_header(ModestEditorWindow *edit_win, const
 gboolean modest_editor_window_set_cc_header(ModestEditorWindow *edit_win, const gchar *cc)
 {
        ModestEditorWindowPrivate *priv;
-
        
        if (!edit_win)
                return FALSE;
+
        priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
 
        return modest_ui_editor_window_set_cc_header(cc, priv->user_data);
@@ -199,7 +229,6 @@ gboolean modest_editor_window_set_cc_header(ModestEditorWindow *edit_win, const
 gboolean modest_editor_window_set_bcc_header(ModestEditorWindow *edit_win, const gchar *bcc)
 {
        ModestEditorWindowPrivate *priv;
-
        
        if (!edit_win)
                return FALSE;
@@ -211,7 +240,6 @@ gboolean modest_editor_window_set_bcc_header(ModestEditorWindow *edit_win, const
 gboolean modest_editor_window_set_subject_header(ModestEditorWindow *edit_win, const gchar *subject)
 {
        ModestEditorWindowPrivate *priv;
-
        
        if (!edit_win)
                return FALSE;
@@ -224,7 +252,6 @@ gboolean modest_editor_window_set_body(ModestEditorWindow *edit_win, const gchar
 {
        ModestEditorWindowPrivate *priv;
 
-       
        if (!edit_win)
                return FALSE;
        priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
@@ -233,7 +260,8 @@ gboolean modest_editor_window_set_body(ModestEditorWindow *edit_win, const gchar
 }
 
 
-gboolean modest_editor_window_attach_file(ModestEditorWindow *edit_win, const gchar *filename)
+gboolean modest_editor_window_attach_file(ModestEditorWindow *edit_win,
+                                         ModestTnyAttachment *attachment)
 {
        ModestEditorWindowPrivate *priv;
 
@@ -241,22 +269,26 @@ gboolean modest_editor_window_attach_file(ModestEditorWindow *edit_win, const gc
                return FALSE;
        priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
        
-       priv->attachments = g_list_append(
-                                                       priv->attachments, 
-                                                       g_strdup(filename));
+       priv->attachments = g_list_append(priv->attachments, 
+                                         attachment);
        
        return modest_ui_editor_window_update_attachments(priv->user_data);
 }
 
-GList * modest_editor_window_set_attachments(ModestEditorWindow *edit_win, GList* attachments)
+GList * modest_editor_window_set_attachments(ModestEditorWindow *edit_win, const GList* attachments)
 {
        ModestEditorWindowPrivate *priv;
+       GList *pos;
 
        g_return_val_if_fail(edit_win, NULL);
        
        priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
 
-       priv->attachments = attachments;
+       modest_tny_attachment_free_list(priv->attachments);
+       priv->attachments = g_list_copy((GList *)attachments);
+       for (pos = priv->attachments ; pos ; pos = pos->next )
+               g_object_ref(pos->data);
+
        return priv->attachments;
 }
 
@@ -268,4 +300,58 @@ GList * modest_editor_window_get_attachments(ModestEditorWindow *edit_win)
        
        priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
        return priv->attachments;
+}
+
+
+void
+modest_editor_window_set_identity(ModestEditorWindow *edit_win, const gchar *identity)
+{
+       ModestEditorWindowPrivate *priv;
+
+       g_return_if_fail(edit_win);
+
+       priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
+
+       g_free(priv->identity);
+       priv->identity = g_strdup(identity);
+}
+
+
+const gchar *
+modest_editor_window_get_identity(ModestEditorWindow *edit_win)
+{
+       ModestEditorWindowPrivate *priv;
+
+       g_return_val_if_fail(edit_win, NULL);
+
+       priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
+
+       return priv->identity;
 }      
+
+
+void
+modest_editor_window_set_transport(ModestEditorWindow *edit_win, const gchar *transport)
+{
+       ModestEditorWindowPrivate *priv;
+
+       g_return_if_fail(edit_win);
+
+       priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
+
+       g_free(priv->transport);
+       priv->transport = g_strdup(transport);
+}
+
+
+const gchar *
+modest_editor_window_get_transport(ModestEditorWindow *edit_win)
+{
+       ModestEditorWindowPrivate *priv;
+
+       g_return_val_if_fail(edit_win, NULL);
+
+       priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win);
+
+       return priv->transport;
+}