From 1b2feacd4b7108f84999615334838f6191250b80 Mon Sep 17 00:00:00 2001 From: Robert Fewell <14uBobIT@gmail.com> Date: Sat, 20 Oct 2018 10:58:38 +0100 Subject: [PATCH 1/9] Bug 796896 - Button to complete an export not intuitively placed or discoverable The assistant file page is made up of an embedded GtkFileChooser widget and associated OK button which seems out of place. Remove the OK button and use the selection-changed signal to control the 'Forward' button. --- .../csv-exp/assistant-csv-export.c | 61 ++++++++----------- 1 file changed, 26 insertions(+), 35 deletions(-) diff --git a/gnucash/import-export/csv-exp/assistant-csv-export.c b/gnucash/import-export/csv-exp/assistant-csv-export.c index f27058efa27..06b4261f7ef 100644 --- a/gnucash/import-export/csv-exp/assistant-csv-export.c +++ b/gnucash/import-export/csv-exp/assistant-csv-export.c @@ -73,7 +73,7 @@ void csv_export_show_range_cb (GtkRadioButton *button, gpointer user_data); void csv_export_start_date_cb (GtkWidget *radio, gpointer user_data); void csv_export_end_date_cb (GtkWidget *radio, gpointer user_data); -void csv_export_file_chooser_confirm_cb (GtkWidget *button, CsvExportInfo *info); +void csv_export_file_chooser_selection_changed_cb (GtkFileChooser *chooser, CsvExportInfo *info); static const gchar *finish_tree_string = N_( /* Translators: %s is the file name string. */ @@ -121,55 +121,43 @@ static const gchar *start_trans_simple_string = N_( /************************************************** - * csv_export_file_chooser_confirm_cb + * csv_export_file_chooser_selection_changed_cb * - * call back for ok button in file chooser widget + * call back for GtkFileChooser widget **************************************************/ void -csv_export_file_chooser_confirm_cb (GtkWidget *button, CsvExportInfo *info) +csv_export_file_chooser_selection_changed_cb (GtkFileChooser *chooser, CsvExportInfo *info) { GtkAssistant *assistant = GTK_ASSISTANT(info->window); gint num = gtk_assistant_get_current_page (assistant); GtkWidget *page = gtk_assistant_get_nth_page (assistant, num); - gchar *file_name; gtk_assistant_set_page_complete (assistant, page, FALSE); file_name = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(info->file_chooser)); - if (file_name) + /* Test for a valid filename and not a directory */ + if (file_name && !g_file_test (file_name, G_FILE_TEST_IS_DIR)) { - if (g_file_test (file_name, G_FILE_TEST_EXISTS)) - { - const char *format = _("The file %s already exists. " - "Are you sure you want to overwrite it?"); - - /* if user says cancel, we should break out */ - if (!gnc_verify_dialog (GTK_WINDOW (assistant), FALSE, format, file_name)) - return; - } + gchar *filepath = gnc_uri_get_path (file_name); + gchar *filedir = g_path_get_dirname (filepath); + g_free (info->file_name); info->file_name = g_strdup (file_name); - gtk_assistant_set_page_complete (assistant, page, TRUE); - } - if (file_name) - { - gchar *filepath = gnc_uri_get_path (file_name); - gchar *filedir = g_path_get_dirname (filepath); + g_free (info->starting_dir); info->starting_dir = g_strdup (filedir); + g_free (filedir); g_free (filepath); + + gtk_assistant_set_page_complete (assistant, page, TRUE); } g_free (file_name); DEBUG("file_name selected is %s", info->file_name); DEBUG("starting directory is %s", info->starting_dir); - - /* Step to next page if page is complete */ - if(gtk_assistant_get_page_complete (assistant, page)) - gtk_assistant_set_current_page (assistant, num + 1); } @@ -268,7 +256,6 @@ csv_export_custom_entry_cb (GtkWidget *widget, gpointer user_data) info->separator_str = strdup (custom_str); if (info->use_custom == TRUE && gtk_entry_get_text_length (GTK_ENTRY(info->custom_entry)) == 0) - gtk_assistant_set_page_complete (assistant, page, FALSE); else gtk_assistant_set_page_complete (assistant, page, TRUE); @@ -701,6 +688,16 @@ csv_export_assistant_finish_page_prepare (GtkAssistant *assistant, gtk_label_set_text (GTK_LABEL(info->finish_label), text); g_free (text); + /* Test if the filename exists */ + if (g_file_test (info->file_name, G_FILE_TEST_EXISTS)) + { + const char *format = _("The file %s already exists. " + "Are you sure you want to overwrite it?"); + + /* if user says cancel, we should go back a page */ + if (!gnc_verify_dialog (GTK_WINDOW (assistant), FALSE, format, info->file_name)) + gtk_assistant_previous_page (assistant); + } /* Enable the Assistant Buttons */ gtk_assistant_set_page_complete (assistant, page, TRUE); } @@ -921,15 +918,9 @@ csv_export_assistant_create (CsvExportInfo *info) /* File chooser Page */ info->file_page = GTK_WIDGET(gtk_builder_get_object(builder, "file_page")); info->file_chooser = gtk_file_chooser_widget_new (GTK_FILE_CHOOSER_ACTION_SAVE); - button = gtk_button_new_with_mnemonic (_("_OK")); - gtk_widget_set_size_request (button, 100, -1); - gtk_widget_show (button); - h_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); - gtk_box_set_homogeneous (GTK_BOX (h_box), TRUE); - gtk_box_pack_start(GTK_BOX(h_box), button, FALSE, FALSE, 0); - gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER(info->file_chooser), h_box); - g_signal_connect (G_OBJECT(button), "clicked", - G_CALLBACK(csv_export_file_chooser_confirm_cb), info); + + g_signal_connect (G_OBJECT(info->file_chooser), "selection-changed", + G_CALLBACK(csv_export_file_chooser_selection_changed_cb), info); box = GTK_WIDGET(gtk_builder_get_object (builder, "file_page")); gtk_box_pack_start (GTK_BOX (box), info->file_chooser, TRUE, TRUE, 6); From 92b587fa56b48ac149c6c387c901b37cc4d410f6 Mon Sep 17 00:00:00 2001 From: Robert Fewell <14uBobIT@gmail.com> Date: Mon, 26 Nov 2018 14:14:25 +0000 Subject: [PATCH 2/9] Make similar changes to account import CSV assistant Remove the OK button from the file page. --- .../assistant-csv-account-import.glade | 3 +- .../csv-imp/assistant-csv-account-import.c | 80 ++++++++----------- .../csv-imp/assistant-csv-account-import.h | 3 + 3 files changed, 38 insertions(+), 48 deletions(-) diff --git a/gnucash/gtkbuilder/assistant-csv-account-import.glade b/gnucash/gtkbuilder/assistant-csv-account-import.glade index 1594e66b009..4d2a5bd5484 100644 --- a/gnucash/gtkbuilder/assistant-csv-account-import.glade +++ b/gnucash/gtkbuilder/assistant-csv-account-import.glade @@ -1,5 +1,5 @@ - + @@ -279,7 +279,6 @@ Enter file name and location for the Import... - progress Import Account Preview, first 10 rows only True False diff --git a/gnucash/import-export/csv-imp/assistant-csv-account-import.c b/gnucash/import-export/csv-imp/assistant-csv-account-import.c index 5cb377077b1..4485aee11a8 100644 --- a/gnucash/import-export/csv-imp/assistant-csv-account-import.c +++ b/gnucash/import-export/csv-imp/assistant-csv-account-import.c @@ -62,7 +62,7 @@ void csv_import_assistant_summary_page_prepare (GtkAssistant *assistant, gpointe void csv_import_sep_cb (GtkWidget *radio, gpointer user_data ); void csv_import_hrows_cb (GtkWidget *spin, gpointer user_data ); -void csv_import_file_chooser_confirm_cb (GtkWidget *button, CsvImportInfo *info); +void csv_import_file_chooser_selection_changed_cb (GtkFileChooser *chooser, CsvImportInfo *info); static gchar *gnc_input_dialog (GtkWidget *parent, const gchar *title, const gchar *msg, const gchar *default_input); @@ -136,25 +136,22 @@ void create_regex (GString *regex_str, const gchar *sep) /*************************************************************************/ /************************************************** - * csv_file_chooser_confirm_cb + * csv_import_file_chooser_selection_changed_cb * - * call back for ok button in file chooser widget + * call back for file chooser widget **************************************************/ void -csv_import_file_chooser_confirm_cb (GtkWidget *button, CsvImportInfo *info) +csv_import_file_chooser_selection_changed_cb (GtkFileChooser *chooser, CsvImportInfo *info) { GtkAssistant *assistant = GTK_ASSISTANT(info->window); - gint num = gtk_assistant_get_current_page (assistant); - GtkWidget *page = gtk_assistant_get_nth_page (assistant, num); - gchar *file_name; - csv_import_result res; - gtk_assistant_set_page_complete (assistant, page, FALSE); + gtk_assistant_set_page_complete (assistant, info->file_page, FALSE); + gtk_assistant_set_page_complete (assistant, info->account_page, FALSE); file_name = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(info->file_chooser)); - if (file_name) + if (file_name && !g_file_test (file_name, G_FILE_TEST_IS_DIR)) { gchar *filepath = gnc_uri_get_path (file_name); gchar *filedir = g_path_get_dirname (filepath); @@ -164,25 +161,12 @@ csv_import_file_chooser_confirm_cb (GtkWidget *button, CsvImportInfo *info) info->file_name = g_strdup (file_name); - // generate preview - gtk_list_store_clear (info->store); - res = csv_import_read_file (info->file_name, info->regexp->str, info->store, 1 ); - if (res == RESULT_OPEN_FAILED) - gnc_error_dialog (GTK_WINDOW (info->window), _("The input file can not be opened.")); - else if (res == RESULT_OK) - gtk_assistant_set_page_complete (assistant, page, TRUE); - else if (res == MATCH_FOUND) - gtk_assistant_set_page_complete (assistant, page, TRUE); + gtk_assistant_set_page_complete (assistant, info->file_page, TRUE); } g_free (file_name); DEBUG("file_name selected is %s", info->file_name); DEBUG("starting directory is %s", info->starting_dir); - - /* Step to next page if page is complete */ - if(gtk_assistant_get_page_complete (assistant, page)) - gtk_assistant_set_current_page (assistant, num + 1); - } @@ -385,15 +369,13 @@ csv_import_assistant_file_page_prepare (GtkAssistant *assistant, gpointer user_data) { CsvImportInfo *info = user_data; - gint num = gtk_assistant_get_current_page (assistant); - GtkWidget *page = gtk_assistant_get_nth_page (assistant, num); /* Set the default directory */ if (info->starting_dir) gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(info->file_chooser), info->starting_dir); /* Disable the Forward Assistant Button */ - gtk_assistant_set_page_complete (assistant, page, FALSE); + gtk_assistant_set_page_complete (assistant, info->file_page, FALSE); } @@ -402,7 +384,25 @@ csv_import_assistant_account_page_prepare (GtkAssistant *assistant, gpointer user_data) { CsvImportInfo *info = user_data; + csv_import_result res; + /* Disable the Forward Assistant Button */ + gtk_assistant_set_page_complete (assistant, info->account_page, FALSE); + + /* test read one line */ + gtk_list_store_clear (info->store); + res = csv_import_read_file (info->file_name, info->regexp->str, info->store, 1 ); + if (res == RESULT_OPEN_FAILED) + { + gnc_error_dialog (GTK_WINDOW (info->window), _("The input file can not be opened.")); + gtk_assistant_previous_page (assistant); + } + else if (res == RESULT_OK) + gtk_assistant_set_page_complete (assistant, info->account_page, TRUE); + else if (res == MATCH_FOUND) + gtk_assistant_set_page_complete (assistant, info->account_page, TRUE); + + // generate preview gtk_list_store_clear (info->store); gtk_widget_set_sensitive (info->header_row_spin, TRUE); @@ -419,8 +419,6 @@ csv_import_assistant_finish_page_prepare (GtkAssistant *assistant, gpointer user_data) { CsvImportInfo *info = user_data; - gint num = gtk_assistant_get_current_page (assistant); - GtkWidget *page = gtk_assistant_get_nth_page (assistant, num); gchar *text; /* Set Finish page text */ @@ -441,7 +439,7 @@ csv_import_assistant_finish_page_prepare (GtkAssistant *assistant, gnc_set_default_directory (GNC_PREFS_GROUP, info->starting_dir); /* Enable the Assistant Buttons */ - gtk_assistant_set_page_complete (assistant, page, TRUE); + gtk_assistant_set_page_complete (assistant, info->finish_label, TRUE); } @@ -569,7 +567,6 @@ csv_import_assistant_create (CsvImportInfo *info) { GtkBuilder *builder; GtkWidget *window; - GtkWidget *box, *h_box; GtkWidget *button; GtkCellRenderer *renderer; GtkTreeViewColumn *column; @@ -607,25 +604,16 @@ csv_import_assistant_create (CsvImportInfo *info) /* Start Page */ /* File chooser Page */ + info->file_page = GTK_WIDGET(gtk_builder_get_object(builder, "file_page")); info->file_chooser = gtk_file_chooser_widget_new (GTK_FILE_CHOOSER_ACTION_OPEN); - g_signal_connect (G_OBJECT(info->file_chooser), "file-activated", - G_CALLBACK(csv_import_file_chooser_confirm_cb), info); - button = gtk_button_new_with_mnemonic (_("_OK")); - gtk_widget_set_size_request (button, 100, -1); - gtk_widget_show (button); - h_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); - gtk_box_set_homogeneous (GTK_BOX (h_box), TRUE); - gtk_widget_set_hexpand (GTK_WIDGET(h_box), TRUE); - gtk_box_pack_start (GTK_BOX(h_box), button, FALSE, FALSE, 0); - gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER(info->file_chooser), h_box); - g_signal_connect (G_OBJECT(button), "clicked", - G_CALLBACK(csv_import_file_chooser_confirm_cb), info); - - box = GTK_WIDGET(gtk_builder_get_object(builder, "file_page")); - gtk_box_pack_start (GTK_BOX(box), info->file_chooser, TRUE, TRUE, 6); + g_signal_connect (G_OBJECT(info->file_chooser), "selection-changed", + G_CALLBACK(csv_import_file_chooser_selection_changed_cb), info); + + gtk_box_pack_start (GTK_BOX(info->file_page), info->file_chooser, TRUE, TRUE, 6); gtk_widget_show (info->file_chooser); /* Account Tree Page */ + info->account_page = GTK_WIDGET(gtk_builder_get_object(builder, "import_tree_page")); info->header_row_spin = GTK_WIDGET(gtk_builder_get_object (builder, "num_hrows")); info->tree_view = GTK_WIDGET(gtk_builder_get_object (builder, "treeview")); diff --git a/gnucash/import-export/csv-imp/assistant-csv-account-import.h b/gnucash/import-export/csv-imp/assistant-csv-account-import.h index d0799679aac..14f566a4dbb 100644 --- a/gnucash/import-export/csv-imp/assistant-csv-account-import.h +++ b/gnucash/import-export/csv-imp/assistant-csv-account-import.h @@ -51,6 +51,9 @@ typedef struct GtkWidget *summary_label; GtkWidget *summary_error_view; + GtkWidget *file_page; + GtkWidget *account_page; + gchar *starting_dir; gchar *file_name; gchar *error; From 4abbd86d0d6d34a022c7ebb27e73b62c8987a967 Mon Sep 17 00:00:00 2001 From: Robert Fewell <14uBobIT@gmail.com> Date: Mon, 26 Nov 2018 15:05:21 +0000 Subject: [PATCH 3/9] Remove window reference and use assistant instead --- .../csv-imp/assistant-csv-account-import.c | 41 ++++++++----------- .../csv-imp/assistant-csv-account-import.h | 1 - 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/gnucash/import-export/csv-imp/assistant-csv-account-import.c b/gnucash/import-export/csv-imp/assistant-csv-account-import.c index 4485aee11a8..27ac7dfcbaa 100644 --- a/gnucash/import-export/csv-imp/assistant-csv-account-import.c +++ b/gnucash/import-export/csv-imp/assistant-csv-account-import.c @@ -143,7 +143,7 @@ void create_regex (GString *regex_str, const gchar *sep) void csv_import_file_chooser_selection_changed_cb (GtkFileChooser *chooser, CsvImportInfo *info) { - GtkAssistant *assistant = GTK_ASSISTANT(info->window); + GtkAssistant *assistant = GTK_ASSISTANT(info->assistant); gchar *file_name; gtk_assistant_set_page_complete (assistant, info->file_page, FALSE); @@ -394,7 +394,7 @@ csv_import_assistant_account_page_prepare (GtkAssistant *assistant, res = csv_import_read_file (info->file_name, info->regexp->str, info->store, 1 ); if (res == RESULT_OPEN_FAILED) { - gnc_error_dialog (GTK_WINDOW (info->window), _("The input file can not be opened.")); + gnc_error_dialog (GTK_WINDOW (info->assistant), _("The input file can not be opened.")); gtk_assistant_previous_page (assistant); } else if (res == RESULT_OK) @@ -425,13 +425,10 @@ csv_import_assistant_finish_page_prepare (GtkAssistant *assistant, /* Before creating accounts, if this is a new book, tell user they can * specify book options, since they affect how transactions are created */ if (info->new_book) - { text = g_strdup_printf (gettext (new_book_finish_tree_string), info->file_name); - } else - { text = g_strdup_printf (gettext (finish_tree_string), info->file_name); - } + gtk_label_set_text (GTK_LABEL(info->finish_label), text); g_free (text); @@ -453,7 +450,7 @@ csv_import_assistant_summary_page_prepare (GtkAssistant *assistant, /* Before creating accounts, if this is a new book, let user specify * book options, since they affect how transactions are created */ if (info->new_book) - info->new_book = gnc_new_book_option_display (info->window); + info->new_book = gnc_new_book_option_display (info->assistant); if (g_strcmp0 (info->error, "") != 0) { @@ -555,8 +552,8 @@ csv_import_close_handler (gpointer user_data) g_free (info->file_name); g_string_free (info->regexp, TRUE); - gnc_save_window_size (GNC_PREFS_GROUP, GTK_WINDOW(info->window)); - gtk_widget_destroy (info->window); + gnc_save_window_size (GNC_PREFS_GROUP, GTK_WINDOW(info->assistant)); + gtk_widget_destroy (info->assistant); } /******************************************************* @@ -566,7 +563,6 @@ static GtkWidget * csv_import_assistant_create (CsvImportInfo *info) { GtkBuilder *builder; - GtkWidget *window; GtkWidget *button; GtkCellRenderer *renderer; GtkTreeViewColumn *column; @@ -575,29 +571,28 @@ csv_import_assistant_create (CsvImportInfo *info) builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "assistant-csv-account-import.glade", "num_hrows_adj"); gnc_builder_add_from_file (builder, "assistant-csv-account-import.glade", "csv_account_import_assistant"); - window = GTK_WIDGET(gtk_builder_get_object (builder, "csv_account_import_assistant")); - info->window = window; + info->assistant = GTK_WIDGET(gtk_builder_get_object (builder, "csv_account_import_assistant")); // Set the style context for this dialog so it can be easily manipulated with css - gnc_widget_set_style_context (GTK_WIDGET(window), "GncAssistAccountImport"); + gnc_widget_set_style_context (GTK_WIDGET(info->assistant), "GncAssistAccountImport"); /* Load default settings */ load_settings (info); /* Enable buttons on all page. */ - gtk_assistant_set_page_complete (GTK_ASSISTANT(window), + gtk_assistant_set_page_complete (GTK_ASSISTANT(info->assistant), GTK_WIDGET(gtk_builder_get_object(builder, "start_page")), TRUE); - gtk_assistant_set_page_complete (GTK_ASSISTANT(window), + gtk_assistant_set_page_complete (GTK_ASSISTANT(info->assistant), GTK_WIDGET(gtk_builder_get_object(builder, "file_page")), FALSE); - gtk_assistant_set_page_complete (GTK_ASSISTANT(window), + gtk_assistant_set_page_complete (GTK_ASSISTANT(info->assistant), GTK_WIDGET(gtk_builder_get_object(builder, "import_tree_page")), TRUE); - gtk_assistant_set_page_complete (GTK_ASSISTANT(window), + gtk_assistant_set_page_complete (GTK_ASSISTANT(info->assistant), GTK_WIDGET(gtk_builder_get_object(builder, "end_page")), FALSE); - gtk_assistant_set_page_complete (GTK_ASSISTANT(window), + gtk_assistant_set_page_complete (GTK_ASSISTANT(info->assistant), GTK_WIDGET(gtk_builder_get_object(builder, "summary_page")), TRUE); @@ -653,15 +648,15 @@ csv_import_assistant_create (CsvImportInfo *info) info->summary_label = GTK_WIDGET(gtk_builder_get_object (builder, "summary_label")); info->summary_error_view = GTK_WIDGET(gtk_builder_get_object (builder, "summary_error_view")); - g_signal_connect (G_OBJECT(window), "destroy", + g_signal_connect (G_OBJECT(info->assistant), "destroy", G_CALLBACK(csv_import_assistant_destroy_cb), info); gnc_restore_window_size (GNC_PREFS_GROUP, - GTK_WINDOW(info->window), gnc_ui_get_main_window(NULL)); + GTK_WINDOW(info->assistant), gnc_ui_get_main_window(NULL)); gtk_builder_connect_signals (builder, info); g_object_unref (G_OBJECT(builder)); - return window; + return info->assistant; } @@ -689,7 +684,7 @@ gnc_file_csv_account_import(void) NULL, csv_import_close_handler, info); - gtk_widget_show_all (info->window); + gtk_widget_show_all (info->assistant); - gnc_window_adjust_for_screen (GTK_WINDOW(info->window)); + gnc_window_adjust_for_screen (GTK_WINDOW(info->assistant)); } diff --git a/gnucash/import-export/csv-imp/assistant-csv-account-import.h b/gnucash/import-export/csv-imp/assistant-csv-account-import.h index 14f566a4dbb..15eb2891f26 100644 --- a/gnucash/import-export/csv-imp/assistant-csv-account-import.h +++ b/gnucash/import-export/csv-imp/assistant-csv-account-import.h @@ -39,7 +39,6 @@ enum tree_import_model_columns typedef struct { - GtkWidget *window; GtkWidget *assistant; GtkWidget *file_chooser; From 5201fe5f34f313c227559d7b85be52e66b6f4cba Mon Sep 17 00:00:00 2001 From: Robert Fewell <14uBobIT@gmail.com> Date: Mon, 26 Nov 2018 15:37:58 +0000 Subject: [PATCH 4/9] Disable forward button if there are no entries in store --- .../csv-imp/assistant-csv-account-import.c | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/gnucash/import-export/csv-imp/assistant-csv-account-import.c b/gnucash/import-export/csv-imp/assistant-csv-account-import.c index 27ac7dfcbaa..56faca2e4c5 100644 --- a/gnucash/import-export/csv-imp/assistant-csv-account-import.c +++ b/gnucash/import-export/csv-imp/assistant-csv-account-import.c @@ -211,6 +211,24 @@ void csv_import_hrows_cb (GtkWidget *spin, gpointer user_data) } +/******************************************************* + * csv_import_assistant_enable_account_forward + * + * enaable forward button on account_page if store has rows + *******************************************************/ +static void csv_import_assistant_enable_account_forward (CsvImportInfo *info) +{ + GtkAssistant *assistant = GTK_ASSISTANT(info->assistant); + gboolean store_has_rows = TRUE; + + /* if the store is empty, disable forward button */ + if (gtk_tree_model_iter_n_children (GTK_TREE_MODEL(info->store), NULL) == 0) + store_has_rows = FALSE; + + gtk_assistant_set_page_complete (assistant, info->account_page, store_has_rows); +} + + /******************************************************* * csv_import_sep_cb * @@ -257,6 +275,9 @@ void csv_import_sep_cb (GtkWidget *radio, gpointer user_data) gtk_spin_button_set_value (GTK_SPIN_BUTTON(info->header_row_spin), 1); // set header spin to 1 else gtk_spin_button_set_value (GTK_SPIN_BUTTON(info->header_row_spin), 0); //reset header spin to 0 + + /* if the store has rows, enable forward button */ + csv_import_assistant_enable_account_forward (info); } @@ -411,6 +432,9 @@ csv_import_assistant_account_page_prepare (GtkAssistant *assistant, gtk_spin_button_set_value (GTK_SPIN_BUTTON(info->header_row_spin), 1); // set header spin to 1 else gtk_spin_button_set_value (GTK_SPIN_BUTTON(info->header_row_spin), 0); //reset header spin to 0 + + /* if the store has rows, enable forward button */ + csv_import_assistant_enable_account_forward (info); } From 2b9b3d4a5ed4bd6614a9b2c0646a3c7e2a0a4c59 Mon Sep 17 00:00:00 2001 From: Robert Fewell <14uBobIT@gmail.com> Date: Mon, 26 Nov 2018 15:59:01 +0000 Subject: [PATCH 5/9] Fix a missing transient warning for error dialogue --- .../csv-imp/assistant-csv-account-import.c | 13 ++++++++----- gnucash/import-export/csv-imp/csv-account-import.c | 3 ++- gnucash/import-export/csv-imp/csv-account-import.h | 4 +++- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/gnucash/import-export/csv-imp/assistant-csv-account-import.c b/gnucash/import-export/csv-imp/assistant-csv-account-import.c index 56faca2e4c5..494141640a8 100644 --- a/gnucash/import-export/csv-imp/assistant-csv-account-import.c +++ b/gnucash/import-export/csv-imp/assistant-csv-account-import.c @@ -259,7 +259,10 @@ void csv_import_sep_cb (GtkWidget *radio, gpointer user_data) if (g_strcmp0 (name, "radio_custom") == 0) { - temp = gnc_input_dialog (0, _("Adjust regular expression used for import"), _("This regular expression is used to parse the import file. Modify according to your needs.\n"), info->regexp->str); + temp = gnc_input_dialog (GTK_WIDGET (info->assistant), + _("Adjust regular expression used for import"), + _("This regular expression is used to parse the import file. Modify according to your needs.\n"), + info->regexp->str); if (temp) { g_string_assign (info->regexp, temp); @@ -271,7 +274,7 @@ void csv_import_sep_cb (GtkWidget *radio, gpointer user_data) gtk_list_store_clear (info->store); gtk_widget_set_sensitive (info->header_row_spin, TRUE); - if (csv_import_read_file (info->file_name, info->regexp->str, info->store, 11) == MATCH_FOUND) + if (csv_import_read_file (GTK_WINDOW (info->assistant), info->file_name, info->regexp->str, info->store, 11) == MATCH_FOUND) gtk_spin_button_set_value (GTK_SPIN_BUTTON(info->header_row_spin), 1); // set header spin to 1 else gtk_spin_button_set_value (GTK_SPIN_BUTTON(info->header_row_spin), 0); //reset header spin to 0 @@ -412,7 +415,7 @@ csv_import_assistant_account_page_prepare (GtkAssistant *assistant, /* test read one line */ gtk_list_store_clear (info->store); - res = csv_import_read_file (info->file_name, info->regexp->str, info->store, 1 ); + res = csv_import_read_file (GTK_WINDOW (info->assistant), info->file_name, info->regexp->str, info->store, 1 ); if (res == RESULT_OPEN_FAILED) { gnc_error_dialog (GTK_WINDOW (info->assistant), _("The input file can not be opened.")); @@ -428,7 +431,7 @@ csv_import_assistant_account_page_prepare (GtkAssistant *assistant, gtk_widget_set_sensitive (info->header_row_spin, TRUE); - if (csv_import_read_file (info->file_name, info->regexp->str, info->store, 11 ) == MATCH_FOUND) + if (csv_import_read_file (GTK_WINDOW (info->assistant), info->file_name, info->regexp->str, info->store, 11 ) == MATCH_FOUND) gtk_spin_button_set_value (GTK_SPIN_BUTTON(info->header_row_spin), 1); // set header spin to 1 else gtk_spin_button_set_value (GTK_SPIN_BUTTON(info->header_row_spin), 0); //reset header spin to 0 @@ -563,7 +566,7 @@ csv_import_assistant_finish (GtkAssistant *assistant, gpointer user_data) CsvImportInfo *info = user_data; gtk_list_store_clear (info->store); - csv_import_read_file (info->file_name, info->regexp->str, info->store, 0 ); + csv_import_read_file (GTK_WINDOW (info->assistant), info->file_name, info->regexp->str, info->store, 0 ); csv_account_import (info); } diff --git a/gnucash/import-export/csv-imp/csv-account-import.c b/gnucash/import-export/csv-imp/csv-account-import.c index 5285b6885e8..b591cbd6422 100644 --- a/gnucash/import-export/csv-imp/csv-account-import.c +++ b/gnucash/import-export/csv-imp/csv-account-import.c @@ -78,7 +78,8 @@ fill_model_with_match(GMatchInfo *match_info, * Parse the file for a correctly formatted file *******************************************************/ csv_import_result -csv_import_read_file (const gchar *filename, const gchar *parser_regexp, +csv_import_read_file (GtkWindow *win, const gchar *filename, + const gchar *parser_regexp, GtkListStore *store, guint max_rows) { gchar *locale_cont, *contents; diff --git a/gnucash/import-export/csv-imp/csv-account-import.h b/gnucash/import-export/csv-imp/csv-account-import.h index 4ef09fc6c5e..eb498b3e08f 100644 --- a/gnucash/import-export/csv-imp/csv-account-import.h +++ b/gnucash/import-export/csv-imp/csv-account-import.h @@ -42,7 +42,9 @@ enum _csv_import_result typedef enum _csv_import_result csv_import_result; csv_import_result -csv_import_read_file (const gchar *filename, const gchar *parser_regexp, GtkListStore *store, guint max_rows ); +csv_import_read_file (GtkWindow *win, const gchar *filename, + const gchar *parser_regexp, + GtkListStore *store, guint max_rows ); void csv_account_import (CsvImportInfo *info); From 8ed40078b04f345e7104945f6928067c227a7740 Mon Sep 17 00:00:00 2001 From: Robert Fewell <14uBobIT@gmail.com> Date: Mon, 26 Nov 2018 16:30:36 +0000 Subject: [PATCH 6/9] Make similar changes to price import CSV assistant --- .../assistant-csv-price-import.glade | 3 +- .../csv-imp/assistant-csv-price-import.cpp | 116 ++++++++++-------- 2 files changed, 64 insertions(+), 55 deletions(-) diff --git a/gnucash/gtkbuilder/assistant-csv-price-import.glade b/gnucash/gtkbuilder/assistant-csv-price-import.glade index 03a9a5bd04d..f1486e3f37f 100644 --- a/gnucash/gtkbuilder/assistant-csv-price-import.glade +++ b/gnucash/gtkbuilder/assistant-csv-price-import.glade @@ -66,6 +66,7 @@ Click on 'Forward' to proceed or 'Cancel' to Abort Import. intro + Price Import Assistant True False @@ -1042,7 +1043,7 @@ For example - intro + Import Preview True False diff --git a/gnucash/import-export/csv-imp/assistant-csv-price-import.cpp b/gnucash/import-export/csv-imp/assistant-csv-price-import.cpp index 2d6d19b40a7..96766160a84 100644 --- a/gnucash/import-export/csv-imp/assistant-csv-price-import.cpp +++ b/gnucash/import-export/csv-imp/assistant-csv-price-import.cpp @@ -93,7 +93,7 @@ class CsvImpPriceAssist void assist_finish (); void assist_compmgr_close (); - void file_confirm_cb (); + void file_selection_changed_cb (); void preview_settings_delete (); void preview_settings_save (); @@ -190,7 +190,7 @@ extern "C" void csv_price_imp_assist_prepare_cb (GtkAssistant *assistant, GtkWidget *page, CsvImpPriceAssist* info); void csv_price_imp_assist_close_cb (GtkAssistant *gtkassistant, CsvImpPriceAssist* info); void csv_price_imp_assist_finish_cb (GtkAssistant *gtkassistant, CsvImpPriceAssist* info); -void csv_price_imp_file_confirm_cb (GtkWidget *button, CsvImpPriceAssist *info); +void csv_price_imp_file_selection_changed_cb (GtkFileChooser *chooser, CsvImpPriceAssist *info); void csv_price_imp_preview_del_settings_cb (GtkWidget *button, CsvImpPriceAssist *info); void csv_price_imp_preview_save_settings_cb (GtkWidget *button, CsvImpPriceAssist *info); void csv_price_imp_preview_settings_sel_changed_cb (GtkComboBox *combo, CsvImpPriceAssist *info); @@ -228,9 +228,9 @@ csv_price_imp_assist_finish_cb (GtkAssistant *assistant, CsvImpPriceAssist* info info->assist_finish (); } -void csv_price_imp_file_confirm_cb (GtkWidget *button, CsvImpPriceAssist *info) +void csv_price_imp_file_selection_changed_cb (GtkFileChooser *chooser, CsvImpPriceAssist *info) { - info->file_confirm_cb(); + info->file_selection_changed_cb(); } void csv_price_imp_preview_del_settings_cb (GtkWidget *button, CsvImpPriceAssist *info) @@ -500,18 +500,9 @@ CsvImpPriceAssist::CsvImpPriceAssist () /* File chooser Page */ file_page = GTK_WIDGET(gtk_builder_get_object (builder, "file_page")); file_chooser = gtk_file_chooser_widget_new (GTK_FILE_CHOOSER_ACTION_OPEN); - g_signal_connect (G_OBJECT(file_chooser), "file-activated", - G_CALLBACK(csv_price_imp_file_confirm_cb), this); - auto button = gtk_button_new_with_mnemonic (_("_OK")); - gtk_widget_set_size_request (button, 100, -1); - gtk_widget_show (button); - auto h_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); - gtk_box_set_homogeneous (GTK_BOX (h_box), TRUE); - gtk_widget_set_hexpand (GTK_WIDGET(h_box), TRUE); - gtk_box_pack_start (GTK_BOX(h_box), button, FALSE, FALSE, 0); - gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER(file_chooser), h_box); - g_signal_connect (G_OBJECT(button), "clicked", - G_CALLBACK(csv_price_imp_file_confirm_cb), this); + + g_signal_connect (G_OBJECT(file_chooser), "selection-changed", + G_CALLBACK(csv_price_imp_file_selection_changed_cb), this); auto box = GTK_WIDGET(gtk_builder_get_object (builder, "file_page")); gtk_box_pack_start (GTK_BOX(box), file_chooser, TRUE, TRUE, 6); @@ -676,15 +667,17 @@ CsvImpPriceAssist::~CsvImpPriceAssist () * Code related to the file chooser page **************************************************/ -/* csv_price_imp_file_confirm_cb +/* csv_price_imp_file_selection_changed_cb * - * call back for ok button in file chooser widget + * call back for file chooser widget */ void -CsvImpPriceAssist::file_confirm_cb () +CsvImpPriceAssist::file_selection_changed_cb () { + gtk_assistant_set_page_complete (csv_imp_asst, file_page, false); + auto file_name = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(file_chooser)); - if (!file_name) + if (!file_name || g_file_test (file_name, G_FILE_TEST_IS_DIR)) return; auto filepath = gnc_uri_get_path (file_name); @@ -700,36 +693,7 @@ CsvImpPriceAssist::file_confirm_cb () g_free (file_name); g_free (starting_dir); - /* Load the file into parse_data. */ - price_imp = std::unique_ptr(new GncPriceImport); - /* Assume data is CSV. User can later override to Fixed Width if needed */ - try - { - price_imp->file_format (GncImpFileFormat::CSV); - price_imp->load_file (m_file_name); - price_imp->tokenize (true); - } - catch (std::ifstream::failure& e) - { - /* File loading failed ... */ - gnc_error_dialog (GTK_WINDOW(csv_imp_asst), "%s", e.what()); - return; - } - catch (std::range_error &e) - { - /* Parsing failed ... */ - gnc_error_dialog (GTK_WINDOW(csv_imp_asst), "%s", _(e.what())); - return; - } - /* Get settings store and populate */ - preview_populate_settings_combo(); - gtk_combo_box_set_active (settings_combo, 0); - - // set over_write to false as default - price_imp->over_write (false); - - auto num = gtk_assistant_get_current_page (csv_imp_asst); - gtk_assistant_set_current_page (csv_imp_asst, num + 1); + gtk_assistant_set_page_complete (csv_imp_asst, file_page, true); } @@ -1742,6 +1706,10 @@ void CsvImpPriceAssist::preview_validate_settings () void CsvImpPriceAssist::assist_file_page_prepare () { + /* Disable the Forward Assistant Button */ + gtk_assistant_set_page_complete (csv_imp_asst, file_page, false); + gtk_assistant_set_page_complete (csv_imp_asst, preview_page, false); + /* Set the default directory */ auto starting_dir = gnc_get_default_directory (GNC_PREFS_GROUP); if (starting_dir) @@ -1754,11 +1722,51 @@ CsvImpPriceAssist::assist_file_page_prepare () void CsvImpPriceAssist::assist_preview_page_prepare () { - /* Disable the Forward Assistant Button */ - gtk_assistant_set_page_complete (csv_imp_asst, preview_page, false); + auto go_back = false; - /* Load the data into the treeview. */ - preview_refresh_table (); + /* Load the file into parse_data, reset it if altrady loaded. */ + if (price_imp) + price_imp.reset(); + + /* Load the file into parse_data. */ + price_imp = std::unique_ptr(new GncPriceImport); + /* Assume data is CSV. User can later override to Fixed Width if needed */ + try + { + price_imp->file_format (GncImpFileFormat::CSV); + price_imp->load_file (m_file_name); + price_imp->tokenize (true); + } + catch (std::ifstream::failure& e) + { + /* File loading failed ... */ + gnc_error_dialog (GTK_WINDOW(csv_imp_asst), "%s", e.what()); + go_back = true; + } + catch (std::range_error &e) + { + /* Parsing failed ... */ + gnc_error_dialog (GTK_WINDOW(csv_imp_asst), "%s", _(e.what())); + go_back = true; + } + + if (go_back) + gtk_assistant_previous_page (csv_imp_asst); + else + { + /* Get settings store and populate */ + preview_populate_settings_combo(); + gtk_combo_box_set_active (settings_combo, 0); + + // set over_write to false as default + price_imp->over_write (false); + + /* Disable the Forward Assistant Button */ + gtk_assistant_set_page_complete (csv_imp_asst, preview_page, false); + + /* Load the data into the treeview. */ + g_idle_add ((GSourceFunc)csv_imp_preview_queue_rebuild_table, this); + } } void From 78c8e8f3afbc8b5e65024479d9b4e382f83f6f6a Mon Sep 17 00:00:00 2001 From: Robert Fewell <14uBobIT@gmail.com> Date: Mon, 26 Nov 2018 17:01:09 +0000 Subject: [PATCH 7/9] Make similar changes to transaction import CSV assistant --- .../assistant-csv-trans-import.glade | 5 +- .../csv-imp/assistant-csv-trans-import.cpp | 119 +++++++++--------- 2 files changed, 63 insertions(+), 61 deletions(-) diff --git a/gnucash/gtkbuilder/assistant-csv-trans-import.glade b/gnucash/gtkbuilder/assistant-csv-trans-import.glade index 9968453c1a4..8db94051846 100644 --- a/gnucash/gtkbuilder/assistant-csv-trans-import.glade +++ b/gnucash/gtkbuilder/assistant-csv-trans-import.glade @@ -57,6 +57,7 @@ Lastly, for repeated imports the preview page has buttons to Load and Save the s intro + Transaction Import Assistant True False @@ -982,7 +983,7 @@ For example - intro + Import Preview True False @@ -1098,7 +1099,7 @@ For example - Match Import accounts with GnuCash accounts + Match Import and GnuCash accounts False diff --git a/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp b/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp index d9132ba3c73..8d9c9c5f12b 100644 --- a/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp +++ b/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp @@ -159,7 +159,7 @@ class CsvImpTransAssist void assist_finish (); void assist_compmgr_close (); - void file_confirm_cb (); + void file_selection_changed_cb (); void preview_settings_delete (); void preview_settings_save (); @@ -269,7 +269,7 @@ extern "C" void csv_tximp_assist_prepare_cb (GtkAssistant *assistant, GtkWidget *page, CsvImpTransAssist* info); void csv_tximp_assist_close_cb (GtkAssistant *gtkassistant, CsvImpTransAssist* info); void csv_tximp_assist_finish_cb (GtkAssistant *gtkassistant, CsvImpTransAssist* info); -void csv_tximp_file_confirm_cb (GtkWidget *button, CsvImpTransAssist *info); +void csv_tximp_file_selection_changed_cb (GtkFileChooser *chooser, CsvImpTransAssist *info); void csv_tximp_preview_del_settings_cb (GtkWidget *button, CsvImpTransAssist *info); void csv_tximp_preview_save_settings_cb (GtkWidget *button, CsvImpTransAssist *info); void csv_tximp_preview_settings_sel_changed_cb (GtkComboBox *combo, CsvImpTransAssist *info); @@ -310,9 +310,9 @@ csv_tximp_assist_finish_cb (GtkAssistant *assistant, CsvImpTransAssist* info) } -void csv_tximp_file_confirm_cb (GtkWidget *button, CsvImpTransAssist *info) +void csv_tximp_file_selection_changed_cb (GtkFileChooser *chooser, CsvImpTransAssist *info) { - info->file_confirm_cb(); + info->file_selection_changed_cb(); } void csv_tximp_preview_del_settings_cb (GtkWidget *button, CsvImpTransAssist *info) @@ -479,18 +479,8 @@ CsvImpTransAssist::CsvImpTransAssist () /* File chooser Page */ file_page = GTK_WIDGET(gtk_builder_get_object (builder, "file_page")); file_chooser = gtk_file_chooser_widget_new (GTK_FILE_CHOOSER_ACTION_OPEN); - g_signal_connect (G_OBJECT(file_chooser), "file-activated", - G_CALLBACK(csv_tximp_file_confirm_cb), this); - auto button = gtk_button_new_with_mnemonic (_("_OK")); - gtk_widget_set_size_request (button, 100, -1); - gtk_widget_show (button); - auto h_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); - gtk_box_set_homogeneous (GTK_BOX (h_box), TRUE); - gtk_widget_set_hexpand (GTK_WIDGET(h_box), TRUE); - gtk_box_pack_start (GTK_BOX(h_box), button, FALSE, FALSE, 0); - gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER(file_chooser), h_box); - g_signal_connect (G_OBJECT(button), "clicked", - G_CALLBACK(csv_tximp_file_confirm_cb), this); + g_signal_connect (G_OBJECT(file_chooser), "selection-changed", + G_CALLBACK(csv_tximp_file_selection_changed_cb), this); auto box = GTK_WIDGET(gtk_builder_get_object (builder, "file_page")); gtk_box_pack_start (GTK_BOX(box), file_chooser, TRUE, TRUE, 6); @@ -681,17 +671,17 @@ CsvImpTransAssist::~CsvImpTransAssist () * Code related to the file chooser page **************************************************/ -/* csv_tximp_file_confirm_cb +/* csv_tximp_file_selection_changed_cb * * call back for ok button in file chooser widget */ void -CsvImpTransAssist::file_confirm_cb () +CsvImpTransAssist::file_selection_changed_cb () { - gtk_assistant_set_page_complete (csv_imp_asst, account_match_page, false); + gtk_assistant_set_page_complete (csv_imp_asst, file_page, false); auto file_name = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(file_chooser)); - if (!file_name) + if (!file_name || g_file_test (file_name, G_FILE_TEST_IS_DIR)) return; auto filepath = gnc_uri_get_path (file_name); @@ -707,37 +697,7 @@ CsvImpTransAssist::file_confirm_cb () g_free (file_name); g_free (starting_dir); - /* Load the file into parse_data. */ - tx_imp = std::unique_ptr(new GncTxImport); - /* Assume data is CSV. User can later override to Fixed Width if needed */ - try - { - tx_imp->file_format (GncImpFileFormat::CSV); - tx_imp->load_file (m_file_name); - tx_imp->tokenize (true); - } - catch (std::ifstream::failure& e) - { - /* File loading failed ... */ - gnc_error_dialog (GTK_WINDOW (csv_imp_asst), "%s", e.what()); - return; - } - catch (std::range_error &e) - { - /* Parsing failed ... */ - gnc_error_dialog (GTK_WINDOW (csv_imp_asst), "%s", _(e.what())); - return; - } - - preview_refresh (); - - /* Get settings store and populate */ - preview_populate_settings_combo(); - gtk_combo_box_set_active (settings_combo, 0); - - gtk_assistant_set_page_complete (csv_imp_asst, account_match_page, true); - auto num = gtk_assistant_get_current_page (csv_imp_asst); - gtk_assistant_set_current_page (csv_imp_asst, num + 1); + gtk_assistant_set_page_complete (csv_imp_asst, file_page, true); } @@ -1696,9 +1656,11 @@ void CsvImpTransAssist::preview_validate_settings () /* Show or hide the account match page based on whether there are * accounts in the user data according to the importer configuration + * only if there are no errors */ - gtk_widget_set_visible (GTK_WIDGET(account_match_page), - !tx_imp->accounts().empty()); + if (error_msg.empty()) + gtk_widget_set_visible (GTK_WIDGET(account_match_page), + !tx_imp->accounts().empty()); } @@ -1884,13 +1846,52 @@ CsvImpTransAssist::assist_file_page_prepare () void CsvImpTransAssist::assist_preview_page_prepare () { - tx_imp->req_mapped_accts (false); + auto go_back = false; + + /* Load the file into parse_data, reset it if altrady loaded. */ + if (tx_imp) + tx_imp.reset(); + + tx_imp = std::unique_ptr(new GncTxImport); - /* Disable the Forward Assistant Button */ - gtk_assistant_set_page_complete (csv_imp_asst, preview_page, false); + /* Assume data is CSV. User can later override to Fixed Width if needed */ + try + { + tx_imp->file_format (GncImpFileFormat::CSV); + tx_imp->load_file (m_file_name); + tx_imp->tokenize (true); + } + catch (std::ifstream::failure& e) + { + /* File loading failed ... */ + gnc_error_dialog (GTK_WINDOW (csv_imp_asst), "%s", e.what()); + go_back = true; + } + catch (std::range_error &e) + { + /* Parsing failed ... */ + gnc_error_dialog (GTK_WINDOW (csv_imp_asst), "%s", _(e.what())); + go_back = true; + } - /* Load the data into the treeview. */ - preview_refresh_table (); + if (go_back) + gtk_assistant_previous_page (csv_imp_asst); + else + { + preview_refresh (); + + /* Get settings store and populate */ + preview_populate_settings_combo(); + gtk_combo_box_set_active (settings_combo, 0); + + tx_imp->req_mapped_accts (false); + + /* Disable the Forward Assistant Button */ + gtk_assistant_set_page_complete (csv_imp_asst, preview_page, false); + + /* Load the data into the treeview. */ + preview_refresh_table (); + } } void @@ -1915,7 +1916,7 @@ CsvImpTransAssist::assist_account_match_page_prepare () gtk_widget_set_sensitive (account_match_btn, true); /* Enable the Forward Assistant Button */ - gtk_assistant_set_page_complete (csv_imp_asst, account_match_page, + gtk_assistant_set_page_complete (csv_imp_asst, account_match_page, csv_tximp_acct_match_check_all (store)); } From 79373d5b5e497909b778350faa26504e00e9cb28 Mon Sep 17 00:00:00 2001 From: Robert Fewell <14uBobIT@gmail.com> Date: Mon, 26 Nov 2018 17:02:53 +0000 Subject: [PATCH 8/9] Fix an alignment issue and remove redundant ctreeview --- .../assistant-csv-price-import.glade | 51 ++++--------------- .../assistant-csv-trans-import.glade | 51 ++++--------------- 2 files changed, 18 insertions(+), 84 deletions(-) diff --git a/gnucash/gtkbuilder/assistant-csv-price-import.glade b/gnucash/gtkbuilder/assistant-csv-price-import.glade index f1486e3f37f..6b01a525944 100644 --- a/gnucash/gtkbuilder/assistant-csv-price-import.glade +++ b/gnucash/gtkbuilder/assistant-csv-price-import.glade @@ -1,5 +1,5 @@ - + @@ -454,6 +454,7 @@ Select location and file name for the Import, then click 'OK'... Double-click anywhere on the table below to insert a column break True True + 0 1 @@ -481,6 +482,7 @@ Select location and file name for the Import, then click 'OK'... Right-click anywhere in a column to modify it (widen, narrow, merge) True True + 0 1 @@ -921,48 +923,13 @@ For example True True - + True - False - - - True - False - vertical - - - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - both - - - - - - False - True - 0 - - - - - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - both - - - - - - True - True - 1 - - - + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + both + + diff --git a/gnucash/gtkbuilder/assistant-csv-trans-import.glade b/gnucash/gtkbuilder/assistant-csv-trans-import.glade index 8db94051846..8503039cbd3 100644 --- a/gnucash/gtkbuilder/assistant-csv-trans-import.glade +++ b/gnucash/gtkbuilder/assistant-csv-trans-import.glade @@ -1,5 +1,5 @@ - + @@ -454,6 +454,7 @@ Select location and file name for the Import, then click 'OK'... Double-click anywhere on the table below to insert a column break True True + 0 1 @@ -481,6 +482,7 @@ Select location and file name for the Import, then click 'OK'... Right-click anywhere in a column to modify it (widen, narrow, merge) True True + 0 1 @@ -855,48 +857,13 @@ For example True True - + True - False - - - True - False - vertical - - - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - both - - - - - - False - True - 0 - - - - - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - both - - - - - - True - True - 1 - - - + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + both + + From 458dac89feb9ddf02e015ae7c8bfcac74e88b760 Mon Sep 17 00:00:00 2001 From: Robert Fewell <14uBobIT@gmail.com> Date: Mon, 26 Nov 2018 17:24:46 +0000 Subject: [PATCH 9/9] Bug 779565 - Treeview header combos do not work at first load When the csv preview page is first loaded the header combo will not work till refreshed which can be done by selecting another separator. By adding a g_idle_add to the preview_page_prepare to rebuild the table the combos become active. --- gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp b/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp index 8d9c9c5f12b..26fd3553008 100644 --- a/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp +++ b/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp @@ -1890,7 +1890,7 @@ CsvImpTransAssist::assist_preview_page_prepare () gtk_assistant_set_page_complete (csv_imp_asst, preview_page, false); /* Load the data into the treeview. */ - preview_refresh_table (); + g_idle_add ((GSourceFunc)csv_imp_preview_queue_rebuild_table, this); } }