Enable dimming for header window
authorJose Dapena Paz <jdapena@igalia.com>
Thu, 11 Dec 2008 10:54:12 +0000 (10:54 +0000)
committerJose Dapena Paz <jdapena@igalia.com>
Thu, 11 Dec 2008 10:54:12 +0000 (10:54 +0000)
pmo-drop-split-view-r6767

src/hildon2/modest-header-window.c
src/modest-ui-dimming-rules.c
src/modest-ui-dimming-rules.h

index ea05de9..3f776d3 100644 (file)
@@ -33,6 +33,7 @@
 #include <hildon/hildon-pannable-area.h>
 #include <hildon/hildon-edit-toolbar.h>
 #include <modest-window-mgr.h>
+#include <modest-window-priv.h>
 #include <modest-signal-mgr.h>
 #include <modest-runtime.h>
 #include <modest-platform.h>
@@ -49,6 +50,8 @@
 #include <hildon/hildon-button.h>
 #include <hildon/hildon-program.h>
 #include <hildon/hildon-banner.h>
+#include "modest-ui-dimming-rules.h"
+#include "modest-ui-dimming-manager.h"
 
 typedef enum {
        CONTENTS_STATE_NONE = 0,
@@ -104,11 +107,17 @@ static void connect_signals (ModestHeaderWindow *self);
 static void modest_header_window_disconnect_signals (ModestWindow *self);
 
 static gboolean on_zoom_minus_plus_not_implemented (ModestWindow *window);
+static gboolean modest_header_window_toggle_menu (HildonWindow *window,
+                                                 guint button,
+                                                 guint32 time);
 static void add_to_menu (ModestHeaderWindow *self,
                         HildonAppMenu *menu,
                         gchar *label,
-                        GCallback callback);
-static void setup_menu (ModestHeaderWindow *self);
+                        GCallback callback,
+                        ModestDimmingRulesGroup *group,
+                        GCallback dimming_callback);
+static void setup_menu (ModestHeaderWindow *self,
+                       ModestDimmingRulesGroup *group);
 static GtkWidget *create_empty_view (void);
 static GtkWidget *create_header_view (ModestWindow *progress_window,
                                      TnyFolder *folder);
@@ -146,6 +155,7 @@ static void on_vertical_movement (HildonPannableArea *area,
                                  HildonMovementDirection direction,
                                  gdouble x, gdouble y, gpointer user_data);
 
+
 /* globals */
 static GtkWindowClass *parent_class = NULL;
 
@@ -188,12 +198,15 @@ modest_header_window_class_init (ModestHeaderWindowClass *klass)
        GObjectClass *gobject_class;
        gobject_class = (GObjectClass*) klass;
        ModestWindowClass *modest_window_class = (ModestWindowClass *) klass;
+       HildonWindowClass *hildon_window_class = (HildonWindowClass *) klass;
 
        parent_class            = g_type_class_peek_parent (klass);
        gobject_class->finalize = modest_header_window_finalize;
 
        g_type_class_add_private (gobject_class, sizeof(ModestHeaderWindowPrivate));
        
+       hildon_window_class->toggle_menu = modest_header_window_toggle_menu;
+
        modest_window_class->zoom_minus_func = on_zoom_minus_plus_not_implemented;
        modest_window_class->zoom_plus_func = on_zoom_minus_plus_not_implemented;
        modest_window_class->disconnect_signals_func = modest_header_window_disconnect_signals;
@@ -373,9 +386,15 @@ modest_header_window_new (TnyFolder *folder)
        ModestHeaderWindowPrivate *priv = NULL;
        HildonProgram *app;
        GdkPixbuf *window_icon;
+       ModestWindowPrivate *parent_priv = NULL;
+       ModestDimmingRulesGroup *menu_rules_group = NULL;
        
        self  = MODEST_HEADER_WINDOW(g_object_new(MODEST_TYPE_HEADER_WINDOW, NULL));
        priv = MODEST_HEADER_WINDOW_GET_PRIVATE(self);
+       parent_priv = MODEST_WINDOW_GET_PRIVATE(self);
+
+       parent_priv->ui_dimming_manager = modest_ui_dimming_manager_new();
+       menu_rules_group = modest_dimming_rules_group_new (MODEST_DIMMING_RULES_MENU, FALSE);
 
        priv->folder = g_object_ref (folder);
 
