Show title widgets in ModestShell
[modest] / src / gtk / modest-shell.c
index b74e46e..4a8f560 100644 (file)
 
 #include <string.h>
 #include <modest-shell.h>
+#include <modest-shell-window.h>
 
 /* 'private'/'protected' functions */
 static void modest_shell_class_init (ModestShellClass *klass);
 static void modest_shell_instance_init (ModestShell *obj);
 static void modest_shell_finalize   (GObject *obj);
 
+static void update_title (ModestShell *self);
+
 
 typedef struct _ModestShellPrivate ModestShellPrivate;
 struct _ModestShellPrivate {
        GtkWidget *main_vbox;
        GtkWidget *notebook;
+       GtkWidget *top_toolbar;
+       GtkToolItem *back_button;
+       GtkToolItem *title_button;
+       GtkWidget *title_label;
+       GtkWidget *subtitle_label;
 };
 #define MODEST_SHELL_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
                                                                      MODEST_TYPE_SHELL, \
@@ -89,16 +97,40 @@ static void
 modest_shell_instance_init (ModestShell *obj)
 {
        ModestShellPrivate *priv;
+       GtkWidget *title_vbox;
 
        priv = MODEST_SHELL_GET_PRIVATE(obj);
 
        priv->main_vbox = gtk_vbox_new (FALSE, 0);
        gtk_widget_show (priv->main_vbox);
 
+       priv->top_toolbar = gtk_toolbar_new ();
+       gtk_widget_show (priv->top_toolbar);
+       gtk_box_pack_start (GTK_BOX (priv->main_vbox), priv->top_toolbar, FALSE, FALSE, 0);
+
+       priv->back_button = gtk_tool_button_new_from_stock (GTK_STOCK_GO_BACK);
+       gtk_toolbar_insert (GTK_TOOLBAR (priv->top_toolbar), priv->back_button, -1);
+       gtk_widget_show (GTK_WIDGET (priv->back_button));
+
+       title_vbox = gtk_vbox_new (FALSE, 0);
+       priv->title_label = gtk_label_new (NULL);
+       priv->subtitle_label = gtk_label_new (NULL);
+       gtk_widget_show (priv->title_label);
+       gtk_widget_show (priv->subtitle_label);
+       gtk_box_pack_start (GTK_BOX (title_vbox), priv->title_label, TRUE, TRUE, 0);
+       gtk_box_pack_start (GTK_BOX (title_vbox), priv->subtitle_label, FALSE, FALSE, 0);
+       gtk_widget_show (title_vbox);
+
+       priv->title_button = gtk_tool_button_new (NULL, NULL);
+       gtk_widget_show (GTK_WIDGET (priv->title_button));
+       gtk_tool_button_set_label_widget (GTK_TOOL_BUTTON (priv->title_button), title_vbox);
+       gtk_toolbar_insert (GTK_TOOLBAR (priv->top_toolbar), priv->title_button, -1);
+       gtk_container_child_set (GTK_CONTAINER (priv->top_toolbar), GTK_WIDGET (priv->title_button), "expand", TRUE, NULL);
+
        priv->notebook = gtk_notebook_new ();
-       gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->notebook), FALSE);
        gtk_widget_show (priv->notebook);
        gtk_box_pack_start (GTK_BOX (priv->main_vbox), priv->notebook, TRUE, TRUE, 0);
+       gtk_container_add (GTK_CONTAINER (obj), priv->main_vbox);
 
 }
 
@@ -108,10 +140,10 @@ modest_shell_finalize (GObject *obj)
        G_OBJECT_CLASS(parent_class)->finalize (obj);
 }
 
-ModestWindowMgr*
+GtkWidget*
 modest_shell_new (void)
 {
-       return MODEST_WINDOW_MGR(g_object_new(MODEST_TYPE_SHELL, NULL));
+       return (GtkWidget *) g_object_new(MODEST_TYPE_SHELL, NULL);
 }
 
 ModestWindow *
