2007-06-10 Johannes Schmid <johannes.schmid@openismus.com>
[modest] / src / maemo / modest-main-window.c
index 1ce91ca..43b8a84 100644 (file)
 
 #define MODEST_MAIN_WINDOW_ACTION_GROUP_ADDITIONS "ModestMainWindowActionAdditions"
 
+#define XALIGN 0.5
+#define YALIGN 0.5
+#define XSPACE 1
+#define YSPACE 0
+
 /* 'private'/'protected' functions */
 static void modest_main_window_class_init    (ModestMainWindowClass *klass);
 static void modest_main_window_init          (ModestMainWindow *obj);
@@ -117,6 +122,10 @@ static void on_refresh_account_action_activated   (GtkAction *action,
 
 static void on_send_receive_csm_activated         (GtkMenuItem *item,
                                                   gpointer user_data);
+
+
+static GtkWidget * create_empty_view (void);
+
 /* list my signals */
 enum {
        /* MY_SIGNAL_1, */
@@ -131,6 +140,7 @@ struct _ModestMainWindowPrivate {
        GtkWidget *main_paned;
        GtkWidget *main_vbox;
        GtkWidget *contents_widget;
+       GtkWidget *empty_view;
 
        /* Progress observers */
        GtkWidget        *progress_bar;
@@ -153,6 +163,9 @@ struct _ModestMainWindowPrivate {
        /* Optimized view enabled */
        gboolean optimized_view;
 
+       /* Optimized view enabled */
+       gboolean send_receive_in_progress;
+
        ModestHeaderView *header_view;
        ModestFolderView *folder_view;
 
@@ -189,7 +202,7 @@ static const GtkActionEntry modest_folder_view_action_entries [] = {
        { "FolderViewCSMRenameFolder", NULL, N_("mcen_me_user_renamefolder"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_rename_folder) },
        { "FolderViewCSMPasteMsgs", NULL, N_("mcen_me_inbox_paste"), NULL, NULL, NULL },
        { "FolderViewCSMDeleteFolder", NULL, N_("mcen_me_inbox_delete"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_delete_folder) },
-       { "FolderViewCSMSearchMessages", NULL, N_("mcen_me_inbox_search"), NULL, NULL, NULL },
+       { "FolderViewCSMSearchMessages", NULL, N_("mcen_me_inbox_search"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_search_messages) },
        { "FolderViewCSMHelp", NULL, N_("mcen_me_inbox_help"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_help) },
 };
 
@@ -269,6 +282,7 @@ modest_main_window_init (ModestMainWindow *obj)
        priv->contents_widget  = NULL;
        priv->accounts_popup  = NULL;
        priv->details_widget  = NULL;
+       priv->empty_view  = NULL;
 
        priv->progress_widgets  = NULL;
        priv->progress_bar = NULL;
@@ -280,6 +294,7 @@ modest_main_window_init (ModestMainWindow *obj)
        priv->merge_ids = NULL;
 
        priv->optimized_view  = FALSE;
+       priv->send_receive_in_progress  = FALSE;
        priv->progress_bar_timeout = 0;
 }
 
@@ -328,7 +343,6 @@ modest_main_window_get_child_widget (ModestMainWindow *self,
 }
 
 
-
 static void
 restore_settings (ModestMainWindow *self)
 {
@@ -550,7 +564,7 @@ connect_signals (ModestMainWindow *self)
 gboolean
 sync_accounts_cb (ModestMainWindow *win)
 {
-       modest_ui_actions_do_send_receive (NULL, MODEST_WINDOW (win));
+       modest_ui_actions_on_send_receive (NULL, MODEST_WINDOW (win));
        return FALSE; /* Do not call this idle handler again. */
 }
 #endif
@@ -715,7 +729,10 @@ modest_main_window_new (void)
        if (!priv->header_view)
                g_printerr ("modest: cannot instantiate header view\n");
        modest_header_view_set_style (priv->header_view, MODEST_HEADER_VIEW_STYLE_TWOLINES);
-       
+
+       /* Empty view */ 
+       priv->empty_view = create_empty_view ();
+                
        /* Create scrolled windows */
        folder_win = gtk_scrolled_window_new (NULL, NULL);
        priv->contents_widget = gtk_scrolled_window_new (NULL, NULL);
@@ -1248,6 +1265,20 @@ set_alignment (GtkWidget *widget,
 }
 
 static GtkWidget *
+create_empty_view (void)
+{
+       GtkLabel *label = NULL;
+       GtkWidget *align = NULL;
+
+       align = gtk_alignment_new(XALIGN, YALIGN, XSPACE, YSPACE);
+       label = GTK_LABEL(gtk_label_new (_("mcen_ia_nomessages")));
+       gtk_label_set_justify (label, GTK_JUSTIFY_CENTER);      
+       gtk_container_add (GTK_CONTAINER (align), GTK_WIDGET(label));
+
+       return GTK_WIDGET(align);
+}
+
+static GtkWidget *
 create_details_widget (TnyAccount *account)
 {
        GtkWidget *vbox;
@@ -1264,8 +1295,7 @@ create_details_widget (TnyAccount *account)
                gchar *device_name = modest_conf_get_string (modest_runtime_get_conf(),
                                                      MODEST_CONF_DEVICE_NAME, NULL);
    
-               label = g_strdup_printf ("%s: %s",
-                                        _("mcen_fi_localroot_description"),
+               label = g_strdup_printf (_("mcen_fi_localroot_description"),
                                         device_name);
                gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new (label), FALSE, FALSE, 0);
                g_free (device_name);
@@ -1279,15 +1309,18 @@ create_details_widget (TnyAccount *account)
                        /* Other accounts, such as IMAP and POP: */
                        
                        GString *proto;
+                       gchar *tmp;
        
                        /* Put proto in uppercase */
                        proto = g_string_new (tny_account_get_proto (account));
                        proto = g_string_ascii_up (proto);
-       
-                       label = g_strdup_printf ("%s %s: %s", 
-                                                proto->str,
-                                                _("mcen_fi_remoteroot_account"),
-                                                tny_account_get_name (account));
+                       
+                       /* note: mcen_fi_localroot_description is something like "%s account"
+                        * however, we should display "%s account: %s"... therefore, ugly tmp */
+                       tmp   = g_strdup_printf (_("mcen_fi_remoteroot_account"),proto->str);
+                       label = g_strdup_printf ("%s: %s", tmp,tny_account_get_name (account));
+                       g_free (tmp);
+
                        gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new (label), FALSE, FALSE, 0);
                        g_string_free (proto, TRUE);
                        g_free (label);
@@ -1342,6 +1375,39 @@ create_details_widget (TnyAccount *account)
 }
 
 void 
+modest_main_window_notify_send_receive_initied (ModestMainWindow *self)
+{
+       GtkAction *action = NULL;
+       GtkWidget *widget = NULL;
+
+       g_return_if_fail (MODEST_IS_MAIN_WINDOW (self));
+
+        action = modest_window_get_action (MODEST_WINDOW(self), "/MenuBar/ToolsMenu/ToolsSendReceiveMainMenu/ToolsSendReceiveAllMenu");        
+       gtk_action_set_sensitive (action, FALSE);
+        action = modest_window_get_action (MODEST_WINDOW(self), "/MenuBar/ToolsMenu/ToolsSendReceiveMainMenu/ToolsSendReceiveCancelSendingMenu");      
+       gtk_action_set_sensitive (action, FALSE);
+        widget = modest_window_get_action_widget (MODEST_WINDOW(self), "/MenuBar/ToolsMenu/ToolsSendReceiveMainMenu/ToolsMenuAdditions");      
+       gtk_widget_set_sensitive (widget, FALSE);
+} 
+
+void 
+modest_main_window_notify_send_receive_completed (ModestMainWindow *self)
+{
+       GtkAction *action = NULL;
+       GtkWidget *widget = NULL;
+
+       g_return_if_fail (MODEST_IS_MAIN_WINDOW (self));
+
+        action = modest_window_get_action (MODEST_WINDOW(self), "/MenuBar/ToolsMenu/ToolsSendReceiveMainMenu/ToolsSendReceiveAllMenu");        
+       gtk_action_set_sensitive (action, TRUE);
+        action = modest_window_get_action (MODEST_WINDOW(self), "/MenuBar/ToolsMenu/ToolsSendReceiveMainMenu/ToolsSendReceiveCancelSendingMenu");      
+       gtk_action_set_sensitive (action, TRUE);
+        widget = modest_window_get_action_widget (MODEST_WINDOW(self), "/MenuBar/ToolsMenu/ToolsSendReceiveMainMenu/ToolsMenuAdditions");      
+       gtk_widget_set_sensitive (widget, TRUE);
+} 
+
+
+void 
 modest_main_window_set_contents_style (ModestMainWindow *self, 
                                       ModestMainWindowContentsStyle style)
 {
@@ -1355,15 +1421,20 @@ modest_main_window_set_contents_style (ModestMainWindow *self,
           set if there are details, because it could happen when we're
           selecting different accounts consecutively */
        if ((priv->contents_style == style) &&
-           (priv->contents_style == MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS))
+           (priv->contents_style != MODEST_MAIN_WINDOW_CONTENTS_STYLE_DETAILS))
                return;
 
        /* Remove previous child. Delete it if it was an account
           details widget */
        GtkWidget *content = gtk_bin_get_child (GTK_BIN (priv->contents_widget));
        if (content) {
-               if (priv->contents_style != MODEST_MAIN_WINDOW_CONTENTS_STYLE_DETAILS)
+               if (priv->contents_style == MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS)
                        g_object_ref (content);
+               else if (priv->contents_style == MODEST_MAIN_WINDOW_CONTENTS_STYLE_EMPTY) {
+                       g_object_ref (priv->empty_view);
+                       gtk_container_remove (GTK_CONTAINER (content), priv->empty_view);
+               }
+               
                gtk_container_remove (GTK_CONTAINER (priv->contents_widget), content);
        }
 
@@ -1387,6 +1458,9 @@ modest_main_window_set_contents_style (ModestMainWindow *self,
                }
                break;
        }
+       case MODEST_MAIN_WINDOW_CONTENTS_STYLE_EMPTY:
+               wrap_in_scrolled_window (priv->contents_widget, GTK_WIDGET (priv->empty_view));
+               break;
        default:
                g_return_if_reached ();
        }
@@ -1414,7 +1488,7 @@ on_configuration_key_changed (ModestConf* conf,
 
        account = (TnyAccount *) modest_folder_view_get_selected (priv->folder_view);
        if (TNY_IS_ACCOUNT (account) &&
-           !strcmp (tny_account_get_id (account), MODEST_ACTUAL_LOCAL_FOLDERS_ACCOUNT_ID)) {
+           !strcmp (tny_account_get_id (account), MODEST_LOCAL_FOLDERS_ACCOUNT_ID)) {
                GList *children;
                GtkLabel *label;
                const gchar *device_name;