@@ -385,7 +404,10 @@ modest_header_window_new (TnyFolder *folder)
        priv->empty_view = create_empty_view ();
        g_object_ref (priv->header_view);
        g_object_ref (priv->empty_view);
-       setup_menu (self);
+       setup_menu (self, menu_rules_group);
+
+       modest_ui_dimming_manager_insert_rules_group (parent_priv->ui_dimming_manager, menu_rules_group);
+       g_object_unref (menu_rules_group);
 
         priv->top_vbox = gtk_vbox_new (FALSE, 0);
        gtk_box_pack_end (GTK_BOX (priv->top_vbox), priv->contents_view, TRUE, TRUE, 0);
@@ -468,17 +490,23 @@ modest_header_window_get_header_view (ModestHeaderWindow *self)
 static void add_to_menu (ModestHeaderWindow *self,
                         HildonAppMenu *menu,
                         gchar *label,
-                        GCallback callback)
+                        GCallback callback,
+                        ModestDimmingRulesGroup *dimming_group,
+                        GCallback dimming_callback)
 {
        GtkWidget *button;
 
        button = gtk_button_new_with_label (label);
        g_signal_connect_after (G_OBJECT (button), "clicked",
                                callback, (gpointer) self);
+       modest_dimming_rules_group_add_widget_rule (dimming_group,
+                                                   button,
+                                                   dimming_callback,
+                                                   MODEST_WINDOW (self));
        hildon_app_menu_append (menu, GTK_BUTTON (button));
 }
 
-static void setup_menu (ModestHeaderWindow *self)
+static void setup_menu (ModestHeaderWindow *self, ModestDimmingRulesGroup *group)
 {
        ModestHeaderWindowPrivate *priv = NULL;
        GtkWidget *app_menu;
@@ -489,23 +517,43 @@ static void setup_menu (ModestHeaderWindow *self)
 
        app_menu = hildon_app_menu_new ();
 
-       add_to_menu (self, HILDON_APP_MENU (app_menu), _("mcen_me_viewer_newemail"),
-                    G_CALLBACK (modest_ui_actions_on_new_msg));
-       add_to_menu (self, HILDON_APP_MENU (app_menu), _("mcen_me_inbox_sendandreceive"),
-                    G_CALLBACK (modest_ui_actions_on_send_receive));
+       add_to_menu (self, HILDON_APP_MENU (app_menu), _("mcen_me_inbox_moveto"),
+                    G_CALLBACK (set_moveto_edit_mode),
+                    group, G_CALLBACK (modest_ui_dimming_rules_on_delete));
+       add_to_menu (self, HILDON_APP_MENU (app_menu), _("mcen_me_inbox_delete"),
+                    G_CALLBACK (set_delete_edit_mode),
+                    group, G_CALLBACK (modest_ui_dimming_rules_on_move_to));
        add_to_menu (self, HILDON_APP_MENU (app_menu), _("mcen_me_inbox_messagedetails"),
-                    G_CALLBACK (modest_ui_actions_on_details));
+                    G_CALLBACK (modest_ui_actions_on_details),
+                    group, G_CALLBACK (modest_ui_dimming_rules_on_details));
        add_to_menu (self, HILDON_APP_MENU (app_menu), _("mcen_me_inbox_sort"),
-                    G_CALLBACK (modest_ui_actions_on_sort));
-       add_to_menu (self, HILDON_APP_MENU (app_menu), _("mcen_me_inbox_delete"),
-                    G_CALLBACK (set_delete_edit_mode));
-       add_to_menu (self, HILDON_APP_MENU (app_menu), _("mcen_me_inbox_moveto"),
-                    G_CALLBACK (set_moveto_edit_mode));
+                    G_CALLBACK (modest_ui_actions_on_sort),
+                    group, G_CALLBACK (modest_ui_dimming_rules_on_sort));
+       add_to_menu (self, HILDON_APP_MENU (app_menu), _("mcen_me_viewer_newemail"),
+                    G_CALLBACK (modest_ui_actions_on_new_msg),
+                    group, G_CALLBACK (modest_ui_dimming_rules_on_new_msg));
+       add_to_menu (self, HILDON_APP_MENU (app_menu), _("mcen_me_inbox_sendandreceive"),
+                    G_CALLBACK (modest_ui_actions_on_send_receive),
+                    group, G_CALLBACK (modest_ui_dimming_rules_on_send_receive));
+       add_to_menu (self, HILDON_APP_MENU (app_menu), _("mcen_me_outbox_cancelsend"),
+                    G_CALLBACK (modest_ui_actions_cancel_send),
+                    group, G_CALLBACK (modest_ui_dimming_rules_on_cancel_sending_all));
 
        hildon_stackable_window_set_main_menu (HILDON_STACKABLE_WINDOW (self), 
                                               HILDON_APP_MENU (app_menu));
 }
 
