Get Non Bayesian and Online ID information

This commit is contained in:
Robert Fewell 2015-11-18 11:34:29 +00:00 committed by John Ralls
parent 2e4c957d00
commit 837e068392

View File

@ -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(" ");
}