X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmaemo%2Fmodest-progress-bar-widget.c;h=c302d3c0f372d157628076c5b84d1716b1e25cfa;hp=56c6759c4f0aaa76e03c97c3c8a49addb5f64a0d;hb=fd958e8a96328612ae617b3f04627781d6dc7b1f;hpb=efb61a9683b6bed0a9444ad8a9dc4de552a00cb9 diff --git a/src/maemo/modest-progress-bar-widget.c b/src/maemo/modest-progress-bar-widget.c index 56c6759..c302d3c 100644 --- a/src/maemo/modest-progress-bar-widget.c +++ b/src/maemo/modest-progress-bar-widget.c @@ -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 */