+static gboolean 
+modest_header_window_toggle_menu (HildonWindow *window,
+                                 guint button,
+                                 guint32 time)
+{
+       modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (window));
+
+       return HILDON_WINDOW_CLASS (parent_class)->toggle_menu (window, button, time);
+}
+
+
 static void 
 update_view (ModestHeaderWindow *self,
             TnyFolderChange *change)
index cb8b48b..1c1b1ee 100644 (file)
@@ -47,6 +47,9 @@
 #include <tny-simple-list.h>
 #include <widgets/modest-recpt-editor.h>
 #include <gtkhtml/gtkhtml.h>
+#ifdef MODEST_TOOLKIT_HILDON2
+#include <modest-header-window.h>
+#endif
 
 
 static gboolean _folder_is_any_of_type (TnyFolder *folder, TnyFolderType types[], guint ntypes);
@@ -458,8 +461,31 @@ modest_ui_dimming_rules_on_delete (ModestWindow *win, gpointer user_data)
                    !gtk_widget_is_focus (header_view) &&
                    !gtk_widget_is_focus (folder_view)) {
                        dimmed = TRUE;
-                       modest_dimming_rule_set_notification (rule, dgettext("hildon-common-strings", "ckct_ib_nothing_to_delete"));                    
+                       modest_dimming_rule_set_notification (rule, dgettext("hildon-common-strings", "ckct_ib_nothing_to_delete"));
+               }
+                       
+#ifdef MODEST_TOOLKIT_HILDON2
+       } else if (MODEST_IS_HEADER_WINDOW (win)) {
+
+               if (!dimmed) {
+                       dimmed = _transfer_mode_enabled (win);
+               }
+               if (dimmed)
+                       modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading"));     
+
+               if (!dimmed) {
+                       GtkWidget *header_view;
+                       TnyFolder *folder;
+
+                       header_view = GTK_WIDGET (modest_header_window_get_header_view (MODEST_HEADER_WINDOW (win)));
+                       folder = modest_header_view_get_folder (MODEST_HEADER_VIEW (header_view));
+                       if (folder) {
+                               dimmed = (tny_folder_get_all_count (TNY_FOLDER (folder)) == 0);
+                               g_object_unref (folder);
+                       }
                }
+
+#endif
        } else {
                dimmed = modest_ui_dimming_rules_on_delete_folder (win, rule);
        }
@@ -517,10 +543,16 @@ modest_ui_dimming_rules_on_sort (ModestWindow *win, gpointer user_data)
        ModestDimmingRule *rule = NULL;
        gboolean dimmed = FALSE;
 
+#ifdef MODEST_TOOLKIT_HILDON2
+       if (MODEST_IS_HEADER_WINDOW (win)) {
+               return FALSE;
+       }
+#endif         
+
        g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
        g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
        rule = MODEST_DIMMING_RULE (user_data);
-               
+
        /* Check dimmed rule */ 
        dimmed = _selected_folder_is_root (MODEST_MAIN_WINDOW(win));
 
@@ -855,7 +887,7 @@ modest_ui_dimming_rules_on_details (ModestWindow *win, gpointer user_data)
                        dimmed = _msg_download_in_progress (win);
                if (dimmed)
                        modest_dimming_rule_set_notification (rule, "");                
