* Change mail_operation_new calls tu use the new field 'id'.
authorJavier Fernandez Garcia-Boente <jfernandez@igalia.com>
Sat, 28 Apr 2007 17:50:05 +0000 (17:50 +0000)
committerJavier Fernandez Garcia-Boente <jfernandez@igalia.com>
Sat, 28 Apr 2007 17:50:05 +0000 (17:50 +0000)
* Implementation of updating refresh call for updating progress
values and emiting signal 'progress_changed'.
* Review ProgressBar widget layout.
   * Adding alignment and adjustment objects

pmo-trunk-r1712

src/maemo/modest-hildon-includes.h
src/maemo/modest-progress-bar-widget.c
src/modest-init.c
src/modest-mail-operation.c
src/modest-mail-operation.h
src/widgets/modest-folder-view.c

index 36c0577..59fc98f 100644 (file)
@@ -45,6 +45,7 @@ k * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 #include <hildon-widgets/hildon-file-chooser-dialog.h>
 #include <hildon-widgets/hildon-font-selection-dialog.h>
 #include <hildon-widgets/hildon-find-toolbar.h>
+#include <hildon-widgets/hildon-sort-dialog.h>
 #else
 #include <hildon-mime.h>
 #include <hildon-uri.h>
index 38f63fb..56c6759 100644 (file)
@@ -49,6 +49,14 @@ static void on_progress_changed                    (ModestMailOperation  *mail_o
 
 static gboolean     progressbar_clean        (GtkProgressBar *bar);
 
+#define XALIGN 1
+#define YALIGN 0.5
+#define XSPACE 1
+#define YSPACE 0
+
+#define LOWER 0
+#define UPPER 150
+
 /* list my signals  */
 /* enum { */
 /*     LAST_SIGNAL */
@@ -66,11 +74,11 @@ struct _ModestProgressBarWidgetPrivate {
         ModestMailOperation *current;
 
        GtkWidget *progress_bar;
-
 };
 #define MODEST_PROGRESS_BAR_WIDGET_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
                                                  MODEST_TYPE_PROGRESS_BAR_WIDGET, \
                                                  ModestProgressBarWidgetPrivate))
+
 /* globals */
 static GtkContainerClass *parent_class = NULL;
 
@@ -145,12 +153,31 @@ modest_progress_bar_widget_class_init (ModestProgressBarWidgetClass *klass)
 }
 
 static void
-modest_progress_bar_widget_init (ModestProgressBarWidget *obj)
+modest_progress_bar_widget_init (ModestProgressBarWidget *self)
 {
-       ModestProgressBarWidgetPrivate *priv;
        
-       priv = MODEST_PROGRESS_BAR_WIDGET_GET_PRIVATE(obj); 
-       priv->progress_bar = NULL;
+       ModestProgressBarWidgetPrivate *priv;
+       GtkWidget *align = NULL;
+       GtkRequisition req;
+       GtkAdjustment *adj;
+
+       priv = MODEST_PROGRESS_BAR_WIDGET_GET_PRIVATE(self);
+       
+       /* Build GtkProgressBar */
+       align = gtk_alignment_new(XALIGN, YALIGN, XSPACE, YSPACE);      
+       adj = (GtkAdjustment *) gtk_adjustment_new (0, LOWER, UPPER, 0, 0, 0);
+       priv->progress_bar = gtk_progress_bar_new_with_adjustment (adj);                
+       req.width = 50;
+       req.height = 64;
+       gtk_progress_set_text_alignment (GTK_PROGRESS (priv->progress_bar), 0, 0.5);
+       gtk_progress_bar_set_ellipsize (GTK_PROGRESS_BAR (priv->progress_bar), PANGO_ELLIPSIZE_END);
+       gtk_widget_size_request (priv->progress_bar, &req);
+       gtk_container_add (GTK_CONTAINER (align), priv->progress_bar);
+
+       /* Add progress bar widget */
+       gtk_box_pack_start (GTK_BOX(self), align, TRUE, TRUE, 0);
+       gtk_container_add(GTK_CONTAINER(align), priv->progress_bar);
+       gtk_widget_show_all (GTK_WIDGET(self));       
 }
 
 static void
