modest-address-book.c \
modest-msg-edit-window.c \
modest-icon-names.h \
- modest-gnome-info-bar.c \
- modest-gnome-info-bar.h \
modest-gnome-global-settings-dialog.c \
modest-gnome-global-settings-dialog.h \
modest-main-window.c \
+++ /dev/null
-/* 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 <glib/gi18n.h>
-#include "modest-gnome-info-bar.h"
-#include <gtk/gtkprogressbar.h>
-#include <gtk/gtkstatusbar.h>
-/* include other impl specific header files */
-
-/* 'private'/'protected' functions */
-static void modest_gnome_info_bar_class_init (ModestGnomeInfoBarClass *klass);
-static void modest_gnome_info_bar_init (ModestGnomeInfoBar *obj);
-static void modest_gnome_info_bar_finalize (GObject *obj);
-
-static void modest_gnome_info_bar_add_operation (ModestProgressObject *self,
- ModestMailOperation *mail_op);
-
-static void modest_gnome_info_bar_remove_operation (ModestProgressObject *self,
- ModestMailOperation *mail_op);
-
-static void modest_gnome_info_bar_set_pulsating_mode (ModestGnomeInfoBar *self,
- const gchar* msg,
- gboolean is_pulsating);
-
-static void on_progress_changed (ModestMailOperation *mail_op,
- ModestMailOperationState *state,
- ModestGnomeInfoBar *self);
-
-static gboolean progressbar_clean (GtkProgressBar *bar);
-static gboolean statusbar_clean (GtkStatusbar *bar);
-
-#define MODEST_GNOME_INFO_BAR_PULSE_INTERVAL 125
-
-/* list my signals */
-enum {
- /* MY_SIGNAL_1, */
- /* MY_SIGNAL_2, */
- LAST_SIGNAL
-};
-
-typedef struct _ObservableData ObservableData;
-struct _ObservableData {
- guint signal_handler;
- ModestMailOperation *mail_op;
-};
-
-typedef struct _ModestGnomeInfoBarPrivate ModestGnomeInfoBarPrivate;
-struct _ModestGnomeInfoBarPrivate {
- GSList *observables;
- ModestMailOperation *current;
-
- GtkWidget *status_bar;
- GtkWidget *progress_bar;
-
- guint status_bar_timeout;
- guint progress_bar_timeout;
- guint pulsating_timeout;
-};
-
-#define MODEST_GNOME_INFO_BAR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
- MODEST_TYPE_GNOME_INFO_BAR, \
- ModestGnomeInfoBarPrivate))
-/* globals */
-static GtkHBoxClass *parent_class = NULL;
-
-/* uncomment the following if you have defined any signals */
-/* static guint signals[LAST_SIGNAL] = {0}; */
-
-static void
-modest_progress_object_init (gpointer g, gpointer iface_data)
-{
- ModestProgressObjectIface *klass = (ModestProgressObjectIface *)g;
-
- klass->add_operation_func = modest_gnome_info_bar_add_operation;
- klass->remove_operation_func = modest_gnome_info_bar_remove_operation;
-}
-
-GType
-modest_gnome_info_bar_get_type (void)
-{
- static GType my_type = 0;
- if (!my_type) {
- static const GTypeInfo my_info = {
- sizeof(ModestGnomeInfoBarClass),
- NULL, /* base init */
- NULL, /* base finalize */
- (GClassInitFunc) modest_gnome_info_bar_class_init,
- NULL, /* class finalize */
- NULL, /* class data */
- sizeof(ModestGnomeInfoBar),
- 1, /* n_preallocs */
- (GInstanceInitFunc) modest_gnome_info_bar_init,
- NULL
- };
-
- static const GInterfaceInfo modest_progress_object_info =
- {
- (GInterfaceInitFunc) modest_progress_object_init, /* interface_init */
- NULL, /* interface_finalize */
- NULL /* interface_data */
- };
-
- my_type = g_type_register_static (GTK_TYPE_HBOX,
- "ModestGnomeInfoBar",
- &my_info, 0);
-
- g_type_add_interface_static (my_type, MODEST_TYPE_PROGRESS_OBJECT,
- &modest_progress_object_info);
- }
- return my_type;
-}
-
-static void
-modest_gnome_info_bar_class_init (ModestGnomeInfoBarClass *klass)
-{
- GObjectClass *gobject_class;
- gobject_class = (GObjectClass*) klass;
-
- parent_class = g_type_class_peek_parent (klass);
- gobject_class->finalize = modest_gnome_info_bar_finalize;
-
- g_type_class_add_private (gobject_class, sizeof(ModestGnomeInfoBarPrivate));
-}
-
-static void
-modest_gnome_info_bar_init (ModestGnomeInfoBar *obj)
-{
- ModestGnomeInfoBarPrivate *priv = MODEST_GNOME_INFO_BAR_GET_PRIVATE(obj);
-
- priv->observables = NULL;
- priv->current = NULL;
-
- /* Status bar */
- priv->status_bar = gtk_statusbar_new ();
- gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (priv->status_bar), FALSE);
-
- /* Progress bar */
- priv->progress_bar = gtk_progress_bar_new ();
- gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (priv->progress_bar), 1.0);
- gtk_progress_bar_set_ellipsize (GTK_PROGRESS_BAR (priv->progress_bar),
- PANGO_ELLIPSIZE_END);
-
- /* Timeouts */
- priv->status_bar_timeout = 0;
- priv->progress_bar_timeout = 0;
-
- /* Pack */
- gtk_box_pack_start (GTK_BOX (obj), priv->status_bar, TRUE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (obj), priv->progress_bar, FALSE, FALSE, 0);
-}
-
-static void
-destroy_observable_data (ObservableData *data)
-{
- g_signal_handler_disconnect (data->mail_op, data->signal_handler);
- g_object_unref (data->mail_op);
-}
-
-static void
-modest_gnome_info_bar_finalize (GObject *obj)
-{
- ModestGnomeInfoBarPrivate *priv;
-
- priv = MODEST_GNOME_INFO_BAR_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;
- }
-
- if (priv->status_bar_timeout > 0) {
- g_source_remove (priv->status_bar_timeout);
- priv->status_bar_timeout = 0;
- }
-
- if (priv->progress_bar_timeout > 0) {
- g_source_remove (priv->progress_bar_timeout);
- priv->progress_bar_timeout = 0;
- }
-
- G_OBJECT_CLASS(parent_class)->finalize (obj);
-}
-
-GtkWidget *
-modest_gnome_info_bar_new (void)
-{
- return GTK_WIDGET (g_object_new (MODEST_TYPE_GNOME_INFO_BAR, NULL));
-}
-
-static void
-modest_gnome_info_bar_add_operation (ModestProgressObject *self,
- ModestMailOperation *mail_op)
-{
- ModestGnomeInfoBar *me;
- ObservableData *data;
- ModestGnomeInfoBarPrivate *priv;
-
- me = MODEST_GNOME_INFO_BAR (self);
- priv = MODEST_GNOME_INFO_BAR_GET_PRIVATE (me);
-
- data = g_malloc0 (sizeof (ObservableData));
- data->mail_op = g_object_ref (mail_op);
- data->signal_handler = g_signal_connect (data->mail_op,
- "progress-changed",
- G_CALLBACK (on_progress_changed),
- me);
-
- if (priv->observables == NULL) {
- priv->current = mail_op;
- }
- priv->observables = g_slist_append (priv->observables, data);
-}
-
-static gint
-compare_observable_data (ObservableData *data1, ObservableData *data2)
-{
- if (data1->mail_op == data2->mail_op)
- return 0;
- else
- return 1;
-}
-
-static void
-modest_gnome_info_bar_remove_operation (ModestProgressObject *self,
- ModestMailOperation *mail_op)
-{
- ModestGnomeInfoBar *me;
- ModestGnomeInfoBarPrivate *priv;
- GSList *link;
- ObservableData *tmp_data = NULL;
- gboolean is_current;
-
- me = MODEST_GNOME_INFO_BAR (self);
- priv = MODEST_GNOME_INFO_BAR_GET_PRIVATE (me);
-
- is_current = (priv->current == mail_op);
-
- /* Find item */
- tmp_data = g_malloc0 (sizeof (ObservableData));
- tmp_data->mail_op = mail_op;
- link = g_slist_find_custom (priv->observables,
- tmp_data,
- (GCompareFunc) compare_observable_data);
-
- /* Remove the item */
- if (link) {
- ObservableData *ob_data = link->data;
- g_signal_handler_disconnect (ob_data->mail_op, ob_data->signal_handler);
- g_object_unref (ob_data->mail_op);
- g_free (ob_data);
- priv->observables = g_slist_delete_link (priv->observables, link);
- tmp_data->mail_op = NULL;
- link = NULL;
- }
-
- /* Update the current mail operation */
- if (is_current) {
- if (priv->observables)
- priv->current = ((ObservableData *) priv->observables->data)->mail_op;
- else
- priv->current = NULL;
-
- /* Refresh the view */
- modest_gnome_info_bar_set_pulsating_mode (me, NULL, FALSE);
- progressbar_clean (GTK_PROGRESS_BAR (priv->progress_bar));
- }
-
- /* free */
- g_free(tmp_data);
-}
-
-static void
-on_progress_changed (ModestMailOperation *mail_op,
- ModestMailOperationState *state,
- ModestGnomeInfoBar *self)
-{
- ModestGnomeInfoBarPrivate *priv;
- gboolean determined = FALSE;
-
- priv = MODEST_GNOME_INFO_BAR_GET_PRIVATE (self);
-
- /* If the mail operation is the currently shown one */
- if (priv->current == mail_op) {
- gchar *msg = NULL;
-
- determined = (state->done > 0 && state->total > 1) &&
- !(state->done == 1 && state->total == 100);
-
- switch (state->op_type) {
- case MODEST_MAIL_OPERATION_TYPE_RECEIVE:
- if (determined)
- msg = g_strdup_printf(_("mcen_me_receiving"),
- state->done, state->total);
- else
- msg = g_strdup(_("mail_me_receiving"));
- break;
- case MODEST_MAIL_OPERATION_TYPE_SEND:
- if (determined)
- msg = g_strdup_printf(_("mcen_me_sending"), state->done,
- state->total);
- else
- msg = g_strdup(_("mail_me_sending"));
- break;
-
- case MODEST_MAIL_OPERATION_TYPE_OPEN:
- msg = g_strdup(_("mail_me_opening"));
- break;
- default:
- msg = g_strdup("");
- }
-
- /* If we have byte information use it */
- if ((state->bytes_done != 0) && (state->bytes_total != 0))
- modest_gnome_info_bar_set_progress (self, msg,
- state->bytes_done,
- state->bytes_total);
- else if ((state->done == 0) && (state->total == 0))
- modest_gnome_info_bar_set_pulsating_mode (self, msg, TRUE);
- else
- modest_gnome_info_bar_set_progress (self, msg,
- state->done,
- state->total);
- g_free (msg);
- }
-}
-
-static gboolean
-progressbar_clean (GtkProgressBar *bar)
-{
- gtk_progress_bar_set_fraction (bar, 0);
- gtk_progress_bar_set_text (bar, 0);
- return FALSE;
-}
-
-static gboolean
-statusbar_clean (GtkStatusbar *bar)
-{
- gtk_statusbar_push (bar, 0, "");
- return FALSE;
-}
-
-void
-modest_gnome_info_bar_set_message (ModestGnomeInfoBar *self,
- const gchar *message)
-{
- ModestGnomeInfoBarPrivate *priv;
-
- priv = MODEST_GNOME_INFO_BAR_GET_PRIVATE (self);
-
- /* Set a message. Clean it after 2.5 seconds */
- gtk_statusbar_push (GTK_STATUSBAR (priv->status_bar), 0, message);
- priv->status_bar_timeout = g_timeout_add (2500,
- (GSourceFunc) statusbar_clean,
- priv->status_bar);
-}
-
-static gboolean
-modest_gnome_info_bar_is_pulsating (ModestGnomeInfoBar *self)
-{
- ModestGnomeInfoBarPrivate *priv;
-
- g_return_val_if_fail (MODEST_IS_GNOME_INFO_BAR(self), FALSE);
-
- priv = MODEST_GNOME_INFO_BAR_GET_PRIVATE (self);
-
- return priv->pulsating_timeout != 0;
-}
-
-void
-modest_gnome_info_bar_set_progress (ModestGnomeInfoBar *self,
- const gchar *message,
- gint done,
- gint total)
-{
- ModestGnomeInfoBarPrivate *priv;
- gboolean determined = FALSE;
-
- g_return_if_fail (MODEST_IS_GNOME_INFO_BAR(self));
- g_return_if_fail (done <= total);
-
- priv = MODEST_GNOME_INFO_BAR_GET_PRIVATE (self);
-
- if (modest_gnome_info_bar_is_pulsating (self))
- modest_gnome_info_bar_set_pulsating_mode (self, NULL, FALSE);
-
- /* Set progress. Tinymail sometimes returns us 1/100 when it
- does not have any clue, NOTE that 1/100 could be also a
- valid progress (we will loose it), but it will be recovered
- once the done is greater than 1 */
- determined = (done > 0 && total > 1) &&
- !(done == 1 && total == 100);
- if (!determined) {
- gtk_progress_bar_pulse (GTK_PROGRESS_BAR (priv->progress_bar));
- } else {
- gdouble percent = 0;
- if (total != 0) /* Avoid division by zero. */
- percent = (gdouble)done/(gdouble)total;
-
- gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (priv->progress_bar),
- percent);
- }
-
- /* Set text */
- gtk_progress_bar_set_text (GTK_PROGRESS_BAR (priv->progress_bar),
- (message && message[0] != '\0')?message:" ");
-}
-
-static gboolean
-do_pulse (gpointer data)
-{
- ModestGnomeInfoBarPrivate *priv;
-
- g_return_val_if_fail (MODEST_IS_GNOME_INFO_BAR(data), FALSE);
-
- priv = MODEST_GNOME_INFO_BAR_GET_PRIVATE (data);
- gtk_progress_bar_pulse (GTK_PROGRESS_BAR (priv->progress_bar));
- return TRUE;
-}
-
-static void
-modest_gnome_info_bar_set_pulsating_mode (ModestGnomeInfoBar *self,
- const gchar* msg,
- gboolean is_pulsating)
-{
- ModestGnomeInfoBarPrivate *priv;
-
- g_return_if_fail (MODEST_IS_GNOME_INFO_BAR (self));
-
- priv = MODEST_GNOME_INFO_BAR_GET_PRIVATE (self);
-
- if (msg != NULL)
- gtk_progress_bar_set_text (GTK_PROGRESS_BAR (priv->progress_bar), msg);
-
- if (is_pulsating == (priv->pulsating_timeout != 0))
- return;
- else if (is_pulsating && (priv->pulsating_timeout == 0)) {
- /* enable */
- priv->pulsating_timeout = g_timeout_add (MODEST_GNOME_INFO_BAR_PULSE_INTERVAL,
- do_pulse, self);
- } else if (!is_pulsating && (priv->pulsating_timeout != 0)) {
- /* disable */
- g_source_remove (priv->pulsating_timeout);
- priv->pulsating_timeout = 0;
- }
-}
+++ /dev/null
-/* 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.
- */
-
-
-#ifndef __MODEST_GNOME_INFO_BAR_H__
-#define __MODEST_GNOME_INFO_BAR_H__
-
-#include <gtk/gtkhbox.h>
-#include "modest-progress-object.h"
-/* other include files */
-
-G_BEGIN_DECLS
-
-/* convenience macros */
-#define MODEST_TYPE_GNOME_INFO_BAR (modest_gnome_info_bar_get_type())
-#define MODEST_GNOME_INFO_BAR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_GNOME_INFO_BAR,ModestGnomeInfoBar))
-#define MODEST_GNOME_INFO_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_GNOME_INFO_BAR,ModestProgressObject))
-#define MODEST_IS_GNOME_INFO_BAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_GNOME_INFO_BAR))
-#define MODEST_IS_GNOME_INFO_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_GNOME_INFO_BAR))
-#define MODEST_GNOME_INFO_BAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_GNOME_INFO_BAR,ModestGnomeInfoBarClass))
-
-typedef struct _ModestGnomeInfoBar ModestGnomeInfoBar;
-typedef struct _ModestGnomeInfoBarClass ModestGnomeInfoBarClass;
-
-struct _ModestGnomeInfoBar {
- GtkHBox parent;
-};
-
-struct _ModestGnomeInfoBarClass {
- GtkHBoxClass parent_class;
-};
-
-/* member functions */
-GType modest_gnome_info_bar_get_type (void) G_GNUC_CONST;
-
-/* typical parameter-less _new function */
-GtkWidget* modest_gnome_info_bar_new (void);
-
-/**
- * modest_gnome_info_bar_new:
- * @void:
- *
- * Sets a text in the status bar of the widget
- *
- * Return value:
- **/
-void modest_gnome_info_bar_set_message (ModestGnomeInfoBar *self,
- const gchar *message);
-
-
-/**
- * modest_gnome_info_bar_set_progress:
- * @self:
- * @message:
- * @done:
- * @total:
- *
- * Causes the progress bar of the widget to fill in the amount of work
- * done of a given total. If message is supplied then it'll be
- * superimposed on the progress bar
- **/
-void modest_gnome_info_bar_set_progress (ModestGnomeInfoBar *self,
- const gchar *message,
- gint done,
- gint total);
-
-G_END_DECLS
-
-#endif /* __MODEST_GNOME_INFO_BAR_H__ */
-
#include <widgets/modest-window-priv.h>
#include <widgets/modest-msg-edit-window.h>
#include <widgets/modest-account-view-window.h>
+#include "widgets/modest-progress-bar.h"
#include <modest-runtime.h>
#include "modest-widget-memory.h"
#include <modest-tny-msg.h>
#include "modest-mail-operation.h"
#include "modest-icon-names.h"
-#include "modest-gnome-info-bar.h"
/* 'private'/'protected' functions */
static void modest_main_window_class_init (ModestMainWindowClass *klass);
ModestMailOperationQueueNotification type,
ModestMainWindow *self);
-static void on_header_status_update (ModestHeaderView *header_view,
- const gchar *msg,
- gint num,
- gint total,
- ModestMainWindow *main_window);
-
static void on_header_selected (ModestHeaderView *header_view,
TnyHeader *header,
ModestMainWindow *main_window);
g_type_class_add_private (gobject_class, sizeof(ModestMainWindowPrivate));
}
+static GtkWidget *
+create_main_bar (GtkWidget *progress_bar)
+{
+ GtkWidget *status_bar, *main_bar;
+
+ main_bar = gtk_hbox_new (FALSE, 6);
+
+ /* Status bar */
+ status_bar = gtk_statusbar_new ();
+ gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (status_bar), FALSE);
+
+ /* Progress bar */
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progress_bar), 1.0);
+ gtk_progress_bar_set_ellipsize (GTK_PROGRESS_BAR (progress_bar),
+ PANGO_ELLIPSIZE_END);
+
+ /* Pack */
+ gtk_box_pack_start (GTK_BOX (main_bar), status_bar, TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (main_bar), progress_bar, FALSE, FALSE, 0);
+
+ return main_bar;
+}
+
static void
modest_main_window_init (ModestMainWindow *obj)
{
TnyFolderStoreQuery *query;
GtkWidget *icon;
gboolean online;
+ GtkWidget *progress_bar;
priv = MODEST_MAIN_WINDOW_GET_PRIVATE(obj);
/* Main bar */
priv->folder_info_label = gtk_label_new (NULL);
- priv->main_bar = modest_gnome_info_bar_new ();
+ progress_bar = modest_progress_bar_new ();
+ priv->main_bar = create_main_bar (progress_bar);
priv->progress_widgets = g_slist_prepend (priv->progress_widgets,
- priv->main_bar);
+ progress_bar);
/* msg preview */
priv->msg_preview = MODEST_MSG_VIEW(tny_platform_factory_new_msg_view
}
}
-static void
-on_header_status_update (ModestHeaderView *header_view,
- const gchar *msg, gint num,
- gint total, ModestMainWindow *self)
-{
- ModestMainWindowPrivate *priv;
- gchar *txt;
-
- priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
-
- /* Set progress */
- txt = g_strdup_printf (_("Downloading %d of %d"), num, total);
- modest_gnome_info_bar_set_progress (MODEST_GNOME_INFO_BAR (priv->main_bar),
- (const gchar*) txt,
- num, total);
- g_free (txt);
-
- /* Set status message */
- modest_gnome_info_bar_set_message (MODEST_GNOME_INFO_BAR (priv->main_bar), msg);
-}
-
void
modest_main_window_set_style (ModestMainWindow *self,
ModestMainWindowStyle style)
modest-connection-specific-smtp-window.c \
modest-connection-specific-smtp-edit-window.h \
modest-connection-specific-smtp-edit-window.c \
- modest-progress-bar-widget.c \
- modest-progress-bar-widget.h \
modest-osso-autosave-callbacks.c \
modest-osso-autosave-callbacks.h \
modest-osso-state-saving.c \
#include "modest-tny-msg.h"
#include "modest-mail-operation.h"
#include "modest-icon-names.h"
-#include "modest-progress-bar-widget.h"
+#include "modest-progress-bar.h"
#include "modest-text-utils.h"
#include "modest-ui-dimming-manager.h"
#include "maemo/modest-osso-state-saving.h"
toolbar_resize (MODEST_MAIN_WINDOW (self));
/* Add ProgressBar (Transfer toolbar) */
- priv->progress_bar = modest_progress_bar_widget_new ();
+ priv->progress_bar = modest_progress_bar_new ();
gtk_widget_set_no_show_all (priv->progress_bar, TRUE);
placeholder = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ProgressBarView");
insert_index = gtk_toolbar_get_item_index(GTK_TOOLBAR (parent_priv->toolbar), GTK_TOOL_ITEM(placeholder));
#include <modest-tny-folder.h>
#include <modest-text-utils.h>
#include <modest-account-mgr-helpers.h>
-#include "modest-progress-bar-widget.h"
+#include "modest-progress-bar.h"
#include "modest-defs.h"
#include "modest-hildon-includes.h"
#include "modest-ui-dimming-manager.h"
toolbar_resize (MODEST_MSG_VIEW_WINDOW (self));
/* Add ProgressBar (Transfer toolbar) */
- priv->progress_bar = modest_progress_bar_widget_new ();
+ priv->progress_bar = modest_progress_bar_new ();
gtk_widget_set_no_show_all (priv->progress_bar, TRUE);
placeholder = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ProgressbarView");
insert_index = gtk_toolbar_get_item_index(GTK_TOOLBAR (parent_priv->toolbar), GTK_TOOL_ITEM(placeholder));
+++ /dev/null
-/* 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 <string.h>
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-#include <widgets/modest-combo-box.h>
-#include "modest-progress-bar-widget.h"
-#include "modest-tny-account.h"
-#include "modest-platform.h"
-#include "modest-runtime.h"
-
-/* 'private'/'protected' functions */
-static void modest_progress_bar_widget_class_init (ModestProgressBarWidgetClass *klass);
-static void modest_progress_bar_widget_init (ModestProgressBarWidget *obj);
-static void modest_progress_bar_widget_finalize (GObject *obj);
-
-static void modest_progress_bar_add_operation (ModestProgressObject *self,
- ModestMailOperation *mail_op);
-
-static void modest_progress_bar_remove_operation (ModestProgressObject *self,
- ModestMailOperation *mail_op);
-
-static void modest_progress_bar_cancel_current_operation (ModestProgressObject *self);
-
-static void modest_progress_bar_cancel_all_operations (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);
-
-static gboolean modest_progress_bar_widget_is_pulsating (ModestProgressBarWidget *self);
-
-static void modest_progress_bar_widget_set_pulsating_mode (ModestProgressBarWidget *self,
- const gchar* msg,
- gboolean is_pulsating);
-
-#define XALIGN 0.5
-#define YALIGN 0.5
-#define XSPACE 1
-#define YSPACE 0
-
-#define LOWER 0
-#define UPPER 150
-
-#define MODEST_PROGRESS_BAR_PULSE_INTERVAL 125
-
-/* list my signals */
-/* enum { */
-/* LAST_SIGNAL */
-/* }; */
-
-typedef struct _ObservableData ObservableData;
-struct _ObservableData {
- guint signal_handler;
- ModestMailOperation *mail_op;
-};
-
-typedef struct _ModestProgressBarWidgetPrivate ModestProgressBarWidgetPrivate;
-struct _ModestProgressBarWidgetPrivate {
- GSList *observables;
- ModestMailOperation *current;
- guint count;
- GtkWidget *progress_bar;
- guint pulsating_timeout;
-};
-#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;
-
-/* uncomment the following if you have defined any signals */
-/* static guint signals[LAST_SIGNAL] = {0}; */
-
-static void
-modest_progress_object_init (gpointer g, gpointer iface_data)
-{
- ModestProgressObjectIface *klass = (ModestProgressObjectIface *)g;
-
- 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->cancel_all_operations_func = modest_progress_bar_cancel_all_operations;
- klass->num_pending_operations_func = modest_progress_bar_num_pending_operations;
-}
-
-
-GType
-modest_progress_bar_widget_get_type (void)
-{
- static GType my_type = 0;
- if (!my_type) {
- static const GTypeInfo my_info = {
- sizeof(ModestProgressBarWidgetClass),
- NULL, /* base init */
- NULL, /* base finalize */
- (GClassInitFunc) modest_progress_bar_widget_class_init,
- NULL, /* class finalize */
- NULL, /* class data */
- sizeof(ModestProgressBarWidget),
- 1, /* n_preallocs */
- (GInstanceInitFunc) modest_progress_bar_widget_init,
- NULL
- };
-
- static const GInterfaceInfo modest_progress_object_info =
- {
- (GInterfaceInitFunc) modest_progress_object_init, /* interface_init */
- NULL, /* interface_finalize */
- NULL /* interface_data */
- };
-
- my_type = g_type_register_static (GTK_TYPE_VBOX,
- "ModestProgressBarWidget",
- &my_info, 0);
-
- g_type_add_interface_static (my_type, MODEST_TYPE_PROGRESS_OBJECT,
- &modest_progress_object_info);
- }
- return my_type;
-}
-
-static void
-modest_progress_bar_widget_class_init (ModestProgressBarWidgetClass *klass)
-{
- GObjectClass *gobject_class;
- gobject_class = (GObjectClass*) klass;
-
- parent_class = g_type_class_peek_parent (klass);
- gobject_class->finalize = modest_progress_bar_widget_finalize;
-
- g_type_class_add_private (gobject_class, sizeof(ModestProgressBarWidgetPrivate));
-}
-
-static void
-modest_progress_bar_widget_init (ModestProgressBarWidget *self)
-{
-
- ModestProgressBarWidgetPrivate *priv;
- GtkWidget *align = NULL;
- GtkRequisition req;
- GtkAdjustment *adj;
-
- priv = MODEST_PROGRESS_BAR_WIDGET_GET_PRIVATE(self);
-
- /* Alignment */
- align = gtk_alignment_new(XALIGN, YALIGN, XSPACE, YSPACE);
-
- /* Build GtkProgressBar */
- adj = (GtkAdjustment *) gtk_adjustment_new (0, LOWER, UPPER, 0, 0, 0);
- priv->progress_bar = gtk_progress_bar_new_with_adjustment (adj);
- 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_progress_bar_set_pulse_step (GTK_PROGRESS_BAR (priv->progress_bar), 0.25);
- gtk_progress_bar_set_text (GTK_PROGRESS_BAR (priv->progress_bar), " ");
- gtk_widget_size_request (priv->progress_bar, &req);
- gtk_container_add (GTK_CONTAINER (align), priv->progress_bar);
- gtk_widget_size_request (align, &req);
-
- /* Add progress bar widget */
- gtk_box_pack_start (GTK_BOX(self), align, TRUE, TRUE, 0);
- gtk_widget_show_all (GTK_WIDGET(self));
-
- priv->pulsating_timeout = 0;
-}
-
-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)) {
- ObservableData *ob_data = tmp->data;
- g_signal_handler_disconnect (ob_data->mail_op, ob_data->signal_handler);
- g_object_unref (ob_data->mail_op);
- g_free (ob_data);
- }
- g_slist_free (priv->observables);
- priv->observables = NULL;
- }
-
- /* remove timeout */
- if (priv->pulsating_timeout != 0)
- g_source_remove (priv->pulsating_timeout);
-
- G_OBJECT_CLASS(parent_class)->finalize (obj);
-}
-
-
-static void
-modest_progress_bar_add_operation (ModestProgressObject *self,
- ModestMailOperation *mail_op)
-{
- ModestProgressBarWidget *me = NULL;
- ObservableData *data = NULL;
- ModestProgressBarWidgetPrivate *priv = NULL;
-
- me = MODEST_PROGRESS_BAR_WIDGET (self);
- priv = MODEST_PROGRESS_BAR_WIDGET_GET_PRIVATE (me);
-
- data = g_malloc0 (sizeof (ObservableData));
- data->mail_op = g_object_ref (mail_op);
- data->signal_handler = g_signal_connect (data->mail_op,
- "progress-changed",
- G_CALLBACK (on_progress_changed),
- me);
- /* Set curent operation */
- if (priv->current == NULL) {
- priv->current = mail_op;
-
- priv->count = 0;
-
- /* Call progress_change handler to initialize progress message */
-/* modest_progress_bar_widget_set_undetermined_progress (MODEST_PROGRESS_BAR_WIDGET(self), mail_op); */
- }
-
- /* Add operation to obserbable objects list */
- priv->observables = g_slist_prepend (priv->observables, data);
-}
-
-static gint
-compare_observable_data (ObservableData *data1, ObservableData *data2)
-{
- if (data1->mail_op == data2->mail_op)
- return 0;
- else
- return 1;
-}
-
-static void
-modest_progress_bar_remove_operation (ModestProgressObject *self,
- ModestMailOperation *mail_op)
-{
- ModestProgressBarWidget *me;
- ModestProgressBarWidgetPrivate *priv;
- GSList *link;
- ObservableData *tmp_data = NULL;
- gboolean is_current;
-
- me = MODEST_PROGRESS_BAR_WIDGET (self);
- priv = MODEST_PROGRESS_BAR_WIDGET_GET_PRIVATE (me);
-
- is_current = (priv->current == mail_op);
-
- /* Find item */
- tmp_data = g_malloc0 (sizeof (ObservableData));
- tmp_data->mail_op = mail_op;
- link = g_slist_find_custom (priv->observables,
- tmp_data,
- (GCompareFunc) compare_observable_data);
-
- /* Remove the item */
- if (link) {
- ObservableData *ob_data = link->data;
- g_signal_handler_disconnect (ob_data->mail_op, ob_data->signal_handler);
- g_object_unref (ob_data->mail_op);
- g_free (ob_data);
- priv->observables = g_slist_delete_link (priv->observables, link);
- tmp_data->mail_op = NULL;
- link = NULL;
- }
-
- /* Update the current mail operation */
- if (is_current) {
- if (priv->observables)
- priv->current = ((ObservableData *) priv->observables->data)->mail_op;
- else
- priv->current = NULL;
-
- /* Refresh the view */
- modest_progress_bar_widget_set_pulsating_mode (me, NULL, FALSE);
- progressbar_clean (GTK_PROGRESS_BAR (priv->progress_bar));
- }
-
- /* free */
- 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
-modest_progress_bar_cancel_all_operations (ModestProgressObject *self)
-{
- ModestProgressBarWidget *me;
- ModestProgressBarWidgetPrivate *priv;
-
- me = MODEST_PROGRESS_BAR_WIDGET (self);
- priv = MODEST_PROGRESS_BAR_WIDGET_GET_PRIVATE (me);
-
- /* Cancel all the mail operations */
- modest_mail_operation_queue_cancel_all (modest_runtime_get_mail_operation_queue ());
-}
-
-static void
-on_progress_changed (ModestMailOperation *mail_op,
- ModestMailOperationState *state,
- ModestProgressBarWidget *self)
-{
- ModestProgressBarWidgetPrivate *priv;
- gboolean determined = FALSE;
-
- 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;
-
- determined = (state->done > 0 && state->total > 1) &&
- !(state->done == 1 && state->total == 100);
-
- switch (state->op_type) {
- case MODEST_MAIL_OPERATION_TYPE_RECEIVE:
- if (determined)
- msg = g_strdup_printf(_("mcen_me_receiving"),
- state->done, state->total);
- else
- msg = g_strdup(_("mail_me_receiving"));
- break;
- case MODEST_MAIL_OPERATION_TYPE_SEND:
- if (determined)
- msg = g_strdup_printf(_("mcen_me_sending"), state->done,
- state->total);
- else
- msg = g_strdup(_("mail_me_sending"));
- break;
-
- case MODEST_MAIL_OPERATION_TYPE_OPEN:
- msg = g_strdup(_("mail_me_opening"));
- break;
- default:
- msg = g_strdup("");
- }
-
- /* If we have byte information use it */
- if ((state->bytes_done != 0) && (state->bytes_total != 0))
- modest_progress_bar_widget_set_progress (self, msg,
- state->bytes_done,
- state->bytes_total);
- else if ((state->done == 0) && (state->total == 0))
- modest_progress_bar_widget_set_pulsating_mode (self, msg, TRUE);
- else
- modest_progress_bar_widget_set_progress (self, msg,
- state->done,
- state->total);
- g_free (msg);
- }
-}
-
-static gboolean
-progressbar_clean (GtkProgressBar *bar)
-{
- gtk_progress_bar_set_fraction (bar, 0);
- gtk_progress_bar_set_text (bar, " ");
- return FALSE;
-}
-
-
-GtkWidget*
-modest_progress_bar_widget_new ()
-{
- return GTK_WIDGET (g_object_new (MODEST_TYPE_PROGRESS_BAR_WIDGET, NULL));
-}
-
-
-void
-modest_progress_bar_widget_set_progress (ModestProgressBarWidget *self,
- const gchar *message,
- gint done,
- gint total)
-{
- ModestProgressBarWidgetPrivate *priv;
- gboolean determined = FALSE;
-
- g_return_if_fail (MODEST_IS_PROGRESS_BAR_WIDGET(self));
- g_return_if_fail (done <= total);
-
- priv = MODEST_PROGRESS_BAR_WIDGET_GET_PRIVATE (self);
-
- priv->count++;
-
- if (modest_progress_bar_widget_is_pulsating (self))
- modest_progress_bar_widget_set_pulsating_mode (self, NULL, FALSE);
-
- /* Set progress. Tinymail sometimes returns us 1/100 when it
- does not have any clue, NOTE that 1/100 could be also a
- valid progress (we will loose it), but it will be recovered
- once the done is greater than 1 */
- determined = (done > 0 && total > 1) &&
- !(done == 1 && total == 100);
- if (!determined) {
- gtk_progress_bar_pulse (GTK_PROGRESS_BAR (priv->progress_bar));
- } else {
- gdouble percent = 0;
- if (total != 0) /* Avoid division by zero. */
- percent = (gdouble)done/(gdouble)total;
-
- gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (priv->progress_bar),
- percent);
- }
-
- /* Set text */
- gtk_progress_bar_set_text (GTK_PROGRESS_BAR (priv->progress_bar),
- (message && message[0] != '\0')?message:" ");
-}
-
-
-void
-modest_progress_bar_widget_set_undetermined_progress (ModestProgressBarWidget *self,
- ModestMailOperation *mail_op)
-{
- ModestMailOperationState *state = NULL;
-
- state = g_malloc0(sizeof(ModestMailOperationState));
- state->done = 0;
- state->total = 0;
- state->op_type = modest_mail_operation_get_type_operation (mail_op);
- on_progress_changed (mail_op, state, self);
- g_free(state);
-}
-
-/* this has to be explicitly removed */
-static gboolean
-do_pulse (gpointer data)
-{
- ModestProgressBarWidgetPrivate *priv;
-
- g_return_val_if_fail (MODEST_IS_PROGRESS_BAR_WIDGET(data), FALSE);
-
- priv = MODEST_PROGRESS_BAR_WIDGET_GET_PRIVATE (data);
- gtk_progress_bar_pulse (GTK_PROGRESS_BAR (priv->progress_bar));
- return TRUE;
-}
-
-gboolean
-modest_progress_bar_widget_is_pulsating (ModestProgressBarWidget *self)
-{
- ModestProgressBarWidgetPrivate *priv;
-
- g_return_val_if_fail (MODEST_IS_PROGRESS_BAR_WIDGET(self), FALSE);
-
- priv = MODEST_PROGRESS_BAR_WIDGET_GET_PRIVATE (self);
-
- return priv->pulsating_timeout != 0;
-}
-
-void
-modest_progress_bar_widget_set_pulsating_mode (ModestProgressBarWidget *self,
- const gchar* msg,
- gboolean is_pulsating)
-{
- ModestProgressBarWidgetPrivate *priv;
-
- g_return_if_fail (MODEST_IS_PROGRESS_BAR_WIDGET(self));
-
- priv = MODEST_PROGRESS_BAR_WIDGET_GET_PRIVATE (self);
-
- if (msg != NULL)
- gtk_progress_bar_set_text (GTK_PROGRESS_BAR (priv->progress_bar), msg);
-
- if (is_pulsating == (priv->pulsating_timeout != 0))
- return;
- else if (is_pulsating && (priv->pulsating_timeout == 0)) {
- /* enable */
- priv->pulsating_timeout = g_timeout_add (MODEST_PROGRESS_BAR_PULSE_INTERVAL,
- do_pulse, self);
- } else if (!is_pulsating && (priv->pulsating_timeout != 0)) {
- /* disable */
- g_source_remove (priv->pulsating_timeout);
- priv->pulsating_timeout = 0;
- }
-}
+++ /dev/null
-/* 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.
- */
-
-#ifndef __MODEST_PROGRESS_BAR_WIDGET_H__
-#define __MODEST_PROGRESS_BAR_WIDGET_H__
-
-#include <gtk/gtkvbox.h>
-#include "modest-progress-object.h"
-
-G_BEGIN_DECLS
-
-/* convenience macros */
-#define MODEST_TYPE_PROGRESS_BAR_WIDGET (modest_progress_bar_widget_get_type())
-#define MODEST_PROGRESS_BAR_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_PROGRESS_BAR_WIDGET,ModestProgressBarWidget))
-#define MODEST_PROGRESS_BAR_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_PROGRESS_BAR_WIDGET,GtkContainer))
-#define MODEST_IS_PROGRESS_BAR_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_PROGRESS_BAR_WIDGET))
-#define MODEST_IS_PROGRESS_BAR_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_PROGRESS_BAR_WIDGET))
-#define MODEST_PROGRESS_BAR_WIDGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_PROGRESS_BAR_WIDGET,ModestProgressBarWidgetClass))
-
-typedef struct _ModestProgressBarWidget ModestProgressBarWidget;
-typedef struct _ModestProgressBarWidgetClass ModestProgressBarWidgetClass;
-
-struct _ModestProgressBarWidget {
- GtkVBox parent;
- /* insert public members, if any */
-};
-
-struct _ModestProgressBarWidgetClass {
- GtkVBoxClass parent_class;
-
-};
-
-typedef enum {
- STATUS_RECEIVING,
- STATUS_SENDING,
- STATUS_OPENING
-} ModestProgressStatus;
-
-
-
-/* member functions */
-GType modest_progress_bar_widget_get_type (void) G_GNUC_CONST;
-
-GtkWidget* modest_progress_bar_widget_new (void);
-
-void modest_progress_bar_widget_set_progress (ModestProgressBarWidget *self,
- const gchar *msg,
- gint done,
- gint total);
-
-void
-modest_progress_bar_widget_set_undetermined_progress (ModestProgressBarWidget *self,
- ModestMailOperation *mail_op);
-
-
-G_END_DECLS
-
-#endif /* __MODEST_PROGRESS_BAR_WIDGET_H__ */
-
static void _on_queue_start (TnySendQueue *self,
gpointer user_data);
-static void modest_tny_send_queue_add_async (TnyCamelSendQueue *self,
+static void modest_tny_send_queue_add_async (TnySendQueue *self,
TnyMsg *msg,
TnySendQueueAddCallback callback,
TnyStatusCallback status_callback,
}
static void
-modest_tny_send_queue_add_async (TnyCamelSendQueue *self,
+modest_tny_send_queue_add_async (TnySendQueue *self,
TnyMsg *msg,
TnySendQueueAddCallback callback,
TnyStatusCallback status_callback,
modest-gtkhtml-msg-view.h \
modest-details-dialog.c \
modest-details-dialog.h \
+ modest-progress-bar.c \
+ modest-progress-bar.h \
modest-recpt-editor.c \
modest-recpt-editor.h \
modest-recpt-view.c \
--- /dev/null
+/* 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 <string.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <widgets/modest-combo-box.h>
+#include "widgets/modest-progress-bar.h"
+#include "modest-tny-account.h"
+#include "modest-platform.h"
+#include "modest-runtime.h"
+
+/* 'private'/'protected' functions */
+static void modest_progress_bar_class_init (ModestProgressBarClass *klass);
+static void modest_progress_bar_init (ModestProgressBar *obj);
+static void modest_progress_bar_finalize (GObject *obj);
+
+static void modest_progress_bar_add_operation (ModestProgressObject *self,
+ ModestMailOperation *mail_op);
+
+static void modest_progress_bar_remove_operation (ModestProgressObject *self,
+ ModestMailOperation *mail_op);
+
+static void modest_progress_bar_cancel_current_operation (ModestProgressObject *self);
+
+static void modest_progress_bar_cancel_all_operations (ModestProgressObject *self);
+
+static guint modest_progress_bar_num_pending_operations (ModestProgressObject *self);
+
+static void on_progress_changed (ModestMailOperation *mail_op,
+ ModestMailOperationState *state,
+ ModestProgressBar *self);
+
+static gboolean progressbar_clean (GtkProgressBar *bar);
+
+static gboolean modest_progress_bar_is_pulsating (ModestProgressBar *self);
+
+static void modest_progress_bar_set_pulsating_mode (ModestProgressBar *self,
+ const gchar* msg,
+ gboolean is_pulsating);
+
+#define XALIGN 0.5
+#define YALIGN 0.5
+#define XSPACE 1
+#define YSPACE 0
+
+#define LOWER 0
+#define UPPER 150
+
+#define MODEST_PROGRESS_BAR_PULSE_INTERVAL 125
+
+/* list my signals */
+/* enum { */
+/* LAST_SIGNAL */
+/* }; */
+
+typedef struct _ObservableData ObservableData;
+struct _ObservableData {
+ guint signal_handler;
+ ModestMailOperation *mail_op;
+};
+
+typedef struct _ModestProgressBarPrivate ModestProgressBarPrivate;
+struct _ModestProgressBarPrivate {
+ GSList *observables;
+ ModestMailOperation *current;
+ guint count;
+ GtkWidget *progress_bar;
+ guint pulsating_timeout;
+};
+#define MODEST_PROGRESS_BAR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
+ MODEST_TYPE_PROGRESS_BAR_WIDGET, \
+ ModestProgressBarPrivate))
+
+/* globals */
+static GtkContainerClass *parent_class = NULL;
+
+/* uncomment the following if you have defined any signals */
+/* static guint signals[LAST_SIGNAL] = {0}; */
+
+static void
+modest_progress_object_init (gpointer g, gpointer iface_data)
+{
+ ModestProgressObjectIface *klass = (ModestProgressObjectIface *)g;
+
+ 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->cancel_all_operations_func = modest_progress_bar_cancel_all_operations;
+ klass->num_pending_operations_func = modest_progress_bar_num_pending_operations;
+}
+
+
+GType
+modest_progress_bar_get_type (void)
+{
+ static GType my_type = 0;
+ if (!my_type) {
+ static const GTypeInfo my_info = {
+ sizeof(ModestProgressBarClass),
+ NULL, /* base init */
+ NULL, /* base finalize */
+ (GClassInitFunc) modest_progress_bar_class_init,
+ NULL, /* class finalize */
+ NULL, /* class data */
+ sizeof(ModestProgressBar),
+ 1, /* n_preallocs */
+ (GInstanceInitFunc) modest_progress_bar_init,
+ NULL
+ };
+
+ static const GInterfaceInfo modest_progress_object_info =
+ {
+ (GInterfaceInitFunc) modest_progress_object_init, /* interface_init */
+ NULL, /* interface_finalize */
+ NULL /* interface_data */
+ };
+
+ my_type = g_type_register_static (GTK_TYPE_VBOX,
+ "ModestProgressBar",
+ &my_info, 0);
+
+ g_type_add_interface_static (my_type, MODEST_TYPE_PROGRESS_OBJECT,
+ &modest_progress_object_info);
+ }
+ return my_type;
+}
+
+static void
+modest_progress_bar_class_init (ModestProgressBarClass *klass)
+{
+ GObjectClass *gobject_class;
+ gobject_class = (GObjectClass*) klass;
+
+ parent_class = g_type_class_peek_parent (klass);
+ gobject_class->finalize = modest_progress_bar_finalize;
+
+ g_type_class_add_private (gobject_class, sizeof(ModestProgressBarPrivate));
+}
+
+static void
+modest_progress_bar_init (ModestProgressBar *self)
+{
+
+ ModestProgressBarPrivate *priv;
+ GtkWidget *align = NULL;
+ GtkRequisition req;
+ GtkAdjustment *adj;
+
+ priv = MODEST_PROGRESS_BAR_GET_PRIVATE(self);
+
+ /* Alignment */
+ align = gtk_alignment_new(XALIGN, YALIGN, XSPACE, YSPACE);
+
+ /* Build GtkProgressBar */
+ adj = (GtkAdjustment *) gtk_adjustment_new (0, LOWER, UPPER, 0, 0, 0);
+ priv->progress_bar = gtk_progress_bar_new_with_adjustment (adj);
+ 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_progress_bar_set_pulse_step (GTK_PROGRESS_BAR (priv->progress_bar), 0.25);
+ gtk_progress_bar_set_text (GTK_PROGRESS_BAR (priv->progress_bar), " ");
+ gtk_widget_size_request (priv->progress_bar, &req);
+ gtk_container_add (GTK_CONTAINER (align), priv->progress_bar);
+ gtk_widget_size_request (align, &req);
+
+ /* Add progress bar widget */
+ gtk_box_pack_start (GTK_BOX(self), align, TRUE, TRUE, 0);
+ gtk_widget_show_all (GTK_WIDGET(self));
+
+ priv->pulsating_timeout = 0;
+}
+
+static void
+modest_progress_bar_finalize (GObject *obj)
+{
+ ModestProgressBarPrivate *priv;
+
+ priv = MODEST_PROGRESS_BAR_GET_PRIVATE(obj);
+ if (priv->observables) {
+ GSList *tmp;
+
+ for (tmp = priv->observables; tmp; tmp = g_slist_next (tmp)) {
+ ObservableData *ob_data = tmp->data;
+ g_signal_handler_disconnect (ob_data->mail_op, ob_data->signal_handler);
+ g_object_unref (ob_data->mail_op);
+ g_free (ob_data);
+ }
+ g_slist_free (priv->observables);
+ priv->observables = NULL;
+ }
+
+ /* remove timeout */
+ if (priv->pulsating_timeout != 0)
+ g_source_remove (priv->pulsating_timeout);
+
+ G_OBJECT_CLASS(parent_class)->finalize (obj);
+}
+
+
+static void
+modest_progress_bar_add_operation (ModestProgressObject *self,
+ ModestMailOperation *mail_op)
+{
+ ModestProgressBar *me = NULL;
+ ObservableData *data = NULL;
+ ModestProgressBarPrivate *priv = NULL;
+
+ me = MODEST_PROGRESS_BAR (self);
+ priv = MODEST_PROGRESS_BAR_GET_PRIVATE (me);
+
+ data = g_malloc0 (sizeof (ObservableData));
+ data->mail_op = g_object_ref (mail_op);
+ data->signal_handler = g_signal_connect (data->mail_op,
+ "progress-changed",
+ G_CALLBACK (on_progress_changed),
+ me);
+ /* Set curent operation */
+ if (priv->current == NULL) {
+ priv->current = mail_op;
+
+ priv->count = 0;
+
+ /* Call progress_change handler to initialize progress message */
+/* modest_progress_bar_set_undetermined_progress (MODEST_PROGRESS_BAR(self), mail_op); */
+ }
+
+ /* Add operation to obserbable objects list */
+ priv->observables = g_slist_prepend (priv->observables, data);
+}
+
+static gint
+compare_observable_data (ObservableData *data1, ObservableData *data2)
+{
+ if (data1->mail_op == data2->mail_op)
+ return 0;
+ else
+ return 1;
+}
+
+static void
+modest_progress_bar_remove_operation (ModestProgressObject *self,
+ ModestMailOperation *mail_op)
+{
+ ModestProgressBar *me;
+ ModestProgressBarPrivate *priv;
+ GSList *link;
+ ObservableData *tmp_data = NULL;
+ gboolean is_current;
+
+ me = MODEST_PROGRESS_BAR (self);
+ priv = MODEST_PROGRESS_BAR_GET_PRIVATE (me);
+
+ is_current = (priv->current == mail_op);
+
+ /* Find item */
+ tmp_data = g_malloc0 (sizeof (ObservableData));
+ tmp_data->mail_op = mail_op;
+ link = g_slist_find_custom (priv->observables,
+ tmp_data,
+ (GCompareFunc) compare_observable_data);
+
+ /* Remove the item */
+ if (link) {
+ ObservableData *ob_data = link->data;
+ g_signal_handler_disconnect (ob_data->mail_op, ob_data->signal_handler);
+ g_object_unref (ob_data->mail_op);
+ g_free (ob_data);
+ priv->observables = g_slist_delete_link (priv->observables, link);
+ tmp_data->mail_op = NULL;
+ link = NULL;
+ }
+
+ /* Update the current mail operation */
+ if (is_current) {
+ if (priv->observables)
+ priv->current = ((ObservableData *) priv->observables->data)->mail_op;
+ else
+ priv->current = NULL;
+
+ /* Refresh the view */
+ modest_progress_bar_set_pulsating_mode (me, NULL, FALSE);
+ progressbar_clean (GTK_PROGRESS_BAR (priv->progress_bar));
+ }
+
+ /* free */
+ g_free(tmp_data);
+}
+
+static guint
+modest_progress_bar_num_pending_operations (ModestProgressObject *self)
+{
+ ModestProgressBar *me;
+ ModestProgressBarPrivate *priv;
+
+ me = MODEST_PROGRESS_BAR (self);
+ priv = MODEST_PROGRESS_BAR_GET_PRIVATE (me);
+
+ return g_slist_length(priv->observables);
+}
+
+static void
+modest_progress_bar_cancel_current_operation (ModestProgressObject *self)
+{
+ ModestProgressBar *me;
+ ModestProgressBarPrivate *priv;
+
+ me = MODEST_PROGRESS_BAR (self);
+ priv = MODEST_PROGRESS_BAR_GET_PRIVATE (me);
+
+ if (priv->current == NULL) return;
+
+ modest_mail_operation_cancel (priv->current);
+}
+
+static void
+modest_progress_bar_cancel_all_operations (ModestProgressObject *self)
+{
+ ModestProgressBar *me;
+ ModestProgressBarPrivate *priv;
+
+ me = MODEST_PROGRESS_BAR (self);
+ priv = MODEST_PROGRESS_BAR_GET_PRIVATE (me);
+
+ /* Cancel all the mail operations */
+ modest_mail_operation_queue_cancel_all (modest_runtime_get_mail_operation_queue ());
+}
+
+static void
+on_progress_changed (ModestMailOperation *mail_op,
+ ModestMailOperationState *state,
+ ModestProgressBar *self)
+{
+ ModestProgressBarPrivate *priv;
+ gboolean determined = FALSE;
+
+ priv = MODEST_PROGRESS_BAR_GET_PRIVATE (self);
+
+ /* If the mail operation is the currently shown one */
+ if (priv->current == mail_op) {
+ gchar *msg = NULL;
+
+ determined = (state->done > 0 && state->total > 1) &&
+ !(state->done == 1 && state->total == 100);
+
+ switch (state->op_type) {
+ case MODEST_MAIL_OPERATION_TYPE_RECEIVE:
+ if (determined)
+ msg = g_strdup_printf(_("mcen_me_receiving"),
+ state->done, state->total);
+ else
+ msg = g_strdup(_("mail_me_receiving"));
+ break;
+ case MODEST_MAIL_OPERATION_TYPE_SEND:
+ if (determined)
+ msg = g_strdup_printf(_("mcen_me_sending"), state->done,
+ state->total);
+ else
+ msg = g_strdup(_("mail_me_sending"));
+ break;
+
+ case MODEST_MAIL_OPERATION_TYPE_OPEN:
+ msg = g_strdup(_("mail_me_opening"));
+ break;
+ default:
+ msg = g_strdup("");
+ }
+
+ /* If we have byte information use it */
+ if ((state->bytes_done != 0) && (state->bytes_total != 0))
+ modest_progress_bar_set_progress (self, msg,
+ state->bytes_done,
+ state->bytes_total);
+ else if ((state->done == 0) && (state->total == 0))
+ modest_progress_bar_set_pulsating_mode (self, msg, TRUE);
+ else
+ modest_progress_bar_set_progress (self, msg,
+ state->done,
+ state->total);
+ g_free (msg);
+ }
+}
+
+static gboolean
+progressbar_clean (GtkProgressBar *bar)
+{
+ gtk_progress_bar_set_fraction (bar, 0);
+ gtk_progress_bar_set_text (bar, " ");
+ return FALSE;
+}
+
+
+GtkWidget*
+modest_progress_bar_new ()
+{
+ return GTK_WIDGET (g_object_new (MODEST_TYPE_PROGRESS_BAR_WIDGET, NULL));
+}
+
+
+void
+modest_progress_bar_set_progress (ModestProgressBar *self,
+ const gchar *message,
+ gint done,
+ gint total)
+{
+ ModestProgressBarPrivate *priv;
+ gboolean determined = FALSE;
+
+ g_return_if_fail (MODEST_IS_PROGRESS_BAR_WIDGET(self));
+ g_return_if_fail (done <= total);
+
+ priv = MODEST_PROGRESS_BAR_GET_PRIVATE (self);
+
+ priv->count++;
+
+ if (modest_progress_bar_is_pulsating (self))
+ modest_progress_bar_set_pulsating_mode (self, NULL, FALSE);
+
+ /* Set progress. Tinymail sometimes returns us 1/100 when it
+ does not have any clue, NOTE that 1/100 could be also a
+ valid progress (we will loose it), but it will be recovered
+ once the done is greater than 1 */
+ determined = (done > 0 && total > 1) &&
+ !(done == 1 && total == 100);
+ if (!determined) {
+ gtk_progress_bar_pulse (GTK_PROGRESS_BAR (priv->progress_bar));
+ } else {
+ gdouble percent = 0;
+ if (total != 0) /* Avoid division by zero. */
+ percent = (gdouble)done/(gdouble)total;
+
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (priv->progress_bar),
+ percent);
+ }
+
+ /* Set text */
+ gtk_progress_bar_set_text (GTK_PROGRESS_BAR (priv->progress_bar),
+ (message && message[0] != '\0')?message:" ");
+}
+
+
+void
+modest_progress_bar_set_undetermined_progress (ModestProgressBar *self,
+ ModestMailOperation *mail_op)
+{
+ ModestMailOperationState *state = NULL;
+
+ state = g_malloc0(sizeof(ModestMailOperationState));
+ state->done = 0;
+ state->total = 0;
+ state->op_type = modest_mail_operation_get_type_operation (mail_op);
+ on_progress_changed (mail_op, state, self);
+ g_free(state);
+}
+
+/* this has to be explicitly removed */
+static gboolean
+do_pulse (gpointer data)
+{
+ ModestProgressBarPrivate *priv;
+
+ g_return_val_if_fail (MODEST_IS_PROGRESS_BAR_WIDGET(data), FALSE);
+
+ priv = MODEST_PROGRESS_BAR_GET_PRIVATE (data);
+ gtk_progress_bar_pulse (GTK_PROGRESS_BAR (priv->progress_bar));
+ return TRUE;
+}
+
+gboolean
+modest_progress_bar_is_pulsating (ModestProgressBar *self)
+{
+ ModestProgressBarPrivate *priv;
+
+ g_return_val_if_fail (MODEST_IS_PROGRESS_BAR_WIDGET(self), FALSE);
+
+ priv = MODEST_PROGRESS_BAR_GET_PRIVATE (self);
+
+ return priv->pulsating_timeout != 0;
+}
+
+void
+modest_progress_bar_set_pulsating_mode (ModestProgressBar *self,
+ const gchar* msg,
+ gboolean is_pulsating)
+{
+ ModestProgressBarPrivate *priv;
+
+ g_return_if_fail (MODEST_IS_PROGRESS_BAR_WIDGET(self));
+
+ priv = MODEST_PROGRESS_BAR_GET_PRIVATE (self);
+
+ if (msg != NULL)
+ gtk_progress_bar_set_text (GTK_PROGRESS_BAR (priv->progress_bar), msg);
+
+ if (is_pulsating == (priv->pulsating_timeout != 0))
+ return;
+ else if (is_pulsating && (priv->pulsating_timeout == 0)) {
+ /* enable */
+ priv->pulsating_timeout = g_timeout_add (MODEST_PROGRESS_BAR_PULSE_INTERVAL,
+ do_pulse, self);
+ } else if (!is_pulsating && (priv->pulsating_timeout != 0)) {
+ /* disable */
+ g_source_remove (priv->pulsating_timeout);
+ priv->pulsating_timeout = 0;
+ }
+}
--- /dev/null
+/* 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.
+ */
+
+#ifndef __MODEST_PROGRESS_BAR_H__
+#define __MODEST_PROGRESS_BAR_H__
+
+#include <gtk/gtkvbox.h>
+#include "modest-progress-object.h"
+
+G_BEGIN_DECLS
+
+/* convenience macros */
+#define MODEST_TYPE_PROGRESS_BAR_WIDGET (modest_progress_bar_get_type())
+#define MODEST_PROGRESS_BAR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_PROGRESS_BAR_WIDGET,ModestProgressBar))
+#define MODEST_PROGRESS_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_PROGRESS_BAR_WIDGET,GtkContainer))
+#define MODEST_IS_PROGRESS_BAR_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_PROGRESS_BAR_WIDGET))
+#define MODEST_IS_PROGRESS_BAR_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_PROGRESS_BAR_WIDGET))
+#define MODEST_PROGRESS_BAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_PROGRESS_BAR_WIDGET,ModestProgressBarClass))
+
+typedef struct _ModestProgressBar ModestProgressBar;
+typedef struct _ModestProgressBarClass ModestProgressBarClass;
+
+struct _ModestProgressBar {
+ GtkVBox parent;
+ /* insert public members, if any */
+};
+
+struct _ModestProgressBarClass {
+ GtkVBoxClass parent_class;
+
+};
+
+typedef enum {
+ STATUS_RECEIVING,
+ STATUS_SENDING,
+ STATUS_OPENING
+} ModestProgressStatus;
+
+
+
+/* member functions */
+GType modest_progress_bar_get_type (void) G_GNUC_CONST;
+
+GtkWidget* modest_progress_bar_new (void);
+
+void modest_progress_bar_set_progress (ModestProgressBar *self,
+ const gchar *msg,
+ gint done,
+ gint total);
+
+void
+modest_progress_bar_set_undetermined_progress (ModestProgressBar *self,
+ ModestMailOperation *mail_op);
+
+
+G_END_DECLS
+
+#endif /* __MODEST_PROGRESS_BAR_H__ */
+
+/* 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.
+ */
+
+#ifndef __MODEST_PROGRESS_BAR_H__
+#define __MODEST_PROGRESS_BAR_H__
+
+#include <gtk/gtkvbox.h>
+#include "modest-progress-object.h"
+
+G_BEGIN_DECLS
+
+/* convenience macros */
+#define MODEST_TYPE_PROGRESS_BAR_WIDGET (modest_progress_bar_get_type())
+#define MODEST_PROGRESS_BAR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_PROGRESS_BAR_WIDGET,ModestProgressBar))
+#define MODEST_PROGRESS_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_PROGRESS_BAR_WIDGET,GtkContainer))
+#define MODEST_IS_PROGRESS_BAR_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_PROGRESS_BAR_WIDGET))
+#define MODEST_IS_PROGRESS_BAR_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_PROGRESS_BAR_WIDGET))
+#define MODEST_PROGRESS_BAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_PROGRESS_BAR_WIDGET,ModestProgressBarClass))
+
+typedef struct _ModestProgressBar ModestProgressBar;
+typedef struct _ModestProgressBarClass ModestProgressBarClass;
+
+struct _ModestProgressBar {
+ GtkVBox parent;
+ /* insert public members, if any */
+};
+
+struct _ModestProgressBarClass {
+ GtkVBoxClass parent_class;
+
+};
+
+typedef enum {
+ STATUS_RECEIVING,
+ STATUS_SENDING,
+ STATUS_OPENING
+} ModestProgressStatus;
+
+
+
+/* member functions */
+GType modest_progress_bar_get_type (void) G_GNUC_CONST;
+
+GtkWidget* modest_progress_bar_new (void);
+
+void modest_progress_bar_set_progress (ModestProgressBar *self,
+ const gchar *msg,
+ gint done,
+ gint total);
+
+void
+modest_progress_bar_set_undetermined_progress (ModestProgressBar *self,
+ ModestMailOperation *mail_op);
+
+
+G_END_DECLS
+
+#endif /* __MODEST_PROGRESS_BAR_H__ */
+
+/* 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.
+ */
+
+#ifndef __MODEST_PROGRESS_BAR_H__
+#define __MODEST_PROGRESS_BAR_H__
+
+#include <gtk/gtkvbox.h>
+#include "modest-progress-object.h"
+
+G_BEGIN_DECLS
+
+/* convenience macros */
+#define MODEST_TYPE_PROGRESS_BAR_WIDGET (modest_progress_bar_get_type())
+#define MODEST_PROGRESS_BAR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_PROGRESS_BAR_WIDGET,ModestProgressBar))
+#define MODEST_PROGRESS_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_PROGRESS_BAR_WIDGET,GtkContainer))
+#define MODEST_IS_PROGRESS_BAR_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_PROGRESS_BAR_WIDGET))
+#define MODEST_IS_PROGRESS_BAR_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_PROGRESS_BAR_WIDGET))
+#define MODEST_PROGRESS_BAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_PROGRESS_BAR_WIDGET,ModestProgressBarClass))
+
+typedef struct _ModestProgressBar ModestProgressBar;
+typedef struct _ModestProgressBarClass ModestProgressBarClass;
+
+struct _ModestProgressBar {
+ GtkVBox parent;
+ /* insert public members, if any */
+};
+
+struct _ModestProgressBarClass {
+ GtkVBoxClass parent_class;
+
+};
+
+typedef enum {
+ STATUS_RECEIVING,
+ STATUS_SENDING,
+ STATUS_OPENING
+} ModestProgressStatus;
+
+
+
+/* member functions */
+GType modest_progress_bar_get_type (void) G_GNUC_CONST;
+
+GtkWidget* modest_progress_bar_new (void);
+
+void modest_progress_bar_set_progress (ModestProgressBar *self,
+ const gchar *msg,
+ gint done,
+ gint total);
+
+void
+modest_progress_bar_set_undetermined_progress (ModestProgressBar *self,
+ ModestMailOperation *mail_op);
+
+
+G_END_DECLS
+
+#endif /* __MODEST_PROGRESS_BAR_H__ */
+