From 7c0c35878201fec6167f53a941fbf4d9a3ed14d2 Mon Sep 17 00:00:00 2001 From: Javier Fernandez Garcia-Boente Date: Thu, 26 Apr 2007 08:45:49 +0000 Subject: [PATCH] * Add a new widget ModestProgressBarWidget to work as observer of ModestMainWindow object. * Add ui manager toolitems for this new widget and Cancel button. * Sinchronize toolbar items dimming based on toolbar operation mode (Normal/Transfer). pmo-trunk-r1672 --- src/maemo/Makefile.am | 5 +- src/maemo/modest-icon-names.h | 10 +- src/maemo/modest-main-window-ui.h | 1 + src/maemo/modest-main-window.c | 78 ++++++++++++- src/maemo/modest-progress-bar-widget.c | 187 ++++++++++++++++++++++++++++++++ src/maemo/modest-progress-bar-widget.h | 79 ++++++++++++++ src/maemo/ui/modest-main-window-ui.xml | 3 + 7 files changed, 353 insertions(+), 10 deletions(-) create mode 100644 src/maemo/modest-progress-bar-widget.c create mode 100644 src/maemo/modest-progress-bar-widget.h diff --git a/src/maemo/Makefile.am b/src/maemo/Makefile.am index 909d30b..50c1bc4 100644 --- a/src/maemo/Makefile.am +++ b/src/maemo/Makefile.am @@ -65,7 +65,10 @@ libmodest_ui_la_SOURCES= \ modest-connection-specific-smtp-window.h \ modest-connection-specific-smtp-window.c \ modest-connection-specific-smtp-edit-window.h \ - modest-connection-specific-smtp-edit-window.c + modest-connection-specific-smtp-edit-window.c \ + modest-progress-bar-widget.c \ + modest-progress-bar-widget.h + libmodest_ui_la_LIBADD = \ $(MODEST_GSTUFF_LIBS) \ diff --git a/src/maemo/modest-icon-names.h b/src/maemo/modest-icon-names.h index 1753a14..d112747 100644 --- a/src/maemo/modest-icon-names.h +++ b/src/maemo/modest-icon-names.h @@ -45,12 +45,12 @@ #define MODEST_HEADER_ICON_DELETED "qgn_list_messagin_mail_deleted" #define MODEST_HEADER_ICON_ATTACH "qgn_list_gene_attacpap" -#define MODEST_HEADER_ICON_ATTACH_HIGH_PRIORITY PIXMAP_PREFIX "qgn_list_gene_high_attacpap,png" -#define MODEST_HEADER_ICON_ATTACH_LOW_PRIORITY PIXMAP_PREFIX "qgn_list_gene_low_attacpap.png" -#define MODEST_HEADER_ICON_ATTACH_NORM_PRIORITY PIXMAP_PREFIX "qgn_list_gene_norm_attacpap.png" +#define MODEST_HEADER_ICON_ATTACH_HIGH_PRIORITY "qgn_list_gene_high_attacpap" +#define MODEST_HEADER_ICON_ATTACH_LOW_PRIORITY "qgn_list_gene_low_attacpap" +#define MODEST_HEADER_ICON_ATTACH_NORM_PRIORITY "qgn_list_gene_norm_attacpap" -#define MODEST_HEADER_ICON_HIGH_PRIORITY PIXMAP_PREFIX "qgn_list_messaging_high_noatt.png" -#define MODEST_HEADER_ICON_LOW_PRIORITY PIXMAP_PREFIX "qgn_list_messaging_low_noatt.png" +#define MODEST_HEADER_ICON_HIGH_PRIORITY "qgn_list_messaging_high_noatt" +#define MODEST_HEADER_ICON_LOW_PRIORITY "qgn_list_messaging_low_noatt" #define MODEST_FOLDER_ICON_OPEN "qgn_list_gene_fldr_opn" #define MODEST_FOLDER_ICON_CLOSED "qgn_list_gene_fldr_cls" diff --git a/src/maemo/modest-main-window-ui.h b/src/maemo/modest-main-window-ui.h index 381db7b..d5d4ec0 100644 --- a/src/maemo/modest-main-window-ui.h +++ b/src/maemo/modest-main-window-ui.h @@ -115,6 +115,7 @@ static const GtkActionEntry modest_action_entries [] = { { "ToolbarMessageBack", GTK_STOCK_GO_BACK, N_("qgn_toolb_gene_back"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_prev) }, { "ToolbarMessageNext", GTK_STOCK_GO_FORWARD, N_("qgn_toolb_gene_forward"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_next) }, { "ToolbarMessageMoveTo", MODEST_TOOLBAR_ICON_MOVE_TO_FOLDER, N_("qgn_toolb_gene_movetofldr"), NULL, NULL, NULL }, + { "ToolbarCancel", GTK_STOCK_STOP, "", NULL, NULL, NULL }, }; static const GtkToggleActionEntry modest_toggle_action_entries [] = { diff --git a/src/maemo/modest-main-window.c b/src/maemo/modest-main-window.c index 483db22..013b49b 100644 --- a/src/maemo/modest-main-window.c +++ b/src/maemo/modest-main-window.c @@ -54,6 +54,7 @@ #include "modest-tny-msg.h" #include "modest-mail-operation.h" #include "modest-icon-names.h" +#include "modest-progress-bar-widget.h" /* 'private'/'protected' functions */ static void modest_main_window_class_init (ModestMainWindowClass *klass); @@ -90,6 +91,7 @@ enum { LAST_SIGNAL }; + typedef struct _ModestMainWindowPrivate ModestMainWindowPrivate; struct _ModestMainWindowPrivate { GtkWidget *msg_paned; @@ -97,6 +99,9 @@ struct _ModestMainWindowPrivate { GtkWidget *main_vbox; GtkWidget *contents_widget; + /* Progress observers */ + GtkWidget *progress_widget; + /* On-demand widgets */ GtkWidget *accounts_popup; GtkWidget *details_widget; @@ -504,6 +509,53 @@ modest_main_window_close_all (ModestMainWindow *self) } void +modest_main_window_set_toolbar_mode (ModestMainWindow *self, + ModestToolBarModes mode) +{ + ModestMainWindowPrivate *priv; + ModestWindowPrivate *parent_priv; + GtkAction *action; + gboolean transfer_mode= FALSE; + gboolean normal_mode= FALSE; + + + g_return_if_fail (MODEST_IS_MAIN_WINDOW (self)); + + priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); + parent_priv = MODEST_WINDOW_GET_PRIVATE (self); + + switch (mode) { + case TOOLBAR_MODE_NORMAL: + normal_mode = TRUE; + transfer_mode = FALSE; + gtk_widget_hide (priv->progress_widget); + break; + case TOOLBAR_MODE_TRANSFER: + normal_mode = FALSE; + transfer_mode = TRUE; + gtk_widget_show (priv->progress_widget); + break; + default: + normal_mode = TRUE; + transfer_mode = FALSE; + gtk_widget_hide (priv->progress_widget); + } + + /* Transfer mode toolitems */ + action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarCancel"); + if (action != NULL) + gtk_action_set_visible (action, transfer_mode); + + /* Normal mode toolitems */ + action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarSort"); + if (action != NULL) + gtk_action_set_visible (action, normal_mode); + action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarSendReceive"); + if (action != NULL) + gtk_action_set_visible (action, normal_mode); +} + +void modest_main_window_set_style (ModestMainWindow *self, ModestMainWindowStyle style) { @@ -602,10 +654,15 @@ static void modest_main_window_show_toolbar (ModestWindow *self, gboolean show_toolbar) { - ModestWindowPrivate *parent_priv; + ModestMainWindowPrivate *priv = NULL; + ModestWindowPrivate *parent_priv = NULL; GtkWidget *reply_button = NULL, *menu = NULL; - + GtkWidget *placeholder = NULL; + GtkWidget *tool_item = NULL; + gint insert_index; + parent_priv = MODEST_WINDOW_GET_PRIVATE(self); + priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); if (!parent_priv->toolbar && show_toolbar) { parent_priv->toolbar = gtk_ui_manager_get_widget (parent_priv->ui_manager, @@ -615,6 +672,18 @@ modest_main_window_show_toolbar (ModestWindow *self, gtk_container_foreach (GTK_CONTAINER (parent_priv->toolbar), set_homogeneous, NULL); + /* Add ProgressBar (Transfer toolbar) */ + priv->progress_widget = modest_progress_bar_widget_new (); + gtk_widget_set_no_show_all (priv->progress_widget, TRUE); + modest_progress_bar_widget_set_status (MODEST_PROGRESS_BAR_WIDGET(priv->progress_widget), 0); + 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)); + tool_item = GTK_WIDGET (gtk_tool_item_new ()); + gtk_container_add (GTK_CONTAINER (tool_item), priv->progress_widget); +/* gtk_tool_item_set_expand (GTK_TOOL_ITEM (tool_item), TRUE); */ +/* gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (tool_item), TRUE); */ + gtk_toolbar_insert(GTK_TOOLBAR(parent_priv->toolbar), GTK_TOOL_ITEM (tool_item), insert_index); + /* Add to window */ hildon_window_add_toolbar (HILDON_WINDOW (self), GTK_TOOLBAR (parent_priv->toolbar)); @@ -632,9 +701,10 @@ modest_main_window_show_toolbar (ModestWindow *self, } - if (show_toolbar) + if (show_toolbar) { gtk_widget_show (GTK_WIDGET (parent_priv->toolbar)); - else + modest_main_window_set_toolbar_mode (MODEST_MAIN_WINDOW(self), TOOLBAR_MODE_NORMAL); + } else gtk_widget_hide (GTK_WIDGET (parent_priv->toolbar)); } diff --git a/src/maemo/modest-progress-bar-widget.c b/src/maemo/modest-progress-bar-widget.c new file mode 100644 index 0000000..a229d75 --- /dev/null +++ b/src/maemo/modest-progress-bar-widget.c @@ -0,0 +1,187 @@ +/* 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 +#include +#include +#include "modest-progress-bar-widget.h" +#include + +/* '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); +/* list my signals */ +/* enum { */ +/* LAST_SIGNAL */ +/* }; */ + +typedef struct _ModestProgressBarWidgetPrivate ModestProgressBarWidgetPrivate; +struct _ModestProgressBarWidgetPrivate { + GtkWidget *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; + +/* uncomment the following if you have defined any signals */ +/* static guint signals[LAST_SIGNAL] = {0}; */ + +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 + }; + my_type = g_type_register_static (GTK_TYPE_VBOX, + "ModestProgressBarWidget", + &my_info, 0); + } + 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)); + + /* signal definitions go here, e.g.: */ +/* signals[DATA_CHANGED_SIGNAL] = */ +/* g_signal_new ("data_changed", */ +/* G_TYPE_FROM_CLASS (klass), */ +/* G_SIGNAL_RUN_FIRST, */ +/* G_STRUCT_OFFSET(ModestProgressBarWidgetClass, data_changed), */ +/* NULL, NULL, */ +/* g_cclosure_marshal_VOID__VOID, */ +/* G_TYPE_NONE, 0); */ +} + +static void +modest_progress_bar_widget_init (ModestProgressBarWidget *obj) +{ + ModestProgressBarWidgetPrivate *priv; + + priv = MODEST_PROGRESS_BAR_WIDGET_GET_PRIVATE(obj); + priv->bar = NULL; +} + + +static void +modest_progress_bar_widget_finalize (GObject *obj) +{ + G_OBJECT_CLASS(parent_class)->finalize (obj); +} + +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->bar = gtk_progress_bar_new (); + req.width = 50; + req.height = 64; + gtk_progress_set_text_alignment (GTK_PROGRESS (priv->bar), 0.0, 0.5); + gtk_progress_bar_set_ellipsize (GTK_PROGRESS_BAR (priv->bar), PANGO_ELLIPSIZE_END); + gtk_widget_size_request (priv->bar, &req); + + /* Add progress bar widget */ + gtk_box_pack_start (GTK_BOX(self), priv->bar, TRUE, TRUE, 2); + gtk_widget_show_all (GTK_WIDGET(self)); + + return GTK_WIDGET(self); +} + + +void +modest_progress_bar_widget_set_status (ModestProgressBarWidget *self, + guint id) +{ + ModestProgressBarWidgetPrivate *priv; + gchar *status = NULL; + gboolean determined = FALSE; + guint d1 = 0, d2 = 0; + + priv = MODEST_PROGRESS_BAR_WIDGET_GET_PRIVATE(self); + + switch (id) { + case STATUS_RECEIVING: + if (determined) + status = g_strdup_printf(_("mcen_me_receiving"), d1, d2); + else + status = g_strdup(_("mail_me_receiving")); + break; + case STATUS_SENDING: + if (determined) + status = g_strdup_printf(_("mcen_me_sending"), d1, d2); + else + status = g_strdup(_("mail_me_sending")); + break; + + case STATUS_OPENING: + status = g_strdup(_("mail_me_opening")); + break; + default: + g_return_if_reached(); + } + + gtk_progress_bar_set_text (GTK_PROGRESS_BAR(priv->bar), status); + gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(priv->bar), 0.5); + + /* free*/ + g_free(status); +} diff --git a/src/maemo/modest-progress-bar-widget.h b/src/maemo/modest-progress-bar-widget.h new file mode 100644 index 0000000..f3674e4 --- /dev/null +++ b/src/maemo/modest-progress-bar-widget.h @@ -0,0 +1,79 @@ +/* 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 +#include + +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 modest_progress_bar_widget_set_status (ModestProgressBarWidget *self, guint id); + + + +G_END_DECLS + +#endif /* __MODEST_PROGRESS_BAR_WIDGET_H__ */ + diff --git a/src/maemo/ui/modest-main-window-ui.xml b/src/maemo/ui/modest-main-window-ui.xml index 15311e8..3c23869 100644 --- a/src/maemo/ui/modest-main-window-ui.xml +++ b/src/maemo/ui/modest-main-window-ui.xml @@ -108,6 +108,9 @@ + + + -- 1.7.9.5