mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Get Non Bayesian and Online ID information
This commit is contained in:
parent
2e4c957d00
commit
837e068392
@ -89,6 +89,8 @@ void gnc_bayes_dialog_window_destroy_cb (GtkWidget *object, gpointer data);
|
||||
void gnc_bayes_dialog_close_cb (GtkDialog *dialog, gpointer data);
|
||||
void gnc_bayes_dialog_response_cb (GtkDialog *dialog, gint response_id, gpointer data);
|
||||
|
||||
static void get_account_info (BayesDialog *bayes_dialog);
|
||||
|
||||
void
|
||||
gnc_bayes_dialog_window_destroy_cb (GtkWidget *object, gpointer data)
|
||||
{
|
||||
@ -130,6 +132,179 @@ gnc_bayes_dialog_response_cb (GtkDialog *dialog, gint response_id, gpointer data
|
||||
}
|
||||
}
|
||||
|
||||
/** Event handler for clicking one of the list type radio buttons.
|
||||
* @param button The "List Type" radio button
|
||||
* @param bayes_dialog The display of the data
|
||||
*/
|
||||
static void
|
||||
list_type_selected (GtkToggleButton* button, BayesDialog *bayes_dialog)
|
||||
{
|
||||
GncListType type;
|
||||
|
||||
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(bayes_dialog->radio_bayes)))
|
||||
type = BAYES;
|
||||
else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(bayes_dialog->radio_nbayes)))
|
||||
type = NBAYES;
|
||||
else
|
||||
type = ONLINE;
|
||||
|
||||
// Lets do this only on change of list type
|
||||
if (type != bayes_dialog->type)
|
||||
{
|
||||
bayes_dialog->type = type;
|
||||
get_account_info (bayes_dialog);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
add_to_store (gpointer user_data)
|
||||
{
|
||||
GtkTreeIter iter;
|
||||
gchar *fullname = NULL;
|
||||
gchar *map_fullname = NULL;
|
||||
|
||||
struct kvp_info *kvpInfo = (struct kvp_info*)user_data;
|
||||
|
||||
gtk_list_store_append (GTK_LIST_STORE(kvpInfo->store), &iter);
|
||||
|
||||
fullname = gnc_account_get_full_name (kvpInfo->source_account);
|
||||
|
||||
map_fullname = gnc_account_get_full_name (kvpInfo->map_account);
|
||||
|
||||
PINFO("Add to Store: Source Acc '%s', Based on '%s', Map Acc '%s'", fullname, kvpInfo->based_on, map_fullname);
|
||||
|
||||
gtk_list_store_set (GTK_LIST_STORE(kvpInfo->store), &iter,
|
||||
SOURCE_FULL_ACC, fullname, SOURCE_ACCOUNT, kvpInfo->source_account,
|
||||
BASED_ON, kvpInfo->based_on,
|
||||
MATCH_STRING, kvpInfo->match_string,
|
||||
MAP_FULL_ACC, map_fullname, MAP_ACCOUNT, kvpInfo->map_account,
|
||||
KVP_PATH, kvpInfo->kvp_path, PROBABILITY, kvpInfo->probability, -1);
|
||||
|
||||
g_free (fullname);
|
||||
g_free (map_fullname);
|
||||
}
|
||||
|
||||
static void
|
||||
build_non_bayes (const char *key, const GValue *value, gpointer data)
|
||||
{
|
||||
if (G_VALUE_HOLDS_BOXED (value))
|
||||
{
|
||||
QofBook *book;
|
||||
GncGUID *guid = NULL;
|
||||
gchar *kvp_path;
|
||||
|
||||
struct kvp_info *kvpInfo = (struct kvp_info*)data;
|
||||
|
||||
// Get the book
|
||||
book = gnc_get_current_book();
|
||||
|
||||
guid = (GncGUID*)g_value_get_boxed (value);
|
||||
|
||||
PINFO("build_non_bayes: account '%s', match account guid: '%s'", (char*)key, guid_to_string(guid));
|
||||
|
||||
kvp_path = g_strconcat (kvpInfo->kvp_path_head, "/", key, NULL);
|
||||
|
||||
PINFO("build_non_bayes: kvp_path is '%s'", kvp_path);
|
||||
|
||||
kvpInfo->map_account = xaccAccountLookup (guid, book);
|
||||
kvpInfo->match_string = key;
|
||||
kvpInfo->kvp_path = kvp_path;
|
||||
kvpInfo->probability = " ";
|
||||
|
||||
// Add kvp data to store
|
||||
add_to_store (kvpInfo);
|
||||
|
||||
g_free (kvp_path);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
get_account_info (BayesDialog *bayes_dialog)
|
||||
{
|
||||
Account *root;
|
||||
Account *acc;
|
||||
GList *accts, *ptr;
|
||||
GtkTreeIter iter;
|
||||
GtkTreeModel *store;
|
||||
|
||||
struct kvp_info kvpInfo;
|
||||
|
||||
/* Get list of Accounts */
|
||||
root = gnc_book_get_root_account (gnc_get_current_book());
|
||||
accts = gnc_account_get_descendants_sorted (root);
|
||||
|
||||
store = gtk_tree_view_get_model (GTK_TREE_VIEW(bayes_dialog->view));
|
||||
gtk_list_store_clear (GTK_LIST_STORE(store));
|
||||
kvpInfo.store = store;
|
||||
|
||||
/* Go through list of accounts */
|
||||
for (ptr = accts; ptr; ptr = g_list_next (ptr))
|
||||
{
|
||||
Account *acc = ptr->data;
|
||||
gchar *kvp_path_head = NULL;
|
||||
|
||||
// Save source account
|
||||
kvpInfo.source_account = acc;
|
||||
|
||||
if (bayes_dialog->type == NBAYES)
|
||||
{
|
||||
kvp_path_head = g_strdup_printf (IMAP_FRAME "/%s", IMAP_FRAME_DESC);
|
||||
|
||||
kvpInfo.based_on = _("Description Field");
|
||||
kvpInfo.kvp_path_head = kvp_path_head;
|
||||
|
||||
if (qof_instance_has_slot (QOF_INSTANCE(acc), kvp_path_head))
|
||||
qof_instance_foreach_slot (QOF_INSTANCE(acc), kvp_path_head, build_non_bayes, &kvpInfo);
|
||||
|
||||
g_free (kvp_path_head);
|
||||
kvp_path_head = g_strdup_printf (IMAP_FRAME "/%s", IMAP_FRAME_MEMO);
|
||||
|
||||
kvpInfo.based_on = _("Memo Field");
|
||||
kvpInfo.kvp_path_head = kvp_path_head;
|
||||
|
||||
if (qof_instance_has_slot (QOF_INSTANCE (acc), kvp_path_head))
|
||||
qof_instance_foreach_slot (QOF_INSTANCE(acc), kvp_path_head, build_non_bayes, &kvpInfo);
|
||||
|
||||
g_free (kvp_path_head);
|
||||
kvp_path_head = g_strdup_printf (IMAP_FRAME "/%s", IMAP_FRAME_CSV);
|
||||
|
||||
kvpInfo.based_on = _("CSV Account Map");
|
||||
kvpInfo.kvp_path_head = kvp_path_head;
|
||||
|
||||
if (qof_instance_has_slot (QOF_INSTANCE(acc), kvp_path_head))
|
||||
qof_instance_foreach_slot (QOF_INSTANCE(acc), kvp_path_head, build_non_bayes, &kvpInfo);
|
||||
|
||||
g_free (kvp_path_head);
|
||||
}
|
||||
|
||||
if (bayes_dialog->type == ONLINE)
|
||||
{
|
||||
GValue v = G_VALUE_INIT;
|
||||
|
||||
kvpInfo.based_on = _("Online Id");
|
||||
kvpInfo.kvp_path = "online_id";
|
||||
|
||||
if (qof_instance_has_slot (QOF_INSTANCE(acc), kvpInfo.kvp_path))
|
||||
{
|
||||
qof_instance_get_kvp (QOF_INSTANCE(acc), kvpInfo.kvp_path, &v);
|
||||
|
||||
if (G_VALUE_HOLDS_STRING (&v))
|
||||
{
|
||||
const gchar *string = g_value_get_string (&v);
|
||||
|
||||
kvpInfo.map_account = kvpInfo.source_account;
|
||||
kvpInfo.match_string = string;
|
||||
kvpInfo.probability = " ";
|
||||
|
||||
// Add kvp data to store
|
||||
add_to_store (&kvpInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
g_list_free (accts);
|
||||
}
|
||||
|
||||
static void
|
||||
gnc_bayes_dialog_create (GtkWidget *parent, BayesDialog *bayes_dialog)
|
||||
{
|
||||
@ -156,6 +331,10 @@ gnc_bayes_dialog_create (GtkWidget *parent, BayesDialog *bayes_dialog)
|
||||
bayes_dialog->radio_bayes = GTK_WIDGET(gtk_builder_get_object (builder, "radio-bayes"));
|
||||
bayes_dialog->radio_nbayes = GTK_WIDGET(gtk_builder_get_object (builder, "radio-nbayes"));
|
||||
bayes_dialog->radio_online = GTK_WIDGET(gtk_builder_get_object (builder, "radio-online"));
|
||||
g_signal_connect (bayes_dialog->radio_bayes, "toggled",
|
||||
G_CALLBACK(list_type_selected), (gpointer)bayes_dialog);
|
||||
g_signal_connect (bayes_dialog->radio_nbayes, "toggled",
|
||||
G_CALLBACK(list_type_selected), (gpointer)bayes_dialog);
|
||||
|
||||
bayes_dialog->view = GTK_WIDGET(gtk_builder_get_object (builder, "treeview"));
|
||||
|
||||
@ -173,6 +352,7 @@ gnc_bayes_dialog_create (GtkWidget *parent, BayesDialog *bayes_dialog)
|
||||
g_object_unref (G_OBJECT(builder));
|
||||
|
||||
gnc_restore_window_size (GNC_PREFS_GROUP, GTK_WINDOW(bayes_dialog->dialog));
|
||||
get_account_info (bayes_dialog);
|
||||
|
||||
LEAVE(" ");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user