[balsa] * src/balsa-index.[ch]: switch between full and narrow index views. * src/main-window.[ch]: switch b



commit 855b3cf5c4537b30f3b7e0a0ad678db7cee9ae61
Author: Pawel Salek <pawsa theochem kth se>
Date:   Sat May 23 08:54:59 2009 +0200

    * src/balsa-index.[ch]: switch between full and narrow index views. * src/main-window.[ch]: switch between ordinary and wide-screen layouts. * src/save-restore.c: save the layout as an enum. * src/balsa-app.[ch]: set default layout. * src/pref-manager.c: main window layout type is a drop-down list now.
---
 ChangeLog          |    8 ++++
 src/balsa-app.c    |    2 +-
 src/balsa-app.h    |    2 +-
 src/balsa-index.c  |   25 +++++++++++++
 src/balsa-index.h  |    6 +++
 src/main-window.c  |  101 +++++++++++++++++++++++++++++++++++----------------
 src/main-window.h  |    4 +-
 src/pref-manager.c |   32 +++++++++++------
 src/save-restore.c |    8 +++-
 9 files changed, 139 insertions(+), 49 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index f9bcc79..b95b225 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2006-05-23  Pawel Salek
+
+	* src/balsa-index.[ch]: switch between full and narrow index views.
+	* src/main-window.[ch]: switch between ordinary and wide-screen layouts.
+	* src/save-restore.c: save the layout as an enum.
+	* src/balsa-app.[ch]: set default layout.
+	* src/pref-manager.c: main window layout type is a drop-down list now.
+	
 2009-05-13  Peter Bloomfield
 
 	* src/mailbox-node.c (find_dir), (balsa_mailbox_local_append):
diff --git a/src/balsa-app.c b/src/balsa-app.c
index 5dcff57..e2f97dd 100644
--- a/src/balsa-app.c
+++ b/src/balsa-app.c
@@ -328,7 +328,7 @@ balsa_app_init(void)
     balsa_app.expand_tree = FALSE;
     balsa_app.show_mblist = TRUE;
     balsa_app.show_notebook_tabs = FALSE;
-    balsa_app.alternative_layout = FALSE;
+    balsa_app.layout_type = LAYOUT_DEFAULT;
     balsa_app.view_message_on_open = TRUE;
     balsa_app.mw_action_after_move = NEXT_UNREAD;
 
diff --git a/src/balsa-app.h b/src/balsa-app.h
index 8e63aae..3ec852c 100644
--- a/src/balsa-app.h
+++ b/src/balsa-app.h
@@ -291,7 +291,7 @@ extern struct BalsaApplication {
     gboolean expand_tree;
     gboolean show_mblist;
     gboolean show_notebook_tabs;
-    gboolean alternative_layout;
+    enum { LAYOUT_DEFAULT, LAYOUT_WIDE_MSG, LAYOUT_WIDE_SCREEN } layout_type;
     gboolean view_message_on_open;
     gboolean pgdownmod;
     gint pgdown_percent;
diff --git a/src/balsa-index.c b/src/balsa-index.c
index 7765686..341376d 100644
--- a/src/balsa-index.c
+++ b/src/balsa-index.c
@@ -1054,6 +1054,31 @@ balsa_index_load_mailbox_node (BalsaIndex * index,
     return FALSE;
 }
 
+void
+balsa_index_set_width_preference(BalsaIndex *bindex,
+                                 BalsaIndexWidthPreference pref)
+{
+    GtkTreeView *tree_view;
+    gboolean visible;
+
+    if (pref == bindex->width_preference)
+        return;
+
+    bindex->width_preference = pref;
+    switch (pref) {
+    case BALSA_INDEX_NARROW: visible = FALSE; break;
+    default:
+    case BALSA_INDEX_WIDE:   visible = TRUE;  break;
+    }
+
+    tree_view = GTK_TREE_VIEW(bindex);
+    gtk_tree_view_column_set_visible
+        (gtk_tree_view_get_column(tree_view, LB_MBOX_MSGNO_COL), visible);
+    gtk_tree_view_column_set_visible
+        (gtk_tree_view_get_column(tree_view, LB_MBOX_ATTACH_COL), visible);
+    gtk_tree_view_column_set_visible
+        (gtk_tree_view_get_column(tree_view, LB_MBOX_SIZE_COL), visible);
+}
 
 /*
  * select message interfaces
diff --git a/src/balsa-index.h b/src/balsa-index.h
index e0e46e6..dc5ab15 100644
--- a/src/balsa-index.h
+++ b/src/balsa-index.h
@@ -39,6 +39,9 @@ extern "C" {
 #define BALSA_IS_INDEX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE (klass, BALSA_TYPE_INDEX))
 
 
+    typedef enum { BALSA_INDEX_WIDE, BALSA_INDEX_NARROW }
+        BalsaIndexWidthPreference;
+
     typedef struct _BalsaIndex BalsaIndex;
     typedef struct _BalsaIndexClass BalsaIndexClass;
 
@@ -71,6 +74,7 @@ extern "C" {
         gulong selection_changed_id;
 
 	LibBalsaMailboxSearchIter *search_iter;
+        BalsaIndexWidthPreference width_preference;
     };
 
     struct _BalsaIndexClass {
@@ -104,6 +108,8 @@ extern "C" {
     gboolean balsa_index_load_mailbox_node(BalsaIndex * bindex,
                                            BalsaMailboxNode * mbnode,
 					   GError **err);
+    void balsa_index_set_width_preference(BalsaIndex *bindex,
+                                          BalsaIndexWidthPreference pref);
     void balsa_index_scroll_on_open(BalsaIndex *index);
     void balsa_index_update_tree(BalsaIndex *bindex, gboolean expand);
     void balsa_index_set_threading_type(BalsaIndex * bindex, int thtype);
diff --git a/src/main-window.c b/src/main-window.c
index d71f5f7..a7582ee 100644
--- a/src/main-window.c
+++ b/src/main-window.c
@@ -996,8 +996,8 @@ bw_mblist_size_allocate_cb(GtkWidget * widget, GtkAllocation * alloc,
                            BalsaWindow * bw)
 {
     if (balsa_app.show_mblist && !balsa_app.mw_maximized)
-        balsa_app.mblist_width =
-            gtk_paned_get_position(GTK_PANED(bw->hpaned));
+        balsa_app.mblist_width = /* FIXME: this makes some assumptions... */
+            gtk_paned_get_position(GTK_PANED(bw->paned_master));
 }
 
 static GtkWidget *
