From cee079853211005c745b5d904c70094cfd669696 Mon Sep 17 00:00:00 2001 From: Derek Atkins Date: Tue, 28 May 2002 00:36:30 +0000 Subject: [PATCH] * src/app-utils/option-util.c: Add a function to reset all the gui widgets for an option-db, ignoring sections that begin "__". * dialog-options.c: remove all the 'set to default' buttons and add a single 'defaults' button in the dialog button box, which resets all the options to their default values. The user still has to 'apply' the changes to take effect. Also change "close" to "cancel". git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@6924 57a11ea4-9604-0410-9ed3-97b8803252fd --- ChangeLog | 11 +++ src/app-utils/option-util.c | 44 +++++++++ src/app-utils/option-util.h | 3 + src/gnome-utils/dialog-options.c | 155 ++++++++++++++++--------------- 4 files changed, 139 insertions(+), 74 deletions(-) diff --git a/ChangeLog b/ChangeLog index 59e86ac8d7..5508f5d74e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2002-05-27 Derek Atkins + + * src/app-utils/option-util.c: Add a function to reset all the gui + widgets for an option-db, ignoring sections that begin "__". + + * dialog-options.c: remove all the 'set to default' buttons and + add a single 'defaults' button in the dialog button box, which + resets all the options to their default values. The user still + has to 'apply' the changes to take effect. Also change "close" to + "cancel". + 2002-05-27 David Hampton * src/dialog-account/dialog-account.c: Sort the account type list diff --git a/src/app-utils/option-util.c b/src/app-utils/option-util.c index 4322aa2591..5c84c48f3e 100644 --- a/src/app-utils/option-util.c +++ b/src/app-utils/option-util.c @@ -1654,6 +1654,50 @@ gnc_option_db_commit(GNCOptionDB *odb) } +/********************************************************************\ + * gnc_option_db_reset_widgets * + * reset all option widgets to their default values. * + * * + * Args: odb - option database to reset * + * Return: nothing * +\********************************************************************/ +void +gnc_option_db_reset_widgets (GNCOptionDB *odb) +{ + GSList *section_node; + GSList *option_node; + GNCOptionSection *section; + GNCOption *option; + + g_return_if_fail (odb); + + for (section_node = odb->option_sections; + section_node != NULL; + section_node = section_node->next) + { + section = section_node->data; + + /* Don't reset "invisible" options. + * If the section name begins "__" we should not reset + */ + if (section->section_name == NULL || + strncmp (section->section_name, "__", 2) == 0) + continue; + + for (option_node = section->options; + option_node != NULL; + option_node = option_node->next) + { + option = option_node->data; + + gnc_option_set_ui_value (option, TRUE); + gnc_option_set_changed (option, TRUE); + + } + } +} + + /********************************************************************\ * gnc_option_db_get_default_section * * returns the malloc'd section name of the default section, * diff --git a/src/app-utils/option-util.h b/src/app-utils/option-util.h index d6e2b32cb8..b141811268 100644 --- a/src/app-utils/option-util.h +++ b/src/app-utils/option-util.h @@ -239,4 +239,7 @@ void gncp_option_db_register_option(GNCOptionDBHandle handle, void gncp_option_invoke_callback(GNCOptionChangeCallback callback, gpointer data); +/* Reset all the widgets to their default values */ +void gnc_option_db_reset_widgets (GNCOptionDB *odb); + #endif /* OPTION_UTIL_H */ diff --git a/src/gnome-utils/dialog-options.c b/src/gnome-utils/dialog-options.c index 456bb3f3df..0ad0d15c40 100644 --- a/src/gnome-utils/dialog-options.c +++ b/src/gnome-utils/dialog-options.c @@ -64,6 +64,9 @@ struct gnc_option_win GNCOptionWinCallback close_cb; gpointer close_cb_data; + + /* Hold onto this for a complete reset */ + GNCOptionDB * option_db; }; typedef enum { @@ -95,16 +98,44 @@ gnc_options_dialog_get_apply_button (GtkWidget *widget) return NULL; } +static GtkWidget * +gnc_options_dialog_get_cancel_button (GtkWidget *widget) +{ + while (widget) + { + GtkWidget *button; + + button = gtk_object_get_data (GTK_OBJECT (widget), + "gnc_option_cancel_button"); + if (button) + return button; + + widget = widget->parent; + } + + return NULL; +} + static void gnc_options_dialog_changed_internal (GtkWidget *widget) { GtkWidget *button; - button = gnc_options_dialog_get_apply_button (widget); - if (!button) - return; + do { + button = gnc_options_dialog_get_apply_button (widget); + if (!button) + break; - gtk_widget_set_sensitive (button, TRUE); + gtk_widget_set_sensitive (button, TRUE); + } while (FALSE); + + do { + button = gnc_options_dialog_get_cancel_button (widget); + if (!button) + break; + + gtk_widget_set_sensitive (button, TRUE); + } while (FALSE); } static void @@ -112,11 +143,21 @@ gnc_options_dialog_clear_changed (GtkWidget *widget) { GtkWidget *button; - button = gnc_options_dialog_get_apply_button (widget); - if (!button) - return; + do { + button = gnc_options_dialog_get_apply_button (widget); + if (!button) + break;; - gtk_widget_set_sensitive (button, FALSE); + gtk_widget_set_sensitive (button, FALSE); + } while (FALSE); + + do { + button = gnc_options_dialog_get_cancel_button (widget); + if (!button) + break;; + + gtk_widget_set_sensitive (button, FALSE); + } while (FALSE); } void @@ -319,7 +360,6 @@ gnc_option_set_selectable_internal (GNCOption *option, gboolean selectable) gtk_widget_set_sensitive (widget, selectable); } - static void default_button_cb(GtkButton *button, gpointer data) { @@ -332,22 +372,6 @@ default_button_cb(GtkButton *button, gpointer data) gnc_options_dialog_changed_internal (GTK_WIDGET(button)); } -static GtkWidget * -gnc_option_create_default_button(GNCOption *option, GtkTooltips *tooltips) -{ - GtkWidget *default_button = gtk_button_new_with_label(_("Set to default")); - - gtk_container_set_border_width(GTK_CONTAINER(default_button), 2); - - gtk_signal_connect(GTK_OBJECT(default_button), "clicked", - GTK_SIGNAL_FUNC(default_button_cb), option); - - gtk_tooltips_set_tip(tooltips, default_button, - _("Set the option to its default value"), NULL); - - return default_button; -} - static void gnc_option_toggled_cb(GtkToggleButton *button, gpointer data) { @@ -1104,6 +1128,7 @@ gnc_build_options_dialog_contents(GNCOptionWin *propertybox, gnc_option_set_selectable_internal); propertybox->tips = gtk_tooltips_new(); + propertybox->option_db = odb; gtk_object_ref (GTK_OBJECT (propertybox->tips)); gtk_object_sink (GTK_OBJECT (propertybox->tips)); @@ -1161,14 +1186,11 @@ static void gnc_options_dialog_apply_stub_cb(GtkWidget * w, gpointer data) { GNCOptionWin * window = data; - GtkWidget *button; if (window->apply_cb) window->apply_cb (window, window->apply_cb_data); - button = gnc_options_dialog_get_apply_button (window->container); - if (button) - gtk_widget_set_sensitive (button, FALSE); + gnc_options_dialog_clear_changed (window->container); } static void @@ -1188,7 +1210,7 @@ gnc_options_dialog_destroy_stub_cb(GtkObject * obj, gpointer data) { } static void -gnc_options_dialog_close_stub_cb(GtkWidget * w, gpointer data) { +gnc_options_dialog_cancel_stub_cb(GtkWidget * w, gpointer data) { GNCOptionWin * window = data; GtkWidget *container; @@ -1219,7 +1241,19 @@ gnc_options_dialog_close_stub_cb(GtkWidget * w, gpointer data) { static void gnc_options_dialog_ok_cb(GtkWidget * w, gpointer data) { gnc_options_dialog_apply_stub_cb(w, data); - gnc_options_dialog_close_stub_cb(w, data); + gnc_options_dialog_cancel_stub_cb(w, data); +} + +static void +gnc_options_dialog_reset_cb(GtkWidget * w, gpointer data) +{ + GNCOptionWin *win = data; + + g_return_if_fail (win); + g_return_if_fail (win->option_db); + + gnc_option_db_reset_widgets (win->option_db); + gnc_options_dialog_changed_internal (win->container); } GNCOptionWin * @@ -1231,7 +1265,8 @@ gnc_options_dialog_new(gboolean make_toplevel, gchar *title) { GtkWidget * ok_button=NULL; GtkWidget * apply_button=NULL; GtkWidget * help_button=NULL; - GtkWidget * close_button=NULL; + GtkWidget * cancel_button=NULL; + GtkWidget * reset_button=NULL; retval->toplevel = make_toplevel; @@ -1263,13 +1298,18 @@ gnc_options_dialog_new(gboolean make_toplevel, gchar *title) { apply_button = gnome_stock_button (GNOME_STOCK_BUTTON_APPLY); help_button = gnome_stock_button (GNOME_STOCK_BUTTON_HELP); ok_button = gnome_stock_button (GNOME_STOCK_BUTTON_OK); - close_button = gnome_stock_button (GNOME_STOCK_BUTTON_CLOSE); + cancel_button = gnome_stock_button (GNOME_STOCK_BUTTON_CANCEL); + reset_button = gtk_button_new_with_label (_("Defaults")); gtk_widget_set_sensitive (apply_button, FALSE); + gtk_widget_set_sensitive (cancel_button, FALSE); gtk_object_set_data (GTK_OBJECT (retval->container), "gnc_option_apply_button", apply_button); + gtk_object_set_data (GTK_OBJECT (retval->container), + "gnc_option_cancel_button", cancel_button); + gtk_signal_connect(GTK_OBJECT(apply_button), "clicked", GTK_SIGNAL_FUNC(gnc_options_dialog_apply_stub_cb), retval); @@ -1282,8 +1322,12 @@ gnc_options_dialog_new(gboolean make_toplevel, gchar *title) { GTK_SIGNAL_FUNC(gnc_options_dialog_ok_cb), retval); - gtk_signal_connect(GTK_OBJECT(close_button), "clicked", - GTK_SIGNAL_FUNC(gnc_options_dialog_close_stub_cb), + gtk_signal_connect(GTK_OBJECT(cancel_button), "clicked", + GTK_SIGNAL_FUNC(gnc_options_dialog_cancel_stub_cb), + retval); + + gtk_signal_connect(GTK_OBJECT(reset_button), "clicked", + GTK_SIGNAL_FUNC(gnc_options_dialog_reset_cb), retval); gtk_signal_connect(GTK_OBJECT(retval->container), "destroy", @@ -1292,8 +1336,9 @@ gnc_options_dialog_new(gboolean make_toplevel, gchar *title) { gtk_box_pack_start(GTK_BOX(buttonbox), ok_button, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(buttonbox), apply_button, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(buttonbox), cancel_button, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(buttonbox), help_button, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(buttonbox), close_button, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(buttonbox), reset_button, TRUE, TRUE, 0); retval->notebook = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX(vbox), retval->notebook, TRUE, TRUE, 0); @@ -1473,9 +1518,6 @@ gnc_option_set_ui_widget_boolean (GNCOption *option, GtkBox *page_box, GTK_SIGNAL_FUNC(gnc_option_toggled_cb), option); gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0); - gtk_box_pack_end(GTK_BOX(*enclosing), - gnc_option_create_default_button(option, tooltips), - FALSE, FALSE, 0); gtk_widget_show_all(*enclosing); return value; @@ -1508,9 +1550,6 @@ gnc_option_set_ui_widget_string (GNCOption *option, GtkBox *page_box, gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0); - gtk_box_pack_end(GTK_BOX(*enclosing), - gnc_option_create_default_button(option, tooltips), - FALSE, FALSE, 0); gtk_widget_show_all(*enclosing); return value; } @@ -1550,9 +1589,6 @@ gnc_option_set_ui_widget_text (GNCOption *option, GtkBox *page_box, GTK_SIGNAL_FUNC(gnc_option_changed_cb), option); gtk_box_pack_start(GTK_BOX(*enclosing), frame, TRUE, TRUE, 0); - gtk_box_pack_end(GTK_BOX(*enclosing), - gnc_option_create_default_button(option, tooltips), - FALSE, FALSE, 0); gtk_widget_show_all(*enclosing); return value; } @@ -1588,9 +1624,6 @@ gnc_option_set_ui_widget_currency (GNCOption *option, GtkBox *page_box, gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0); - gtk_box_pack_end(GTK_BOX(*enclosing), - gnc_option_create_default_button(option, tooltips), - FALSE, FALSE, 0); gtk_widget_show_all(*enclosing); return value; } @@ -1629,9 +1662,6 @@ gnc_option_set_ui_widget_commodity (GNCOption *option, GtkBox *page_box, gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0); - gtk_box_pack_end(GTK_BOX(*enclosing), - gnc_option_create_default_button(option, tooltips), - FALSE, FALSE, 0); gtk_widget_show_all(*enclosing); return value; } @@ -1660,9 +1690,6 @@ gnc_option_set_ui_widget_multichoice (GNCOption *option, GtkBox *page_box, gnc_option_set_ui_value(option, FALSE); gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0); - gtk_box_pack_end(GTK_BOX(*enclosing), - gnc_option_create_default_button(option, tooltips), - FALSE, FALSE, 0); gtk_widget_show_all(*enclosing); return value; } @@ -1691,9 +1718,6 @@ gnc_option_set_ui_widget_date (GNCOption *option, GtkBox *page_box, gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0); - gtk_box_pack_end(GTK_BOX(*enclosing), - gnc_option_create_default_button(option, tooltips), - FALSE, FALSE, 0); gtk_box_pack_start(page_box, *enclosing, FALSE, FALSE, 5); *packed = TRUE; @@ -1849,9 +1873,6 @@ gnc_option_set_ui_widget_number_range (GNCOption *option, GtkBox *page_box, gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0); - gtk_box_pack_end(GTK_BOX(*enclosing), - gnc_option_create_default_button(option, tooltips), - FALSE, FALSE, 0); gtk_widget_show_all(*enclosing); return value; } @@ -1889,9 +1910,6 @@ gnc_option_set_ui_widget_color (GNCOption *option, GtkBox *page_box, gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0); - gtk_box_pack_end(GTK_BOX(*enclosing), - gnc_option_create_default_button(option, tooltips), - FALSE, FALSE, 0); gtk_widget_show_all(*enclosing); return value; } @@ -1926,9 +1944,6 @@ gnc_option_set_ui_widget_font (GNCOption *option, GtkBox *page_box, gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0); - gtk_box_pack_end(GTK_BOX(*enclosing), - gnc_option_create_default_button(option, tooltips), - FALSE, FALSE, 0); gtk_widget_show_all(*enclosing); return value; } @@ -1942,7 +1957,6 @@ gnc_option_set_ui_widget_pixmap (GNCOption *option, GtkBox *page_box, { GtkWidget *value; GtkWidget *label; - GtkWidget *default_button; gchar *colon_name; colon_name = g_strconcat(name, ":", NULL); @@ -1967,12 +1981,8 @@ gnc_option_set_ui_widget_pixmap (GNCOption *option, GtkBox *page_box, gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0); - default_button = gnc_option_create_default_button(option, tooltips); - gtk_box_pack_end(GTK_BOX(*enclosing), default_button, FALSE, FALSE, 0); - gtk_widget_show(value); gtk_widget_show(label); - gtk_widget_show(default_button); gtk_widget_show(*enclosing); return value; } @@ -1993,9 +2003,6 @@ gnc_option_set_ui_widget_radiobutton (GNCOption *option, GtkBox *page_box, gnc_option_set_ui_value(option, FALSE); gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0); - gtk_box_pack_end(GTK_BOX(*enclosing), - gnc_option_create_default_button(option, tooltips), - FALSE, FALSE, 0); gtk_widget_show_all(*enclosing); return value; }