@@ -163,6 +190,20 @@ destroy_observable_data (ObservableData *data)
 static void
 modest_progress_bar_widget_finalize (GObject *obj)
 {
+       ModestProgressBarWidgetPrivate *priv;
+
+       priv = MODEST_PROGRESS_BAR_WIDGET_GET_PRIVATE(obj);
+       if (priv->observables) {
+               GSList *tmp;
+
+               for (tmp = priv->observables; tmp; tmp = g_slist_next (tmp)) {
+                       destroy_observable_data ((ObservableData *) tmp->data);
+                       g_free (tmp->data);
+               }
+               g_slist_free (priv->observables);
+               priv->observables = NULL;
+       }
+
        G_OBJECT_CLASS(parent_class)->finalize (obj);
 }
 
@@ -189,6 +230,9 @@ modest_progress_bar_add_operation (ModestProgressObject *self,
                priv->current = mail_op;
        }
        priv->observables = g_slist_append (priv->observables, data);
+
+       /* Call progress_change handler to initialize progress message */
+/*     on_progress_changed (mail_op, me); */
 }
 
 static gint
@@ -207,12 +251,16 @@ modest_progress_bar_remove_operation (ModestProgressObject *self,
        ModestProgressBarWidget *me;
        ModestProgressBarWidgetPrivate *priv;
        GSList *link;
+       ObservableData *tmp_data = NULL;
 
        me = MODEST_PROGRESS_BAR_WIDGET (self);
        priv = MODEST_PROGRESS_BAR_WIDGET_GET_PRIVATE (me);
 
+       /* Find item */
+       tmp_data = g_malloc0 (sizeof (ObservableData));
+        tmp_data->mail_op = g_object_ref (mail_op);  
        link = g_slist_find_custom (priv->observables,
-                                   mail_op,
+                                   tmp_data,
                                    (GCompareFunc) compare_observable_data);
        
        /* Remove the item */
@@ -231,6 +279,9 @@ modest_progress_bar_remove_operation (ModestProgressObject *self,
                /* Refresh the view */
                progressbar_clean (GTK_PROGRESS_BAR (priv->progress_bar));
        }
+       
+       /* free */
+       g_free(tmp_data);
 }
 
 static void 
