mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
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:
parent
b5f96d12fc
commit
b5c5dfdc06
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user