* Add a new widget ModestProgressBarWidget to work as observer
authorJavier Fernandez Garcia-Boente <jfernandez@igalia.com>
Thu, 26 Apr 2007 08:45:49 +0000 (08:45 +0000)
committerJavier Fernandez Garcia-Boente <jfernandez@igalia.com>
Thu, 26 Apr 2007 08:45:49 +0000 (08:45 +0000)
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
src/maemo/modest-icon-names.h
src/maemo/modest-main-window-ui.h
src/maemo/modest-main-window.c
src/maemo/modest-progress-bar-widget.c [new file with mode: 0644]
src/maemo/modest-progress-bar-widget.h [new file with mode: 0644]
src/maemo/ui/modest-main-window-ui.xml

index 909d30b..50c1bc4 100644 (file)
@@ -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) \
index 1753a14..d112747 100644 (file)
 #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"
index 381db7b..d5d4ec0 100644 (file)
@@ -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 [] = {
index 483db22..013b49b 100644 (file)
@@ -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 (file)
index 0000000..a229d75
--- /dev/null
@@ -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 <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <widgets/modest-combo-box.h>
+#include "modest-progress-bar-widget.h"
+#include <string.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);
+/* 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 (file)
index 0000000..f3674e4
--- /dev/null
@@ -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 <gtk/gtkvbox.h>
+#include <modest-protocol-info.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 modest_progress_bar_widget_set_status (ModestProgressBarWidget *self, guint id);
+
+
+
+G_END_DECLS
+
+#endif /* __MODEST_PROGRESS_BAR_WIDGET_H__ */
+
index 15311e8..3c23869 100644 (file)
     <toolitem action="ToolbarToggleView"/>
     <toolitem action="ToolbarSort"/>
     <toolitem action="ToolbarSendReceive"/>
+    <placeholder name="ProgressBarView">
+    </placeholder>
+    <toolitem action="ToolbarCancel"/>
   </toolbar>
 
   <popup name="HeaderViewCSM">