32 #include <glib/gi18n.h>
39 #include "dialog-utils.h"
44 #define GNC_PREFS_GROUP "dialogs.import.generic.match-picker"
48 DOWNLOADED_COL_ACCOUNT = 0,
50 DOWNLOADED_COL_AMOUNT,
51 DOWNLOADED_COL_DESCRIPTION,
53 DOWNLOADED_COL_BALANCED,
54 DOWNLOADED_COL_INFO_PTR,
60 MATCHER_COL_CONFIDENCE = 0,
61 MATCHER_COL_CONFIDENCE_PIXBUF,
64 MATCHER_COL_DESCRIPTION,
77 static const int SHOW_NUMERIC_SCORE = FALSE;
85 GtkWidget * transaction_matcher;
86 GtkTreeView * downloaded_view;
87 GtkTreeView * match_view;
101 GtkTreeSelection *selection;
105 const gchar *ro_text;
106 gboolean found = FALSE;
110 g_assert(transaction_info);
115 store = GTK_LIST_STORE(gtk_tree_view_get_model(matcher->downloaded_view));
116 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter))
120 gtk_tree_model_get(GTK_TREE_MODEL(store), &iter,
121 DOWNLOADED_COL_INFO_PTR, &local_info,
123 if (local_info == transaction_info)
129 while (gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &iter));
132 gtk_list_store_append(store, &iter);
139 gtk_list_store_set(store, &iter, DOWNLOADED_COL_ACCOUNT, ro_text, -1);
143 gtk_list_store_set(store, &iter, DOWNLOADED_COL_DATE, text, -1);
148 gnc_split_amount_print_info(split, TRUE));
149 gtk_list_store_set(store, &iter, DOWNLOADED_COL_AMOUNT, ro_text, -1);
153 gtk_list_store_set(store, &iter, DOWNLOADED_COL_DESCRIPTION, ro_text, -1);
157 gtk_list_store_set(store, &iter, DOWNLOADED_COL_MEMO, ro_text, -1);
164 gnc_default_print_info(TRUE));
165 gtk_list_store_set(store, &iter, DOWNLOADED_COL_BALANCED, ro_text, -1);
167 gtk_list_store_set(store, &iter, DOWNLOADED_COL_INFO_PTR,
168 transaction_info, -1);
170 selection = gtk_tree_view_get_selection(matcher->downloaded_view);
171 gtk_tree_selection_select_iter(selection, &iter);
181 downloaded_transaction_changed_cb (GtkTreeSelection *selection,
185 GtkTreeModel *dl_model;
186 GtkListStore *match_store;
188 GList * list_element;
190 const gchar *ro_text;
194 if (!gtk_tree_selection_get_selected(selection, &dl_model, &iter))
196 matcher->selected_trans_info = NULL;
199 gtk_tree_model_get(dl_model, &iter,
200 DOWNLOADED_COL_INFO_PTR, &matcher->selected_trans_info,
204 match_store = GTK_LIST_STORE(gtk_tree_view_get_model(matcher->match_view));
205 gtk_list_store_clear(match_store);
207 (matcher->selected_trans_info));
208 while (list_element != NULL)
210 match_info = list_element->data;
212 gtk_list_store_append(match_store, &iter);
218 gtk_list_store_set(match_store, &iter, MATCHER_COL_CONFIDENCE, text, -1);
227 gtk_list_store_set(match_store, &iter, MATCHER_COL_DATE, text, -1);
235 gtk_list_store_set(match_store, &iter, MATCHER_COL_AMOUNT, ro_text, -1);
240 gtk_list_store_set(match_store, &iter, MATCHER_COL_DESCRIPTION, ro_text, -1);
244 gtk_list_store_set(match_store, &iter, MATCHER_COL_MEMO, ro_text, -1);
246 gtk_list_store_set(match_store, &iter, MATCHER_COL_INFO_PTR, match_info, -1);
249 if (SHOW_NUMERIC_SCORE == TRUE)
251 gtk_list_store_set(match_store, &iter,
252 MATCHER_COL_CONFIDENCE_PIXBUF,
254 matcher->user_settings,
255 GTK_WIDGET(matcher->match_view)),
260 gtk_list_store_set(match_store, &iter,
261 MATCHER_COL_CONFIDENCE_PIXBUF,
263 matcher->user_settings,
264 GTK_WIDGET(matcher->match_view)),
272 GtkTreeSelection *selection;
274 selection = gtk_tree_view_get_selection(matcher->match_view);
275 gtk_tree_selection_select_iter(selection, &iter);
278 list_element = g_list_next(list_element);
283 match_transaction_changed_cb (GtkTreeSelection *selection,
289 if (!gtk_tree_selection_get_selected (selection, &model, &iter))
291 matcher->selected_match_info = NULL;
295 gtk_tree_model_get(model, &iter,
296 MATCHER_COL_INFO_PTR, &matcher->selected_match_info,
301 match_transaction_row_activated_cb (GtkTreeView *view, GtkTreePath *path,
302 GtkTreeViewColumn *column,
305 g_return_if_fail (matcher && matcher->transaction_matcher);
307 gtk_dialog_response (GTK_DIALOG (matcher->transaction_matcher),
312 add_column(GtkTreeView *view,
const gchar *title,
int col_num)
314 GtkCellRenderer *renderer;
315 GtkTreeViewColumn *column;
317 renderer = gtk_cell_renderer_text_new();
318 column = gtk_tree_view_column_new_with_attributes(title, renderer,
321 gtk_tree_view_append_column(view, column);
322 g_object_set(G_OBJECT(column),
333 GtkTreeSelection *selection;
335 view = matcher->downloaded_view;
336 store = gtk_list_store_new(NUM_DOWNLOADED_COLS,
337 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
338 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
340 gtk_tree_view_set_model(view, GTK_TREE_MODEL(store));
341 g_object_unref(store);
343 add_column(view, _(
"Account"), DOWNLOADED_COL_ACCOUNT);
344 add_column(view, _(
"Date"), DOWNLOADED_COL_DATE);
345 add_column(view, _(
"Amount"), DOWNLOADED_COL_AMOUNT);
346 add_column(view, _(
"Description"), DOWNLOADED_COL_DESCRIPTION);
347 add_column(view, _(
"Memo"), DOWNLOADED_COL_MEMO);
348 add_column(view, _(
"Balanced"), DOWNLOADED_COL_BALANCED);
350 selection = gtk_tree_view_get_selection(view);
351 g_signal_connect(selection,
"changed",
352 G_CALLBACK(downloaded_transaction_changed_cb), matcher);
360 GtkCellRenderer *renderer;
361 GtkTreeViewColumn *column;
362 GtkTreeSelection *selection;
364 view = matcher->match_view;
365 store = gtk_list_store_new(NUM_MATCHER_COLS,
366 G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_STRING,
367 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
369 gtk_tree_view_set_model(view, GTK_TREE_MODEL(store));
370 g_object_unref(store);
372 renderer = gtk_cell_renderer_pixbuf_new();
373 g_object_set(renderer,
"xalign", 0.0, NULL);
374 column = gtk_tree_view_column_new_with_attributes(_(
"Confidence"), renderer,
375 "pixbuf", MATCHER_COL_CONFIDENCE_PIXBUF,
377 renderer = gtk_cell_renderer_text_new();
378 gtk_tree_view_column_pack_start(column, renderer, TRUE);
379 gtk_tree_view_column_set_attributes(column, renderer,
380 "text", MATCHER_COL_CONFIDENCE,
382 gtk_tree_view_append_column(view, column);
384 add_column(view, _(
"Date"), MATCHER_COL_DATE);
385 add_column(view, _(
"Amount"), MATCHER_COL_AMOUNT);
386 add_column(view, _(
"Description"), MATCHER_COL_DESCRIPTION);
387 add_column(view, _(
"Memo"), MATCHER_COL_MEMO);
389 selection = gtk_tree_view_get_selection(view);
390 g_signal_connect(selection,
"changed",
391 G_CALLBACK(match_transaction_changed_cb), matcher);
392 g_signal_connect(view,
"row-activated",
393 G_CALLBACK(match_transaction_row_activated_cb), matcher);
411 builder = gtk_builder_new();
412 gnc_builder_add_from_file (builder,
"dialog-import.glade",
"match_picker");
413 g_return_if_fail (builder != NULL);
415 matcher->transaction_matcher = GTK_WIDGET(gtk_builder_get_object (builder,
"match_picker"));
416 matcher->downloaded_view = (GtkTreeView *)GTK_WIDGET(gtk_builder_get_object (builder,
"download_view"));
417 matcher->match_view = (GtkTreeView *)GTK_WIDGET(gtk_builder_get_object (builder,
"matched_view"));
419 gnc_import_match_picker_init_downloaded_view(matcher);
420 gnc_import_match_picker_init_match_view(matcher);
429 gnc_restore_window_size(GNC_PREFS_GROUP,
430 GTK_WINDOW (matcher->transaction_matcher));
431 gtk_widget_show(matcher->transaction_matcher);
433 g_object_unref(G_OBJECT(builder));
448 g_assert (transaction_info);
454 init_match_picker_gui(matcher);
457 downloaded_transaction_append(matcher, transaction_info);
463 gtk_window_set_modal(GTK_WINDOW(matcher->transaction_matcher), TRUE);
464 response = gtk_dialog_run (GTK_DIALOG (matcher->transaction_matcher));
465 gnc_save_window_size(GNC_PREFS_GROUP,
466 GTK_WINDOW (matcher->transaction_matcher));
467 gtk_widget_destroy (matcher->transaction_matcher);
470 if (response == GTK_RESPONSE_OK && matcher->selected_match_info != old)
474 matcher->selected_match_info,
void gnc_import_match_picker_run_and_close(GNCImportTransInfo *transaction_info)
time64 xaccTransGetDate(const Transaction *trans)
utility functions for the GnuCash UI
GNCImportSettings * gnc_import_Settings_new(void)
Generic importer backend interface.
void gnc_import_TransInfo_set_selected_match(GNCImportTransInfo *info, GNCImportMatchInfo *match, gboolean selected_manually)
Split * gnc_import_TransInfo_get_fsplit(const GNCImportTransInfo *info)
GdkPixbuf * gen_probability_pixbuf(gint score_original, GNCImportSettings *settings, GtkWidget *widget)
Transaction * gnc_import_TransInfo_get_trans(const GNCImportTransInfo *info)
Transaction * xaccSplitGetParent(const Split *split)
char * qof_print_date(time64 secs)
Split * gnc_import_MatchInfo_get_split(const GNCImportMatchInfo *info)
gint gnc_import_MatchInfo_get_probability(const GNCImportMatchInfo *info)
The transaction match picker dialog interface.
gnc_numeric xaccTransGetImbalanceValue(const Transaction *trans)
const char * xaccTransGetDescription(const Transaction *trans)
Account * xaccSplitGetAccount(const Split *s)
const char * xaccSplitGetMemo(const Split *split)
GList * gnc_import_TransInfo_get_match_list(const GNCImportTransInfo *info)
GNCImportMatchInfo * gnc_import_TransInfo_get_selected_match(const GNCImportTransInfo *info)
const char * xaccAccountGetName(const Account *acc)
gnc_numeric xaccSplitGetAmount(const Split *split)