@@ -1226,35 +1226,70 @@ static void
 bw_set_panes(BalsaWindow * window)
 {
     GtkWidget *index_widget = bw_create_index_widget(window);
-    window->vpaned = gtk_vpaned_new();
-    window->hpaned = gtk_hpaned_new();
-    gtk_paned_pack1(GTK_PANED(window->hpaned), bw_frame(window->mblist),
-                    TRUE, TRUE);
-    gtk_paned_pack2(GTK_PANED(window->vpaned), bw_frame(window->preview),
-                    TRUE, TRUE);
-    if (balsa_app.alternative_layout) {
+    GtkWidget *bindex;
+    BalsaIndexWidthPreference width_preference;
+
+    switch (balsa_app.layout_type) {
+    case LAYOUT_WIDE_MSG:
+	window->paned_master = gtk_vpaned_new();
+	window->paned_slave  = gtk_hpaned_new();
         if (window->content)
             gtk_container_remove(GTK_CONTAINER(window->vbox),
                                  window->content);
-        window->content = window->vpaned;
+        window->content = window->paned_master;
         gtk_box_pack_start(GTK_BOX(window->vbox), window->content,
                            TRUE, TRUE, 0);
-        gtk_paned_pack2(GTK_PANED(window->hpaned), bw_frame(index_widget),
-                        TRUE, TRUE);
-        gtk_paned_pack1(GTK_PANED(window->vpaned), window->hpaned,
-                        TRUE, TRUE);
-    } else {
+	gtk_paned_pack1(GTK_PANED(window->paned_slave),
+			bw_frame(window->mblist), TRUE, TRUE);
+        gtk_paned_pack2(GTK_PANED(window->paned_slave),
+			bw_frame(index_widget), TRUE, TRUE);
+        gtk_paned_pack1(GTK_PANED(window->paned_master),
+			window->paned_slave, TRUE, TRUE);
+	gtk_paned_pack2(GTK_PANED(window->paned_master),
+			bw_frame(window->preview), TRUE, TRUE);
+        width_preference = BALSA_INDEX_WIDE;
+	break;
+    case LAYOUT_WIDE_SCREEN:
+	window->paned_master = gtk_hpaned_new();
+	window->paned_slave  = gtk_hpaned_new();
         if (window->content)
             gtk_container_remove(GTK_CONTAINER(window->vbox),
                                  window->content);
-        window->content = window->hpaned;
+        window->content = window->paned_master;
         gtk_box_pack_start(GTK_BOX(window->vbox), window->content,
                            TRUE, TRUE, 0);
-        gtk_paned_pack2(GTK_PANED(window->hpaned), window->vpaned,
+	gtk_paned_pack1(GTK_PANED(window->paned_master),
+                        bw_frame(window->mblist), TRUE, TRUE);
+        gtk_paned_pack2(GTK_PANED(window->paned_master), window->paned_slave,
                         TRUE, TRUE);
-        gtk_paned_pack1(GTK_PANED(window->vpaned), bw_frame(index_widget),
+        gtk_paned_pack1(GTK_PANED(window->paned_slave),
+                        bw_frame(index_widget), TRUE, TRUE);
+	gtk_paned_pack2(GTK_PANED(window->paned_slave),
+                        bw_frame(window->preview), TRUE, TRUE);
+        width_preference = BALSA_INDEX_NARROW;
+	break;
+    case LAYOUT_DEFAULT:
+    default:
+	window->paned_master = gtk_hpaned_new();
+	window->paned_slave  = gtk_vpaned_new();
+        if (window->content)
+            gtk_container_remove(GTK_CONTAINER(window->vbox),
+                                 window->content);
+        window->content = window->paned_master;
+        gtk_box_pack_start(GTK_BOX(window->vbox), window->content,
+                           TRUE, TRUE, 0);
+	gtk_paned_pack1(GTK_PANED(window->paned_master),
+                        bw_frame(window->mblist), TRUE, TRUE);
+        gtk_paned_pack2(GTK_PANED(window->paned_master), window->paned_slave,
                         TRUE, TRUE);
+        gtk_paned_pack1(GTK_PANED(window->paned_slave),
+                        bw_frame(index_widget), TRUE, TRUE);
+	gtk_paned_pack2(GTK_PANED(window->paned_slave),
+                        bw_frame(window->preview), TRUE, TRUE);
+        width_preference = BALSA_INDEX_WIDE;
     }
+    if ( (bindex=balsa_window_find_current_index(window)) != NULL)
+        balsa_index_set_width_preference(BALSA_INDEX(bindex), width_preference);
 }
 
 /*
@@ -1702,21 +1737,21 @@ balsa_window_new()
     bw_set_active(window, "ShowMailboxTree", balsa_app.show_mblist, FALSE);
 #endif                          /* !defined(ENABLE_TOUCH_UI) */
 
-    gtk_paned_set_position(GTK_PANED(window->hpaned), 
+    gtk_paned_set_position(GTK_PANED(window->paned_master), 
                            balsa_app.show_mblist 
                            ? balsa_app.mblist_width
                            : 0);
 
     /*PKGW: do it this way, without the usizes. */
     if (balsa_app.previewpane)
-        gtk_paned_set_position(GTK_PANED(window->vpaned),
+        gtk_paned_set_position(GTK_PANED(window->paned_slave),
                                balsa_app.notebook_height);
     else
         /* Set it to something really high */
-        gtk_paned_set_position(GTK_PANED(window->vpaned), G_MAXINT);
+        gtk_paned_set_position(GTK_PANED(window->paned_slave), G_MAXINT);
 
-    gtk_widget_show(window->vpaned);
-    gtk_widget_show(window->hpaned);
+    gtk_widget_show(window->paned_slave);
+    gtk_widget_show(window->paned_master);
     gtk_widget_show(window->notebook);
 
     /* set the toolbar style */
@@ -2247,6 +2282,10 @@ bw_real_open_mbnode(struct bw_open_mbnode_info * info)
     }
 
     index = BALSA_INDEX(balsa_index_new());
+    balsa_index_set_width_preference
+        (index,
+         (balsa_app.layout_type == LAYOUT_WIDE_SCREEN)
+         ? BALSA_INDEX_NARROW : BALSA_INDEX_WIDE);
 
     message = g_strdup_printf(_("Opening %s"), mailbox->name);
     balsa_window_increase_activity(info->window, message);
@@ -2506,7 +2545,6 @@ void
 balsa_window_refresh(BalsaWindow * window)
 {
     GtkWidget *index;
-    GtkWidget *paned;
     BalsaIndex *bindex;
 
     g_return_if_fail(window);
@@ -2520,15 +2558,14 @@ balsa_window_refresh(BalsaWindow * window)
         balsa_index_refresh_size(bindex);
 
     }
-    paned = gtk_widget_get_ancestor(balsa_app.notebook, GTK_TYPE_VPANED);
-    g_assert(paned != NULL);
     if (balsa_app.previewpane) {
         bw_idle_replace(window, bindex);
-	gtk_paned_set_position(GTK_PANED(paned), balsa_app.notebook_height);
+	gtk_paned_set_position(GTK_PANED(window->paned_slave),
+                                balsa_app.notebook_height);
     } else {
 	/* Set the height to something really big (those new hi-res
 	   screens and all :) */
-	gtk_paned_set_position(GTK_PANED(paned), G_MAXINT);
+	gtk_paned_set_position(GTK_PANED(window->paned_slave), G_MAXINT);
     }
 }
 
@@ -4596,12 +4633,12 @@ balsa_change_window_layout(BalsaWindow *window)
     gtk_widget_unref(window->preview);
 #endif                          /* GTK_CHECK_VERSION(2, 11, 0) */
  
-    gtk_paned_set_position(GTK_PANED(window->hpaned), 
+    gtk_paned_set_position(GTK_PANED(window->paned_master), 
                            balsa_app.show_mblist 
                            ? balsa_app.mblist_width
                            : 0);
-    gtk_widget_show(window->vpaned);
-    gtk_widget_show(window->hpaned);
+    gtk_widget_show(window->paned_slave);
+    gtk_widget_show(window->paned_master);
 
 }
 
@@ -4612,7 +4649,7 @@ bw_notebook_size_allocate_cb(GtkWidget * notebook, GtkAllocation * alloc,
 {
     if (balsa_app.previewpane && !balsa_app.mw_maximized)
         balsa_app.notebook_height =
-            gtk_paned_get_position(GTK_PANED(bw->vpaned));
+            gtk_paned_get_position(GTK_PANED(bw->paned_slave));
 }
 
 static void
diff --git a/src/main-window.h b/src/main-window.h
index c439f1b..1b6564c 100644
--- a/src/main-window.h
+++ b/src/main-window.h
@@ -63,8 +63,8 @@ struct _BalsaWindow {
     GtkWidget *sos_entry;       /* SenderOrSubject filter entry */
     GtkWidget *notebook;
     GtkWidget *preview;		/* message is child */
-    GtkWidget *hpaned;
-    GtkWidget *vpaned;
+    GtkWidget *paned_master;
+    GtkWidget *paned_slave;
     GtkWidget *current_index;
     GtkWidget *filter_choice;
     GtkWidget *vbox;
diff --git a/src/pref-manager.c b/src/pref-manager.c
index 41e1a97..0102eee 100644
--- a/src/pref-manager.c
+++ b/src/pref-manager.c
@@ -107,7 +107,7 @@ typedef struct _PropertyUI {
     GtkWidget *action_after_move_menu;
 
     GtkWidget *previewpane;
-    GtkWidget *alternative_layout;
+    GtkWidget *layout_type;
     GtkWidget *view_message_on_open;
     GtkWidget *pgdownmod;
     GtkWidget *pgdown_percent;
@@ -325,6 +325,7 @@ static void pm_combo_box_set_level(GtkWidget * combo_box, gint level);
 static gint pm_combo_box_get_level(GtkWidget * combo_box);
 
     /* special helpers */
+static GtkWidget *create_layout_types_menu(void);
 static GtkWidget *create_action_after_move_menu(void);
 static GtkWidget *create_information_message_menu(void);
 static GtkWidget *create_mdn_reply_menu(void);
@@ -589,7 +590,7 @@ open_preferences_manager(GtkWidget * widget, gpointer data)
 
     g_signal_connect(G_OBJECT(pui->previewpane), "toggled",
                      G_CALLBACK(properties_modified_cb), property_box);
-    g_signal_connect(G_OBJECT(pui->alternative_layout), "toggled",
+    g_signal_connect(G_OBJECT(pui->layout_type), "changed",
                      G_CALLBACK(properties_modified_cb), property_box);
     g_signal_connect(G_OBJECT(pui->view_message_on_open), "toggled",
                      G_CALLBACK(properties_modified_cb), property_box);
@@ -806,6 +807,7 @@ apply_prefs(GtkDialog * pbox)
     gint i;
     GtkWidget *balsa_window;
     const gchar *tmp;
+    guint save_enum; /* FIXME: assumes that enums are unsigned */
     gboolean save_setting;
 
     /*
@@ -832,10 +834,10 @@ apply_prefs(GtkDialog * pbox)
     balsa_app.debug = GTK_TOGGLE_BUTTON(pui->debug)->active;
     balsa_app.previewpane = GTK_TOGGLE_BUTTON(pui->previewpane)->active;
 
-    save_setting = balsa_app.alternative_layout;
-    balsa_app.alternative_layout =
-        GTK_TOGGLE_BUTTON(pui->alternative_layout)->active;
-    if (balsa_app.alternative_layout != save_setting)
+    save_enum = balsa_app.layout_type;
+    balsa_app.layout_type =
+        pm_combo_box_get_level(pui->layout_type);
+    if (balsa_app.layout_type != save_enum)
         balsa_change_window_layout(balsa_app.main_window);
 
     balsa_app.view_message_on_open =
@@ -1067,9 +1069,7 @@ set_prefs(void)
 
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pui->previewpane),
                                  balsa_app.previewpane);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
-                                 (pui->alternative_layout),
-                                 balsa_app.alternative_layout);
+    pm_combo_box_set_level(pui->layout_type, balsa_app.layout_type);
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
                                  (pui->view_message_on_open),
                                  balsa_app.view_message_on_open);
@@ -2129,8 +2129,8 @@ main_window_group(GtkWidget * page)
         pm_group_add_check(group, _("Use preview pane"));
     pui->mblist_show_mb_content_info =
         pm_group_add_check(group, _("Show mailbox statistics in left pane"));
-    pui->alternative_layout =
-        pm_group_add_check(group, _("Use alternative main window layout"));
+    pui->layout_type = create_layout_types_menu();
+    pm_group_add(group, pui->layout_type, FALSE);
     pui->view_message_on_open =
         pm_group_add_check(group, _("Automatically view message "
                                     "when mailbox opened"));
@@ -3312,6 +3312,16 @@ convert_8bit_cb(GtkWidget * widget, GtkWidget * pbox)
 }
 
 static GtkWidget *
+create_layout_types_menu(void)
+{
+    GtkWidget *combo_box = pm_combo_box_new();
+    add_show_menu(_("Default layout"), NEXT_UNREAD, combo_box);
+    add_show_menu(_("Wide message layout"), NEXT, combo_box);
+    add_show_menu(_("Wide screen layout"), CLOSE, combo_box);
+    return combo_box;
+}
+
+static GtkWidget *
 create_action_after_move_menu(void)
 {
     GtkWidget *combo_box = pm_combo_box_new();
diff --git a/src/save-restore.c b/src/save-restore.c
index 3f012b5..dc8f3d2 100644
--- a/src/save-restore.c
+++ b/src/save-restore.c
@@ -778,7 +778,11 @@ config_global_load(void)
     balsa_app.show_notebook_tabs = libbalsa_conf_get_bool("ShowTabs=false");
 
     /* ... alternative layout of main window */
-    balsa_app.alternative_layout = libbalsa_conf_get_bool("AlternativeLayout=false");
+    balsa_app.layout_type = libbalsa_conf_get_int("LayoutType=0");
+    if (balsa_app.layout_type != LAYOUT_DEFAULT && 
+        balsa_app.layout_type != LAYOUT_WIDE_MSG &&
+        balsa_app.layout_type != LAYOUT_WIDE_SCREEN)
+        balsa_app.layout_type = LAYOUT_DEFAULT;
     balsa_app.view_message_on_open = libbalsa_conf_get_bool("ViewMessageOnOpen=true");
     balsa_app.pgdownmod = libbalsa_conf_get_bool("PageDownMod=false");
     balsa_app.pgdown_percent = libbalsa_conf_get_int("PageDownPercent=50");
@@ -1277,7 +1281,7 @@ config_save(void)
     libbalsa_conf_set_bool("ShowMailboxList", balsa_app.show_mblist);
     libbalsa_conf_set_bool("ShowTabs", balsa_app.show_notebook_tabs);
     libbalsa_conf_set_int("ProgressWindow", balsa_app.pwindow_option);
-    libbalsa_conf_set_bool("AlternativeLayout", balsa_app.alternative_layout);
+    libbalsa_conf_set_int("LayoutType",     balsa_app.layout_type);
     libbalsa_conf_set_bool("ViewMessageOnOpen", balsa_app.view_message_on_open);
     libbalsa_conf_set_bool("PageDownMod", balsa_app.pgdownmod);
     libbalsa_conf_set_int("PageDownPercent", balsa_app.pgdown_percent);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]