* Added per-message size limit to send&receive
[modest] / src / maemo / modest-progress-bar-widget.c
index 56c6759..c302d3c 100644 (file)
@@ -44,12 +44,19 @@ static void modest_progress_bar_add_operation    (ModestProgressObject *self,
 static void modest_progress_bar_remove_operation (ModestProgressObject *self,
                                                    ModestMailOperation  *mail_op);
 
+static void 
+modest_progress_bar_cancel_current_operation (ModestProgressObject *self);
+
+static guint
+modest_progress_bar_num_pending_operations (ModestProgressObject *self);
+
 static void on_progress_changed                    (ModestMailOperation  *mail_op, 
+                                                   ModestMailOperationState *state,
                                                    ModestProgressBarWidget *self);
 
 static gboolean     progressbar_clean        (GtkProgressBar *bar);
 
-#define XALIGN 1
+#define XALIGN 0.5
 #define YALIGN 0.5
 #define XSPACE 1
 #define YSPACE 0
@@ -92,6 +99,8 @@ modest_progress_object_init (gpointer g, gpointer iface_data)
 
        klass->add_operation_func = modest_progress_bar_add_operation;
        klass->remove_operation_func = modest_progress_bar_remove_operation;
+       klass->cancel_current_operation_func = modest_progress_bar_cancel_current_operation;
+       klass->num_pending_operations_func = modest_progress_bar_num_pending_operations;
 }
 
 
@@ -163,20 +172,21 @@ modest_progress_bar_widget_init (ModestProgressBarWidget *self)
 
        priv = MODEST_PROGRESS_BAR_WIDGET_GET_PRIVATE(self);
        
+       /* Alignment */
+       align = gtk_alignment_new(XALIGN, YALIGN, XSPACE, YSPACE);
+
        /* 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.width = 228;
        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 */
+       
+       /* 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));       
 }
 
@@ -284,47 +294,72 @@ modest_progress_bar_remove_operation (ModestProgressObject *self,
        g_free(tmp_data);
 }
 
+static guint
+modest_progress_bar_num_pending_operations (ModestProgressObject *self)
+{
+       ModestProgressBarWidget *me;
+       ModestProgressBarWidgetPrivate *priv;
+       
+       me = MODEST_PROGRESS_BAR_WIDGET (self);
+       priv = MODEST_PROGRESS_BAR_WIDGET_GET_PRIVATE (me);
+       
+       return g_slist_length(priv->observables);
+}
+
+static void 
+modest_progress_bar_cancel_current_operation (ModestProgressObject *self)
+{
+       ModestProgressBarWidget *me;
+       ModestProgressBarWidgetPrivate *priv;
+
+       me = MODEST_PROGRESS_BAR_WIDGET (self);
+       priv = MODEST_PROGRESS_BAR_WIDGET_GET_PRIVATE (me);
+
+       if (priv->current == NULL) return;
+       modest_mail_operation_cancel (priv->current);
+
+}
 static void 
 on_progress_changed (ModestMailOperation  *mail_op, 
+                    ModestMailOperationState *state,
                     ModestProgressBarWidget *self)
 {
        ModestProgressBarWidgetPrivate *priv;
        gboolean determined = FALSE;
-       ModestMailOperationId id;
 
        priv = MODEST_PROGRESS_BAR_WIDGET_GET_PRIVATE (self);
 
        /* If the mail operation is the currently shown one */
        if (priv->current == mail_op) {
                gchar *msg = NULL;
-               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);
+               
+               determined = (state->done > 0 && state->total > 0) & 
+                       !(state->done == 1 && state->total == 100);
 
-               switch (id) {
-               case MODEST_MAIL_OPERATION_ID_RECEIVE:          
+               switch (state->op_type) {
+               case MODEST_MAIL_OPERATION_TYPE_RECEIVE:                
                        if (determined)
-                               msg = g_strdup_printf(_("mcen_me_receiving"), done, total);
+/*                             msg = g_strdup_printf(_("mcen_me_receiving"), done, total); */
+                               msg = g_strdup_printf("Receiving %d/%d", state->done, state->total);
                        else 
-                               msg = g_strdup(_("mail_me_receiving"));
+/*                             msg = g_strdup(_("mail_me_receiving")); */
+                               msg = g_strdup("Receiving ...");
                        break;
-               case MODEST_MAIL_OPERATION_ID_SEND:             
+               case MODEST_MAIL_OPERATION_TYPE_SEND:           
                        if (determined)
-                               msg = g_strdup_printf(_("mcen_me_sending"), done, total);
+                               msg = g_strdup_printf(_("mcen_me_sending"), state->done, state->total);
                        else 
                                msg = g_strdup(_("mail_me_sending"));
                        break;
                        
-               case MODEST_MAIL_OPERATION_ID_OPEN:             
+               case MODEST_MAIL_OPERATION_TYPE_OPEN:           
                        msg = g_strdup(_("mail_me_opening"));
                        break;
                default:
                        msg = g_strdup("");
                }
                
-               modest_progress_bar_widget_set_progress (self, msg, done, total);
+               modest_progress_bar_widget_set_progress (self, msg, state->done, state->total);
                g_free (msg);
        }
 }
@@ -348,11 +383,14 @@ modest_progress_bar_widget_new ()
 void 
 modest_progress_bar_widget_set_progress   (ModestProgressBarWidget *self,
                                           const gchar *message,
-                                          gint done,
-                                          gint total)
+                                          guint done,
+                                          guint total)
 {
        ModestProgressBarWidgetPrivate *priv;
        
+       g_return_if_fail (MODEST_IS_PROGRESS_BAR_WIDGET(self));
+       g_return_if_fail (done <= total);
+       
        priv = MODEST_PROGRESS_BAR_WIDGET_GET_PRIVATE (self);
        
        /* Set progress */