Use a selection list if a prefs dialog has more than four pages.

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@6936 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
David Hampton 2002-06-01 08:10:09 +00:00
parent b5f96d12fc
commit b5c5dfdc06

View File

@ -45,12 +45,19 @@
/* This static indicates the debugging module that this .o belongs to. */ /* This static indicates the debugging module that this .o belongs to. */
static short module = MOD_GUI; static short module = MOD_GUI;
/*
* Point where preferences switch control method from a set of
* notebook tabs to a list.
*/
#define MAX_TAB_COUNT 4
static GHashTable *optionTable = NULL; static GHashTable *optionTable = NULL;
struct gnc_option_win struct gnc_option_win
{ {
GtkWidget * container; GtkWidget * container;
GtkWidget * notebook; GtkWidget * notebook;
GtkWidget * page_list;
gboolean toplevel; gboolean toplevel;
@ -677,7 +684,7 @@ gnc_option_create_radiobutton_widget(char *name, GNCOption *option)
frame = gtk_frame_new (name); frame = gtk_frame_new (name);
/* Create the button box */ /* Create the button box */
box = gtk_vbutton_box_new (); box = gtk_hbox_new (FALSE, 5);
gtk_container_add (GTK_CONTAINER (frame), box); gtk_container_add (GTK_CONTAINER (frame), box);
/* Create the tooltips */ /* Create the tooltips */
@ -1065,9 +1072,10 @@ gnc_options_dialog_append_page(GNCOptionWin * propertybox,
GNCOption *option; GNCOption *option;
GtkWidget *page_label; GtkWidget *page_label;
GtkWidget *page_content_box; GtkWidget *page_content_box;
GtkWidget *listitem;
gint num_options; gint num_options;
const char *name; const char *name;
gint i; gint i, page_count;
name = gnc_option_section_name(section); name = gnc_option_section_name(section);
if (!name) if (!name)
@ -1086,6 +1094,10 @@ gnc_options_dialog_append_page(GNCOptionWin * propertybox,
gtk_notebook_append_page(GTK_NOTEBOOK(propertybox->notebook), gtk_notebook_append_page(GTK_NOTEBOOK(propertybox->notebook),
page_content_box, page_label); page_content_box, page_label);
listitem = gtk_list_item_new_with_label(_(name));
gtk_widget_show(listitem);
gtk_container_add(GTK_CONTAINER(propertybox->page_list), listitem);
num_options = gnc_option_section_num_options(section); num_options = gnc_option_section_num_options(section);
for (i = 0; i < num_options; i++) for (i = 0; i < num_options; i++)
{ {
@ -1094,8 +1106,16 @@ gnc_options_dialog_append_page(GNCOptionWin * propertybox,
propertybox->tips); propertybox->tips);
} }
return gtk_notebook_page_num(GTK_NOTEBOOK(propertybox->notebook), page_count = gtk_notebook_page_num(GTK_NOTEBOOK(propertybox->notebook),
page_content_box); page_content_box);
if (page_count > MAX_TAB_COUNT - 1) { /* Convert 1-based -> 0-based */
gtk_widget_show(propertybox->page_list);
gtk_notebook_set_show_tabs(GTK_NOTEBOOK(propertybox->notebook), FALSE);
gtk_notebook_set_show_border(GTK_NOTEBOOK(propertybox->notebook), FALSE);
}
return(page_count);
} }
@ -1148,9 +1168,6 @@ gnc_build_options_dialog_contents(GNCOptionWin *propertybox,
default_page = page; default_page = page;
} }
if (default_page >= 0)
gtk_notebook_set_page(GTK_NOTEBOOK(propertybox->notebook), default_page);
if (default_section_name != NULL) if (default_section_name != NULL)
free(default_section_name); free(default_section_name);
@ -1168,6 +1185,13 @@ gnc_build_options_dialog_contents(GNCOptionWin *propertybox,
} }
} }
if (default_page >= 0) {
gtk_notebook_set_page(GTK_NOTEBOOK(propertybox->notebook), default_page);
gtk_list_select_item(GTK_LIST(propertybox->page_list), default_page);
} else {
/* GTKList doesn't default to selecting the first item. */
gtk_list_select_item(GTK_LIST(propertybox->page_list), 0);
}
gnc_options_dialog_clear_changed(propertybox->container); gnc_options_dialog_clear_changed(propertybox->container);
} }
@ -1256,10 +1280,25 @@ gnc_options_dialog_reset_cb(GtkWidget * w, gpointer data)
gnc_options_dialog_changed_internal (win->container); gnc_options_dialog_changed_internal (win->container);
} }
static void
gnc_options_dialog_list_select_cb(GtkWidget * list, GtkWidget * item,
gpointer data)
{
GNCOptionWin * win = data;
gint index;
g_return_if_fail (list);
g_return_if_fail (win);
index = gtk_list_child_position(GTK_LIST(list), item);
gtk_notebook_set_page(GTK_NOTEBOOK(win->notebook), index);
}
GNCOptionWin * GNCOptionWin *
gnc_options_dialog_new(gboolean make_toplevel, gchar *title) { gnc_options_dialog_new(gboolean make_toplevel, gchar *title) {
GNCOptionWin * retval = g_new0(GNCOptionWin, 1); GNCOptionWin * retval = g_new0(GNCOptionWin, 1);
GtkWidget * vbox; GtkWidget * vbox;
GtkWidget * hbox;
GtkWidget * buttonbox; GtkWidget * buttonbox;
GtkWidget * ok_button=NULL; GtkWidget * ok_button=NULL;
@ -1271,6 +1310,7 @@ gnc_options_dialog_new(gboolean make_toplevel, gchar *title) {
retval->toplevel = make_toplevel; retval->toplevel = make_toplevel;
vbox = gtk_vbox_new(FALSE, 5); vbox = gtk_vbox_new(FALSE, 5);
hbox = gtk_hbox_new(FALSE, 5);
if(make_toplevel) { if(make_toplevel) {
retval->container = gtk_window_new(GDK_WINDOW_TOPLEVEL); retval->container = gtk_window_new(GDK_WINDOW_TOPLEVEL);
@ -1340,9 +1380,16 @@ gnc_options_dialog_new(gboolean make_toplevel, gchar *title) {
gtk_box_pack_start(GTK_BOX(buttonbox), help_button, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(buttonbox), help_button, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(buttonbox), reset_button, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(buttonbox), reset_button, TRUE, TRUE, 0);
retval->page_list = gtk_list_new();
gtk_signal_connect(GTK_OBJECT(retval->page_list), "select_child",
GTK_SIGNAL_FUNC(gnc_options_dialog_list_select_cb),
retval);
retval->notebook = gtk_notebook_new(); retval->notebook = gtk_notebook_new();
gtk_box_pack_start(GTK_BOX(vbox), retval->notebook, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(hbox), retval->page_list, TRUE, TRUE, 5);
gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(buttonbox), FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(hbox), retval->notebook, TRUE, TRUE, 5);
gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 5);
gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(buttonbox), FALSE, TRUE, 5);
if(make_toplevel) { if(make_toplevel) {
gtk_container_add(GTK_CONTAINER(retval->container), vbox); gtk_container_add(GTK_CONTAINER(retval->container), vbox);
@ -1354,6 +1401,9 @@ gnc_options_dialog_new(gboolean make_toplevel, gchar *title) {
gtk_widget_show_all(retval->container); gtk_widget_show_all(retval->container);
} }
/* Hide list until there are "too many" tabs. */
gtk_widget_hide(retval->page_list);
return retval; return retval;
} }