-               if (!dimmed) {
+               if (!dimmed && MODEST_IS_MSG_VIEW_WINDOW (win)) {
                        if (!modest_msg_view_window_is_search_result (MODEST_MSG_VIEW_WINDOW(win))) {
                                dimmed = !modest_msg_view_window_has_headers_model (MODEST_MSG_VIEW_WINDOW (win));
                        }
@@ -990,6 +1022,10 @@ modest_ui_dimming_rules_on_move_to (ModestWindow *win, gpointer user_data)
 
        if (MODEST_IS_MAIN_WINDOW (win)) 
                dimmed = modest_ui_dimming_rules_on_main_window_move_to (win, user_data);
+#ifdef MODEST_TOOLKIT_HILDON2
+       else if (MODEST_IS_HEADER_WINDOW (win))
+               dimmed = modest_ui_dimming_rules_on_header_window_move_to (win, user_data);
+#endif
        else if (MODEST_IS_MSG_VIEW_WINDOW (win)) 
                 dimmed = modest_ui_dimming_rules_on_view_window_move_to (win, user_data);
 
@@ -1113,6 +1149,36 @@ modest_ui_dimming_rules_on_view_window_move_to (ModestWindow *win, gpointer user
 }
 
 gboolean 
+modest_ui_dimming_rules_on_header_window_move_to (ModestWindow *win, gpointer user_data)
+{
+       ModestDimmingRule *rule = NULL;
+       gboolean dimmed = FALSE;
+
+       g_return_val_if_fail (MODEST_IS_HEADER_WINDOW(win), FALSE);
+       g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
+       rule = MODEST_DIMMING_RULE (user_data);
+
+       /* Check dimmed rule */ 
+       dimmed = _transfer_mode_enabled (win);                  
+       if (dimmed)
+               modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading"));     
+
+       if (!dimmed) {
+               GtkWidget *header_view;
+               TnyFolder *folder;
+               
+               header_view = GTK_WIDGET (modest_header_window_get_header_view (MODEST_HEADER_WINDOW (win)));
+               folder = modest_header_view_get_folder (MODEST_HEADER_VIEW (header_view));
+               if (folder) {
+                       dimmed = (tny_folder_get_all_count (TNY_FOLDER (folder)) == 0);
+                       g_object_unref (folder);
+               }
+       }
+
+       return dimmed;
+}
+
+gboolean 
 modest_ui_dimming_rules_on_find_msg (ModestWindow *win, gpointer user_data)
 {
        ModestDimmingRule *rule = NULL;
@@ -1772,6 +1838,14 @@ modest_ui_dimming_rules_on_cancel_sending (ModestWindow *win, gpointer user_data
 }
 
 gboolean 
+modest_ui_dimming_rules_on_cancel_sending_all (ModestWindow *win, gpointer user_data)
+{
+       /* TODO: implement dimming rule for cancelling sending all messages. Should
+        * be just cancelling all messages to put them in "waiting" state */
+       return FALSE;
+}
+
+gboolean 
 modest_ui_dimming_rules_on_send_receive (ModestWindow *win, gpointer user_data)
 {
        ModestDimmingRule *rule = NULL;
index be3509e..165e11d 100644 (file)
@@ -60,6 +60,7 @@ gboolean modest_ui_dimming_rules_on_mark_as_unread_msg (ModestWindow *win, gpoin
 gboolean modest_ui_dimming_rules_on_move_to (ModestWindow *win, gpointer user_data);
 gboolean modest_ui_dimming_rules_on_main_window_move_to (ModestWindow *win, gpointer user_data);
 gboolean modest_ui_dimming_rules_on_view_window_move_to (ModestWindow *win, gpointer user_data);
+gboolean modest_ui_dimming_rules_on_header_window_move_to (ModestWindow *win, gpointer user_data);
 gboolean modest_ui_dimming_rules_on_paste (ModestWindow *win, gpointer user_data);
 gboolean modest_ui_dimming_rules_on_delete_msgs (ModestWindow *win, gpointer user_data);
 gboolean modest_ui_dimming_rules_on_select_all (ModestWindow *win, gpointer user_data);
@@ -74,6 +75,7 @@ gboolean modest_ui_dimming_rules_on_view_previous (ModestWindow *win, gpointer u
 gboolean modest_ui_dimming_rules_on_view_next (ModestWindow *win, gpointer user_data);
 gboolean modest_ui_dimming_rules_on_tools_smtp_servers (ModestWindow *win, gpointer user_data);
 gboolean modest_ui_dimming_rules_on_cancel_sending (ModestWindow *win, gpointer user_data);
+gboolean modest_ui_dimming_rules_on_cancel_sending_all (ModestWindow *win, gpointer user_data);
 gboolean modest_ui_dimming_rules_on_send_receive (ModestWindow *win, gpointer user_data);
 gboolean modest_ui_dimming_rules_on_send_receive_all (ModestWindow *win, gpointer user_data);
 gboolean modest_ui_dimming_rules_on_add_to_contacts (ModestWindow *win, gpointer user_data);