From 207bedb4c5845291b440a5d115a6734c8f947ebe Mon Sep 17 00:00:00 2001 From: John Ralls Date: Thu, 1 May 2014 12:47:17 -0700 Subject: [PATCH] Replace direct kvp access with qof_book_save_options. --- src/gnome/assistant-hierarchy.c | 72 +++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/src/gnome/assistant-hierarchy.c b/src/gnome/assistant-hierarchy.c index 34eeed7c21..0e277c9c57 100644 --- a/src/gnome/assistant-hierarchy.c +++ b/src/gnome/assistant-hierarchy.c @@ -1004,6 +1004,26 @@ on_cancel (GtkAssistant *gtkassistant, gnc_resume_gui_refresh (); } +static void +finish_book_options_helper(GNCOptionWin * optionwin, + gpointer user_data) +{ + GNCOptionDB * options = user_data; + QofBook *book = gnc_get_current_book (); + gboolean use_split_action_for_num_before = + qof_book_use_split_action_for_num_field (book); + gboolean use_split_action_for_num_after; + + if (!options) return; + + gnc_option_db_commit (options); + qof_book_save_options (book, gnc_option_db_save_to_kvp, options, TRUE); + use_split_action_for_num_after = + qof_book_use_split_action_for_num_field (book); + if (use_split_action_for_num_before != use_split_action_for_num_after) + gnc_book_option_num_field_source_change_cb (use_split_action_for_num_after); +} + static void starting_balance_helper (Account *account, hierarchy_data *data) { @@ -1064,6 +1084,58 @@ on_finish (GtkAssistant *gtkassistant, LEAVE (" "); } +/******************************************************** + * For a new book the assistant will also allow the user + * to set default book options, because this impacts how + * transactions are created. + * Ideally, the book options code can cleanly provide us + * with a page to insert in the assistant and be done with + * it. Unfortunately this is not possible without a serious + * rewrite of the options dialog code. + * So instead the following hack is used: + * we create the complete dialog, but only use the notebook + * part of it to create a new page. + * To make sure this dialog is cleaned up properly + * when the assistant closes, the close callback is set up anyway + * and at the finish we'll send a "close" response signal to the + * dialog to make it clean up after itself. + */ +static void +book_options_dialog_close_cb(GNCOptionWin * optionwin, + gpointer user_data) +{ + GNCOptionDB * options = user_data; + + gnc_options_dialog_destroy(optionwin); + gnc_option_db_destroy(options); +} + +static void +assistant_instert_book_options_page (hierarchy_data *data) +{ + GtkWidget *vbox = gtk_vbox_new (FALSE, 0); + + data->options = gnc_option_db_new_for_type (QOF_ID_BOOK); + qof_book_load_options (gnc_get_current_book (), + gnc_option_db_load_from_kvp, data->options); + gnc_option_db_clean (data->options); + + data->optionwin = gnc_options_dialog_new_modal (TRUE, _("New Book Options")); + gnc_options_dialog_build_contents_full (data->optionwin, data->options, FALSE); + + gnc_options_dialog_set_close_cb (data->optionwin, + book_options_dialog_close_cb, + (gpointer)data->options); + gnc_options_dialog_set_new_book_option_values (data->options); + + gtk_widget_reparent (gnc_options_dialog_notebook (data->optionwin), vbox); + gtk_widget_show_all (vbox); + gtk_assistant_insert_page (GTK_ASSISTANT(data->dialog), vbox, 2); + gtk_assistant_set_page_title (GTK_ASSISTANT(data->dialog), vbox, _("New Book Options")); + gtk_assistant_set_page_complete (GTK_ASSISTANT(data->dialog), vbox, TRUE); + +} + static GtkWidget * gnc_create_hierarchy_assistant (gboolean use_defaults, GncHierarchyAssistantFinishedCallback when_completed) {