* 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
This commit is contained in:
Derek Atkins 2002-05-28 00:36:30 +00:00
parent 3aba7c050d
commit cee0798532
4 changed files with 139 additions and 74 deletions

View File

@ -1,3 +1,14 @@
2002-05-27 Derek Atkins <derek@ihtfp.com>
* 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 <hampton@employees.org> 2002-05-27 David Hampton <hampton@employees.org>
* src/dialog-account/dialog-account.c: Sort the account type list * src/dialog-account/dialog-account.c: Sort the account type list

View File

@ -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 * * gnc_option_db_get_default_section *
* returns the malloc'd section name of the default section, * * returns the malloc'd section name of the default section, *

View File

@ -239,4 +239,7 @@ void gncp_option_db_register_option(GNCOptionDBHandle handle,
void gncp_option_invoke_callback(GNCOptionChangeCallback callback, void gncp_option_invoke_callback(GNCOptionChangeCallback callback,
gpointer data); gpointer data);
/* Reset all the widgets to their default values */
void gnc_option_db_reset_widgets (GNCOptionDB *odb);
#endif /* OPTION_UTIL_H */ #endif /* OPTION_UTIL_H */

View File

@ -64,6 +64,9 @@ struct gnc_option_win
GNCOptionWinCallback close_cb; GNCOptionWinCallback close_cb;
gpointer close_cb_data; gpointer close_cb_data;
/* Hold onto this for a complete reset */
GNCOptionDB * option_db;
}; };
typedef enum { typedef enum {
@ -95,16 +98,44 @@ gnc_options_dialog_get_apply_button (GtkWidget *widget)
return NULL; 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 static void
gnc_options_dialog_changed_internal (GtkWidget *widget) gnc_options_dialog_changed_internal (GtkWidget *widget)
{ {
GtkWidget *button; GtkWidget *button;
do {
button = gnc_options_dialog_get_apply_button (widget); button = gnc_options_dialog_get_apply_button (widget);
if (!button) if (!button)
return; 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 static void
@ -112,11 +143,21 @@ gnc_options_dialog_clear_changed (GtkWidget *widget)
{ {
GtkWidget *button; GtkWidget *button;
do {
button = gnc_options_dialog_get_apply_button (widget); button = gnc_options_dialog_get_apply_button (widget);
if (!button) if (!button)
return; 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 void
@ -319,7 +360,6 @@ gnc_option_set_selectable_internal (GNCOption *option, gboolean selectable)
gtk_widget_set_sensitive (widget, selectable); gtk_widget_set_sensitive (widget, selectable);
} }
static void static void
default_button_cb(GtkButton *button, gpointer data) 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)); 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 static void
gnc_option_toggled_cb(GtkToggleButton *button, gpointer data) gnc_option_toggled_cb(GtkToggleButton *button, gpointer data)
{ {
@ -1104,6 +1128,7 @@ gnc_build_options_dialog_contents(GNCOptionWin *propertybox,
gnc_option_set_selectable_internal); gnc_option_set_selectable_internal);
propertybox->tips = gtk_tooltips_new(); propertybox->tips = gtk_tooltips_new();
propertybox->option_db = odb;
gtk_object_ref (GTK_OBJECT (propertybox->tips)); gtk_object_ref (GTK_OBJECT (propertybox->tips));
gtk_object_sink (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) gnc_options_dialog_apply_stub_cb(GtkWidget * w, gpointer data)
{ {
GNCOptionWin * window = data; GNCOptionWin * window = data;
GtkWidget *button;
if (window->apply_cb) if (window->apply_cb)
window->apply_cb (window, window->apply_cb_data); window->apply_cb (window, window->apply_cb_data);
button = gnc_options_dialog_get_apply_button (window->container); gnc_options_dialog_clear_changed (window->container);
if (button)
gtk_widget_set_sensitive (button, FALSE);
} }
static void static void
@ -1188,7 +1210,7 @@ gnc_options_dialog_destroy_stub_cb(GtkObject * obj, gpointer data) {
} }
static void 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; GNCOptionWin * window = data;
GtkWidget *container; GtkWidget *container;
@ -1219,7 +1241,19 @@ gnc_options_dialog_close_stub_cb(GtkWidget * w, gpointer data) {
static void static void
gnc_options_dialog_ok_cb(GtkWidget * w, gpointer data) { gnc_options_dialog_ok_cb(GtkWidget * w, gpointer data) {
gnc_options_dialog_apply_stub_cb(w, 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 * GNCOptionWin *
@ -1231,7 +1265,8 @@ gnc_options_dialog_new(gboolean make_toplevel, gchar *title) {
GtkWidget * ok_button=NULL; GtkWidget * ok_button=NULL;
GtkWidget * apply_button=NULL; GtkWidget * apply_button=NULL;
GtkWidget * help_button=NULL; GtkWidget * help_button=NULL;
GtkWidget * close_button=NULL; GtkWidget * cancel_button=NULL;
GtkWidget * reset_button=NULL;
retval->toplevel = make_toplevel; 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); apply_button = gnome_stock_button (GNOME_STOCK_BUTTON_APPLY);
help_button = gnome_stock_button (GNOME_STOCK_BUTTON_HELP); help_button = gnome_stock_button (GNOME_STOCK_BUTTON_HELP);
ok_button = gnome_stock_button (GNOME_STOCK_BUTTON_OK); 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 (apply_button, FALSE);
gtk_widget_set_sensitive (cancel_button, FALSE);
gtk_object_set_data (GTK_OBJECT (retval->container), gtk_object_set_data (GTK_OBJECT (retval->container),
"gnc_option_apply_button", apply_button); "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_connect(GTK_OBJECT(apply_button), "clicked",
GTK_SIGNAL_FUNC(gnc_options_dialog_apply_stub_cb), GTK_SIGNAL_FUNC(gnc_options_dialog_apply_stub_cb),
retval); retval);
@ -1282,8 +1322,12 @@ gnc_options_dialog_new(gboolean make_toplevel, gchar *title) {
GTK_SIGNAL_FUNC(gnc_options_dialog_ok_cb), GTK_SIGNAL_FUNC(gnc_options_dialog_ok_cb),
retval); retval);
gtk_signal_connect(GTK_OBJECT(close_button), "clicked", gtk_signal_connect(GTK_OBJECT(cancel_button), "clicked",
GTK_SIGNAL_FUNC(gnc_options_dialog_close_stub_cb), 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); retval);
gtk_signal_connect(GTK_OBJECT(retval->container), "destroy", 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), ok_button, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(buttonbox), apply_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), 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(); retval->notebook = gtk_notebook_new();
gtk_box_pack_start(GTK_BOX(vbox), retval->notebook, TRUE, TRUE, 0); 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_SIGNAL_FUNC(gnc_option_toggled_cb), option);
gtk_box_pack_start(GTK_BOX(*enclosing), value, 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); gtk_widget_show_all(*enclosing);
return value; 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), label, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(*enclosing), value, 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); gtk_widget_show_all(*enclosing);
return value; 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_SIGNAL_FUNC(gnc_option_changed_cb), option);
gtk_box_pack_start(GTK_BOX(*enclosing), frame, TRUE, TRUE, 0); 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); gtk_widget_show_all(*enclosing);
return value; 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), label, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(*enclosing), value, 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); gtk_widget_show_all(*enclosing);
return value; 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), label, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(*enclosing), value, 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); gtk_widget_show_all(*enclosing);
return value; return value;
} }
@ -1660,9 +1690,6 @@ gnc_option_set_ui_widget_multichoice (GNCOption *option, GtkBox *page_box,
gnc_option_set_ui_value(option, FALSE); 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), label, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(*enclosing), value, 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); gtk_widget_show_all(*enclosing);
return value; 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), label, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(*enclosing), value, 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); gtk_box_pack_start(page_box, *enclosing, FALSE, FALSE, 5);
*packed = TRUE; *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), label, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(*enclosing), value, 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); gtk_widget_show_all(*enclosing);
return value; 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), label, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(*enclosing), value, 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); gtk_widget_show_all(*enclosing);
return value; 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), label, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(*enclosing), value, 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); gtk_widget_show_all(*enclosing);
return value; return value;
} }
@ -1942,7 +1957,6 @@ gnc_option_set_ui_widget_pixmap (GNCOption *option, GtkBox *page_box,
{ {
GtkWidget *value; GtkWidget *value;
GtkWidget *label; GtkWidget *label;
GtkWidget *default_button;
gchar *colon_name; gchar *colon_name;
colon_name = g_strconcat(name, ":", NULL); 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), label, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(*enclosing), value, 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(value);
gtk_widget_show(label); gtk_widget_show(label);
gtk_widget_show(default_button);
gtk_widget_show(*enclosing); gtk_widget_show(*enclosing);
return value; return value;
} }
@ -1993,9 +2003,6 @@ gnc_option_set_ui_widget_radiobutton (GNCOption *option, GtkBox *page_box,
gnc_option_set_ui_value(option, FALSE); gnc_option_set_ui_value(option, FALSE);
gtk_box_pack_start(GTK_BOX(*enclosing), value, 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); gtk_widget_show_all(*enclosing);
return value; return value;
} }