@@ -239,7 +290,7 @@ on_progress_changed (ModestMailOperation  *mail_op,
 {
        ModestProgressBarWidgetPrivate *priv;
        gboolean determined = FALSE;
-       guint id = 0;
+       ModestMailOperationId id;
 
        priv = MODEST_PROGRESS_BAR_WIDGET_GET_PRIVATE (self);
 
@@ -249,25 +300,28 @@ on_progress_changed (ModestMailOperation  *mail_op,
                gint done = modest_mail_operation_get_task_done (mail_op);
                gint total = modest_mail_operation_get_task_total (mail_op);
 
+               determined = (done > 0 && total > 0);
+               id = modest_mail_operation_get_id (mail_op);
+
                switch (id) {
-               case STATUS_RECEIVING:          
+               case MODEST_MAIL_OPERATION_ID_RECEIVE:          
                        if (determined)
                                msg = g_strdup_printf(_("mcen_me_receiving"), done, total);
                        else 
                                msg = g_strdup(_("mail_me_receiving"));
                        break;
-               case STATUS_SENDING:            
+               case MODEST_MAIL_OPERATION_ID_SEND:             
                        if (determined)
                                msg = g_strdup_printf(_("mcen_me_sending"), done, total);
                        else 
                                msg = g_strdup(_("mail_me_sending"));
                        break;
                        
-               case STATUS_OPENING:            
+               case MODEST_MAIL_OPERATION_ID_OPEN:             
                        msg = g_strdup(_("mail_me_opening"));
                        break;
                default:
-                       g_return_if_reached();
+                       msg = g_strdup("");
                }
                
                modest_progress_bar_widget_set_progress (self, msg, done, total);
@@ -287,29 +341,7 @@ progressbar_clean (GtkProgressBar *bar)
 GtkWidget*
 modest_progress_bar_widget_new ()
 {
-       GObject *obj;
-       ModestProgressBarWidget *self;
-       ModestProgressBarWidgetPrivate *priv;
-       GtkRequisition req;
-       
-
-       obj = g_object_new(MODEST_TYPE_PROGRESS_BAR_WIDGET, NULL);
-       self = MODEST_PROGRESS_BAR_WIDGET(obj);
-       priv = MODEST_PROGRESS_BAR_WIDGET_GET_PRIVATE(self);
-       
-       /* Build GtkProgressBar */
-       priv->progress_bar = gtk_progress_bar_new ();           
-       req.width = 50;
-       req.height = 64;
-       gtk_progress_set_text_alignment (GTK_PROGRESS (priv->progress_bar), 0.0, 0.5);
-       gtk_progress_bar_set_ellipsize (GTK_PROGRESS_BAR (priv->progress_bar), PANGO_ELLIPSIZE_END);
-       gtk_widget_size_request (priv->progress_bar, &req);
-       
-       /* Add progress bar widget */
-       gtk_box_pack_start (GTK_BOX(self), priv->progress_bar, TRUE, TRUE, 2);
-       gtk_widget_show_all (GTK_WIDGET(self));
-
-       return GTK_WIDGET(self);
+       return GTK_WIDGET (g_object_new (MODEST_TYPE_PROGRESS_BAR_WIDGET, NULL));
 }
 
 
index b5949c0..53c32dc 100644 (file)
@@ -78,7 +78,7 @@ static const FolderCols INBOX_COLUMNS_DETAILS[] = {
 static const FolderCols INBOX_COLUMNS_TWOLINES[] = {
        {MODEST_HEADER_VIEW_COLUMN_COMPACT_FLAG, 40, 0},
        {MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_IN, 180, 0},
-       {MODEST_HEADER_VIEW_COLUMN_COMPACT_RECEIVED_DATE, 240, 1}
+       {MODEST_HEADER_VIEW_COLUMN_COMPACT_RECEIVED_DATE, 240, -1}
 };
 
 static const FolderCols OUTBOX_COLUMNS_DETAILS[] = {
@@ -99,7 +99,7 @@ static const FolderCols OUTBOX_COLUMNS_TWOLINES[] = {
 static const FolderCols SENT_COLUMNS_TWOLINES[] = {
        {MODEST_HEADER_VIEW_COLUMN_COMPACT_FLAG, 40, 0},
        {MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT,180, 0},
-       {MODEST_HEADER_VIEW_COLUMN_COMPACT_SENT_DATE, 240, 1}
+       {MODEST_HEADER_VIEW_COLUMN_COMPACT_SENT_DATE, 240, -1}
 };
 
 #ifdef MODEST_PLATFORM_MAEMO
index 651682c..955a893 100644 (file)
@@ -38,6 +38,7 @@
 #include <tny-camel-stream.h>
 #include <tny-simple-list.h>
 #include <tny-send-queue.h>
+#include <tny-status.h>
 #include <camel/camel-stream-mem.h>
 #include <glib/gi18n.h>
 #include <modest-tny-account.h>
@@ -71,7 +72,8 @@ typedef struct _ModestMailOperationPrivate ModestMailOperationPrivate;
 struct _ModestMailOperationPrivate {
        guint                      done;
        guint                      total;
-       ModestMailOperationStatus  status;
+       ModestMailOperationStatus  status;      
+       ModestMailOperationId      id;          
        GError                    *error;
 };
 
@@ -166,6 +168,7 @@ modest_mail_operation_init (ModestMailOperation *obj)
        priv = MODEST_MAIL_OPERATION_GET_PRIVATE(obj);
 
        priv->status   = MODEST_MAIL_OPERATION_STATUS_INVALID;
+       priv->id       = MODEST_MAIL_OPERATION_ID_UNKNOWN;
        priv->error    = NULL;
        priv->done     = 0;
        priv->total    = 0;
@@ -187,12 +190,37 @@ modest_mail_operation_finalize (GObject *obj)
 }
 
 ModestMailOperation*
-modest_mail_operation_new (void)
+modest_mail_operation_new_with_id (ModestMailOperationId id)
+{
+       ModestMailOperation *obj;
+       ModestMailOperationPrivate *priv;
+
+
+       obj = MODEST_MAIL_OPERATION(g_object_new(MODEST_TYPE_MAIL_OPERATION, NULL));
+       priv = MODEST_MAIL_OPERATION_GET_PRIVATE(obj);
+
+       priv->id = id;
+
+       return obj;
+}
+
+ModestMailOperation*
+modest_mail_operation_new ()
 {
        return MODEST_MAIL_OPERATION(g_object_new(MODEST_TYPE_MAIL_OPERATION, NULL));
 }
 
 
+ModestMailOperationId
+modest_mail_operation_get_id (ModestMailOperation *self)
+{
+       ModestMailOperationPrivate *priv;
+
+       priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self);
+       
+       return priv->id;
+}
+
 void
 modest_mail_operation_send_mail (ModestMailOperation *self,
                                 TnyTransportAccount *transport_account,
@@ -823,24 +851,28 @@ on_refresh_folder (TnyFolder   *folder,
        modest_mail_operation_queue_remove (modest_runtime_get_mail_operation_queue (), self);
 }
 
-/* static void */
-/* on_refresh_folder_status_update (TnyFolder *folder, const gchar *msg, */
-/*                              gint num, gint total,  gpointer user_data) */
-/* { */
-/*     ModestMailOperation *self; */
-/*     ModestMailOperationPrivate *priv; */
+static void
+on_refresh_folder_status_update (GObject *obj,
+                                TnyStatus *status,  
+                                gpointer user_data)
+{
+       ModestMailOperation *self;
+       ModestMailOperationPrivate *priv;
 
-/*     self = MODEST_MAIL_OPERATION (user_data); */
-/*     priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self); */
+       g_return_if_fail (status != NULL);
+       g_return_if_fail (status->code == TNY_FOLDER_STATUS_CODE_REFRESH);
 
-/*     priv->done = num; */
-/*     priv->total = total; */
+       self = MODEST_MAIL_OPERATION (user_data);
+       priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self);
+
+       priv->done = status->position;
+       priv->total = status->of_total;
 
-/*     if (num == 1 && total == 100) */
-/*             return; */
+       if (priv->done == 1 && priv->total == 100)
+               return;
 
-/*     g_signal_emit (G_OBJECT (self), signals[PROGRESS_CHANGED_SIGNAL], 0, NULL); */
-/* } */
+       g_signal_emit (G_OBJECT (self), signals[PROGRESS_CHANGED_SIGNAL], 0, NULL);
+}
 
 void 
 modest_mail_operation_refresh_folder  (ModestMailOperation *self,
@@ -860,8 +892,8 @@ modest_mail_operation_refresh_folder  (ModestMailOperation *self,
           must review the design */
        tny_folder_refresh_async (folder,
                                  on_refresh_folder,
-/*                               on_refresh_folder_status_update, */
-                                 NULL,
+                                 on_refresh_folder_status_update,
+/*                               NULL, */
                                  self);
 }
 
index 4aba37b..a67b0ee 100644 (file)
@@ -60,6 +60,19 @@ typedef enum _ModestMailOperationStatus {
        MODEST_MAIL_OPERATION_STATUS_CANCELED
 } ModestMailOperationStatus;
 
+/**
+ * ModestMailOperationId:
+ *
+ * The id for identifying the type of mail operation
+ */
+typedef enum _ModestMailOperationId {
+       MODEST_MAIL_OPERATION_ID_SEND,
+       MODEST_MAIL_OPERATION_ID_RECEIVE,
+       MODEST_MAIL_OPERATION_ID_OPEN,
+       MODEST_MAIL_OPERATION_ID_DELETE,
+       MODEST_MAIL_OPERATION_ID_UNKNOWN,
+} ModestMailOperationId;
+
 struct _ModestMailOperation {
         GObject parent;
        /* insert public members, if any */
@@ -76,7 +89,18 @@ struct _ModestMailOperationClass {
 GType        modest_mail_operation_get_type    (void) G_GNUC_CONST;
 
 /* typical parameter-less _new function */
-ModestMailOperation*    modest_mail_operation_new         (void);
+ModestMailOperation*    modest_mail_operation_new_with_id     (ModestMailOperationId id);
+ModestMailOperation*    modest_mail_operation_new             (void);
+
+/**
+ * modest_mail_operation_get_id
+ * @self: a #ModestMailOperation
+ * 
+ * Gets the private id field of mail operation. This id identifies
+ * the class/type of mail operation.  
+  **/
+ModestMailOperationId
+modest_mail_operation_get_id (ModestMailOperation *self);
 
 /* fill in other public functions, eg.: */
 
index 3be2e71..4eaf923 100644 (file)
@@ -991,7 +991,7 @@ drag_and_drop_from_header_view (GtkTreeModel *source_model,
                            &folder, -1);
 
        /* Transfer message */
-       mail_op = modest_mail_operation_new ();
+       mail_op = modest_mail_operation_new_with_id (MODEST_MAIL_OPERATION_ID_RECEIVE);
 
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
                                         mail_op);
@@ -1051,7 +1051,7 @@ drag_and_drop_from_folder_view (GtkTreeModel     *source_model,
                            &folder, -1);
 
        /* Do the mail operation */
-       mail_op = modest_mail_operation_new ();
+       mail_op = modest_mail_operation_new_with_id (MODEST_MAIL_OPERATION_ID_RECEIVE);
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), 
                                         mail_op);
        g_signal_connect (G_OBJECT (mail_op), "progress-changed",