@@ -120,7 +152,7 @@ modest_shell_peek_window (ModestShell *shell)
        ModestShellPrivate *priv;
        gint count;
 
-       priv = MODEST_SHELL_GET_PRIVATE(obj);
+       priv = MODEST_SHELL_GET_PRIVATE (shell);
        count = gtk_notebook_get_n_pages (GTK_NOTEBOOK (priv->notebook));
 
        if (count > 0) {
@@ -136,8 +168,8 @@ modest_shell_delete_window (ModestShell *shell, ModestWindow *window)
        ModestShellPrivate *priv;
        gboolean ret_value;
 
-       priv = MODEST_SHELL_GET_PRIVATE(obj);
-       g_signal_emit (G_OBJECT (window), "delete-event", NULL, &ret_value);
+       priv = MODEST_SHELL_GET_PRIVATE (shell);
+       g_signal_emit_by_name (G_OBJECT (window), "delete-event", NULL, &ret_value);
        if (ret_value == FALSE) {
                gint page_num;
                
@@ -147,6 +179,8 @@ modest_shell_delete_window (ModestShell *shell, ModestWindow *window)
                }
        }
 
+       update_title (shell);
+
        return ret_value;
 }
 
@@ -155,6 +189,69 @@ modest_shell_add_window (ModestShell *shell, ModestWindow *window)
 {
        ModestShellPrivate *priv;
 
-       priv = MODEST_SHELL_GET_PRIVATE(obj);
+       priv = MODEST_SHELL_GET_PRIVATE (shell);
        gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook), GTK_WIDGET (window), NULL);
+       modest_shell_window_set_shell (MODEST_SHELL_WINDOW (window), shell);
+       update_title (shell);
+}
+
+gint
+modest_shell_count_windows (ModestShell *shell)
+{
+       ModestShellPrivate *priv;
+
+       priv = MODEST_SHELL_GET_PRIVATE (shell);
+
+       return gtk_notebook_get_n_pages (GTK_NOTEBOOK (priv->notebook));
+}
+
+void
+modest_shell_set_title (ModestShell *shell, ModestWindow *window, const gchar *title)
+{
+       ModestShellPrivate *priv;
+
+       priv = MODEST_SHELL_GET_PRIVATE (shell);
+
+       gtk_notebook_set_tab_label_text (GTK_NOTEBOOK (priv->notebook), GTK_WIDGET (window), title);
+
+       update_title (shell);
+}
+
+void
+modest_shell_show_progress (ModestShell *shell, ModestWindow *window, gboolean show)
+{
+}
+
+static void
+update_title (ModestShell *self)
+{
+       gint n_pages, i;
+       ModestShellPrivate *priv;
+       GtkWidget *child;
+       GString *subtitle_buffer;
+
+       priv = MODEST_SHELL_GET_PRIVATE (self);
+
+       n_pages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (priv->notebook));
+       if (n_pages == 0) {
+               gtk_label_set_text (GTK_LABEL (priv->title_label), "");
+               gtk_label_set_text (GTK_LABEL (priv->subtitle_label), "");
+               return;
+       }
+
+       child = gtk_notebook_get_nth_page (GTK_NOTEBOOK (priv->notebook), n_pages - 1);
+       gtk_label_set_text (GTK_LABEL (priv->title_label), 
+                           gtk_notebook_get_tab_label_text (GTK_NOTEBOOK (priv->notebook), child));
+
+       subtitle_buffer = g_string_new ("");
+       for (i = 0; i < n_pages - 1; i++) {
+               if (i != 0) {
+                       subtitle_buffer = g_string_append (subtitle_buffer, " / ");
+               }
+               subtitle_buffer = g_string_append (subtitle_buffer,
+                                                  gtk_notebook_get_tab_label_text (GTK_NOTEBOOK (priv->notebook), child));
+       }
+       gtk_label_set_text (GTK_LABEL (priv->title_label), 
+                           subtitle_buffer->str);
+       g_string_free (subtitle_buffer, TRUE);
 }