Register rewrite - another update

Filter/sort should now work.

Author: Robert Fewell <14ubobit@gmail.com>

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@22514 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Geert Janssens
2012-11-03 08:20:18 +00:00
parent dac48014e4
commit 15f64e8bc3
7 changed files with 1063 additions and 571 deletions
+292 -158
View File
@@ -54,6 +54,8 @@ static void gnc_tree_model_split_reg_init (GncTreeModelSplitReg *model);
static void gnc_tree_model_split_reg_finalize (GObject *object);
static void gnc_tree_model_split_reg_dispose (GObject *object);
static const gchar *iter_to_string (GtkTreeIter *iter);
/** Implementation of GtkTreeModel **************************************/
static void gnc_tree_model_split_reg_tree_model_init (GtkTreeModelIface *iface);
@@ -69,6 +71,7 @@ static gboolean gnc_tree_model_split_reg_iter_has_child (GtkTreeModel *tree_mode
static int gnc_tree_model_split_reg_iter_n_children (GtkTreeModel *tree_model, GtkTreeIter *iter);
static gboolean gnc_tree_model_split_reg_iter_nth_child (GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *parent, int n);
static gboolean gnc_tree_model_split_reg_iter_parent (GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *child);
static void increment_stamp (GncTreeModelSplitReg *model);
/** Component Manager Callback ******************************************/
static void gnc_tree_model_split_reg_event_handler (QofInstance *entity, QofEventId event_type, GncTreeModelSplitReg *model, GncEventData *ed);
@@ -141,9 +144,9 @@ struct GncTreeModelSplitRegPrivate
*
*/
/* FIXME ***********************
/*FIXME This is the original define
#define VALID_ITER(model, iter) \
(GNC_IS_TREE_MODEL_SPLIT_REG(model) && \
(GNC_IS_TREE_MODEL_TRANSACTION(model) && \
((iter) && (iter)->user_data2) && \
((iter)->stamp == (model)->stamp) && \
(!IS_SPLIT(iter) ^ ((iter)->user_data3 != NULL)) && \
@@ -151,8 +154,30 @@ struct GncTreeModelSplitRegPrivate
((iter)->user_data2 == (model)->priv->bsplit_parent_node)) \
)
*/
/*FIXME I thought this would work, it does not ????????? */
/* Do we need to test for a valid iter every where, is it enougth to test on make iter ? */
#define VALID_ITER (model, iter) \
(GNC_IS_TREE_MODEL_SPLIT_REG (model) && \
((iter).user_data != NULL) && ((iter).user_data2 != NULL) && (model->stamp == (gint)(iter).stamp) && \
( (IS_SPLIT (iter) && (iter).user_data3) || (IS_BLANK_SPLIT (iter) && ((GList *)(iter).user_data2 == model->priv->bsplit_parent_node)) || \
(!IS_SPLIT (iter) && (iter).user_data2) || (IS_BLANK_TRANS (iter) && (iter).user_data3 == NULL)))
static gboolean
gtm_valid_iter (GncTreeModelSplitReg *model, GtkTreeIter *iter)
{
if (GNC_IS_TREE_MODEL_SPLIT_REG (model) && (iter->user_data != NULL) && (iter->user_data2 != NULL) && (model->stamp == (gint)iter->stamp)
&& ( (IS_SPLIT (iter) && iter->user_data3) || (IS_BLANK_SPLIT (iter) && ((GList *)iter->user_data2 == model->priv->bsplit_parent_node))
|| (!IS_SPLIT (iter) && iter->user_data2) || (IS_BLANK_TRANS (iter) && iter->user_data3 == NULL)))
return TRUE;
else
return FALSE;
}
static GtkTreeIter
make_iter(GncTreeModelSplitReg *model, gint f, GList *tnode, GList *snode)
make_iter (GncTreeModelSplitReg *model, gint f, GList *tnode, GList *snode)
{
GtkTreeIter iter, *iter_p;
iter_p = &iter;
@@ -161,12 +186,19 @@ make_iter(GncTreeModelSplitReg *model, gint f, GList *tnode, GList *snode)
iter.user_data2 = tnode;
iter.user_data3 = snode;
/* if (!VALID_ITER(model, &iter)) PERR("Making invalid iter"); */
//FIXME If I use this in place of 'if' below it works ??????
// if (!(GNC_IS_TREE_MODEL_SPLIT_REG (model) && (iter_p->user_data != NULL) && (iter_p->user_data2 != NULL) && (model->stamp == (gint)iter_p->stamp)
// && ( (IS_SPLIT (iter_p) && iter_p->user_data3) || (IS_BLANK_SPLIT (iter_p) && ((GList *)iter_p->user_data2 == model->priv->bsplit_parent_node))
// || (!IS_SPLIT (iter_p) && iter_p->user_data2) || (IS_BLANK_TRANS (iter_p) && iter_p->user_data3 == NULL) )))
// if (!VALID_ITER (model, &iter))
if (!(gtm_valid_iter (model, iter_p)))
PERR ("Making invalid iter %s", iter_to_string (iter_p));
return iter;
}
#define GNC_TREE_MODEL_SPLIT_REG_GET_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), GNC_TYPE_TREE_MODEL_SPLIT_REG, GncTreeModelSplitRegPrivate))
@@ -186,9 +218,9 @@ gnc_tree_model_split_reg_get_type (void)
{
static const GTypeInfo our_info =
{
sizeof (GncTreeModelSplitRegClass), /* class_size */
NULL, /* base_init */
NULL, /* base_finalize */
sizeof (GncTreeModelSplitRegClass), /* class_size */
NULL, /* base_init */
NULL, /* base_finalize */
(GClassInitFunc) gnc_tree_model_split_reg_class_init,
NULL, /* class_finalize */
NULL, /* class_data */
@@ -237,20 +269,20 @@ gnc_tree_model_split_reg_gconf_changed (GConfEntry *entry, gpointer user_data)
{
GncTreeModelSplitReg *model = user_data;
g_return_if_fail(entry && entry->key);
g_return_if_fail (entry && entry->key);
if (model == NULL)
return;
//g_print("gnc_tree_model_split_reg_gconf_changed\n");
if (g_str_has_suffix(entry->key, KEY_ACCOUNTING_LABELS))
if (g_str_has_suffix (entry->key, KEY_ACCOUNTING_LABELS))
{
// FIXME This only works on create, dynamic ?
model->use_accounting_labels = gnc_gconf_get_bool(GCONF_GENERAL, KEY_ACCOUNTING_LABELS, NULL);
model->use_accounting_labels = gnc_gconf_get_bool (GCONF_GENERAL, KEY_ACCOUNTING_LABELS, NULL);
//g_print("model->use_accounting_labels changed %d\n", model->use_accounting_labels);
}
else if (g_str_has_suffix(entry->key, KEY_ACCOUNT_SEPARATOR))
else if (g_str_has_suffix (entry->key, KEY_ACCOUNT_SEPARATOR))
{
model->separator_changed = TRUE; // FIXME Not dealt with this
}
@@ -287,40 +319,14 @@ gnc_tree_model_split_reg_init (GncTreeModelSplitReg *model)
static void
gnc_tree_model_split_reg_finalize (GObject *object)
{
GncTreeModelSplitRegPrivate *priv;
GncTreeModelSplitReg *model;
ENTER("model %p", object);
g_return_if_fail (object != NULL);
g_return_if_fail (GNC_IS_TREE_MODEL_SPLIT_REG (object));
g_print("gnc_tree_model_split_reg_finalize\n");
//g_print("gnc_tree_model_split_reg_finalize\n");
model = GNC_TREE_MODEL_SPLIT_REG (object);
priv = model->priv;
if (priv->event_handler_id)
{
qof_event_unregister_handler(priv->event_handler_id);
priv->event_handler_id = 0;
}
priv->book = NULL;
g_list_free(priv->tlist);
priv->tlist = NULL;
/* Free the blank split */
//FIXME do we need to free xaccFreeSplit (priv->bsplit);
priv->bsplit = NULL;
priv->bsplit_node = NULL;
/* Free the blank transaction */
//FIXME do we need to free xaccFreeTransaction (priv->btrans);
priv->btrans = NULL;
/*FIXME Other stuff here */
g_free(priv);
if (G_OBJECT_CLASS (parent_class)->finalize)
G_OBJECT_CLASS (parent_class)->finalize (object);
@@ -334,8 +340,7 @@ gnc_tree_model_split_reg_dispose (GObject *object)
GncTreeModelSplitRegPrivate *priv;
GncTreeModelSplitReg *model;
/*FIXME Not sure about this */
g_print("gnc_tree_model_split_reg_dispose\n");
//g_print("gnc_tree_model_split_reg_dispose\n");
ENTER("model %p", object);
g_return_if_fail (object != NULL);
g_return_if_fail (GNC_IS_TREE_MODEL_SPLIT_REG (object));
@@ -349,6 +354,21 @@ g_print("gnc_tree_model_split_reg_dispose\n");
priv->event_handler_id = 0;
}
priv->book = NULL;
g_list_free (priv->tlist);
priv->tlist = NULL;
/* Free the blank split */
priv->bsplit = NULL;
priv->bsplit_node = NULL;
/* Free the blank transaction */
priv->btrans = NULL;
/*FIXME Other stuff here */
g_free (priv);
if (G_OBJECT_CLASS (parent_class)->dispose)
G_OBJECT_CLASS (parent_class)->dispose (object);
LEAVE(" ");
@@ -402,7 +422,6 @@ g_print("gnc_tree_model_split_reg_new and Model pointer is %p\n", model);
priv->numact_list = gtk_list_store_new (1, G_TYPE_STRING);
priv->event_handler_id = qof_event_register_handler
((QofEventHandler)gnc_tree_model_split_reg_event_handler, model);
@@ -411,32 +430,77 @@ g_print("gnc_tree_model_split_reg_new and Model pointer is %p\n", model);
}
static gboolean
remove_foreach_func (GtkTreeModel *model,
GtkTreePath *path,
GtkTreeIter *iter,
GList **rowref_list)
{
GtkTreeRowReference *rowref;
g_assert ( rowref_list != NULL );
//g_print("for path is %s\n", gtk_tree_path_to_string (path));
rowref = gtk_tree_row_reference_new (model, path);
*rowref_list = g_list_append (*rowref_list, rowref);
return FALSE; /* do not stop walking the store, call us with next row */
}
static void
gtv_remove_all_rows (GncTreeModelSplitReg *model)
{
GList *rr_list = NULL; /* list of GtkTreeRowReferences to remove */
GList *node;
gtk_tree_model_foreach (GTK_TREE_MODEL(model), (GtkTreeModelForeachFunc)remove_foreach_func, &rr_list);
rr_list = g_list_reverse (rr_list);
for ( node = rr_list; node != NULL; node = node->next )
{
GtkTreePath *path;
path = gtk_tree_row_reference_get_path ((GtkTreeRowReference*)node->data);
if (path)
{
//g_print("rem row path is %s\n", gtk_tree_path_to_string (path));
gtk_tree_model_row_deleted (GTK_TREE_MODEL (model), path);
gtk_tree_path_free (path);
}
}
g_list_foreach (rr_list, (GFunc) gtk_tree_row_reference_free, NULL);
g_list_free (rr_list);
}
void
gnc_tree_model_split_reg_load (GncTreeModelSplitReg *model, GList *slist, Account *default_account)
{
GncTreeModelSplitRegPrivate *priv;
GList *tlist;
gint no_rows = 0;
ENTER("Load Model");
//g_print("gnc_tree_model_split_reg_load\n");
priv = model->priv;
/* Clear the treeview */
gtv_remove_all_rows (model);
priv->tlist = NULL;
g_print("Model load pointer is %p and slist length is %d\n", model, g_list_length (slist));
/* Get a list of Unique Transactions from an slist */
tlist = xaccSplitListGetUniqueTransactions (slist);
priv = model->priv;
priv->book = gnc_get_current_book();
priv->tlist = tlist;
priv->anchor = default_account;
priv->bsplit_parent_node = NULL;
/* Update the completion model liststores */
gnc_tree_model_split_reg_update_completion (model);
/* Add the blank transaction to the tlist */
priv->tlist = g_list_append (priv->tlist, priv->btrans);
tlist = g_list_append (tlist, priv->btrans);
priv->anchor = default_account;
priv->bsplit_parent_node = NULL;
priv->tlist = tlist;
LEAVE("Leave Model Load");
}
@@ -460,16 +524,12 @@ gnc_tree_model_split_reg_destroy (GncTreeModelSplitReg *model)
ENTER("reg=%p", model);
g_print("gnc_tree_model_split_reg_destroy\n");
gnc_gconf_general_remove_cb(KEY_ACCOUNTING_LABELS,
gnc_gconf_general_remove_cb (KEY_ACCOUNTING_LABELS,
gnc_tree_model_split_reg_gconf_changed,
model);
gnc_gconf_general_remove_cb(KEY_ACCOUNT_SEPARATOR,
gnc_gconf_general_remove_cb (KEY_ACCOUNT_SEPARATOR,
gnc_tree_model_split_reg_gconf_changed,
model);
/*FIXME this needs changing -> gnc_split_register_cleanup (reg); */
LEAVE(" ");
}
@@ -501,11 +561,22 @@ g_print("gnc_tree_model_split_reg_config\n");
model->style = newstyle;
model->use_double_line = use_double_line;
/*FIXME This might be treeview gnc_table_realize_gui (reg->table); */
}
/* Returns a Split that matches the current Account */
static Split *
get_account_split (GncTreeModelSplitReg *model, Transaction *trans)
{
int i;
Split *split = NULL;
Account *anchor = model->priv->anchor;
for (i = 0; (split = xaccTransGetSplit (trans, i)); i++) {
if (anchor == xaccSplitGetAccount (split))
return split;
}
return NULL;
}
@@ -630,6 +701,7 @@ gnc_tree_model_split_reg_get_iter (GtkTreeModel *tree_model,
{
/* Sets iter to a valid iterator pointing to path. */
GncTreeModelSplitReg *model = GNC_TREE_MODEL_SPLIT_REG (tree_model);
Account *account;
GList *tnode;
SplitList *slist;
GList *snode;
@@ -638,16 +710,18 @@ gnc_tree_model_split_reg_get_iter (GtkTreeModel *tree_model,
g_return_val_if_fail (GNC_IS_TREE_MODEL_SPLIT_REG (tree_model), FALSE);
{
gchar *path_string = gtk_tree_path_to_string(path);
gchar *path_string = gtk_tree_path_to_string (path);
ENTER("model %p, iter %p, path %s", tree_model, iter, path_string);
g_free(path_string);
g_free (path_string);
}
account = model->priv->anchor;
depth = gtk_tree_path_get_depth (path);
indices = gtk_tree_path_get_indices (path);
tnode = g_list_nth(model->priv->tlist, indices[0]);
tnode = g_list_nth (model->priv->tlist, indices[0]);
if (!tnode) {
DEBUG("path index off end of tlist");
@@ -664,7 +738,15 @@ gnc_tree_model_split_reg_get_iter (GtkTreeModel *tree_model,
snode = NULL;
}
else
snode = g_list_nth (slist, 0); //FIXME is this always the case or do we need to find it - account split
{
if (account != NULL)
{
Split *split = get_account_split (model, tnode->data); // get account split
snode = g_list_find (slist, split);
}
else
snode = g_list_nth (slist, 0); // else first split
}
}
else if (depth == 2) { /* Trans Row 2 */
flags = TROW2;
@@ -674,33 +756,41 @@ gnc_tree_model_split_reg_get_iter (GtkTreeModel *tree_model,
snode = NULL;
}
else
snode = g_list_nth (slist, 0); //FIXME is this always the case or do we need to find it - account split
{
if (account != NULL)
{
Split *split = get_account_split (model, tnode->data); // get account split
snode = g_list_find (slist, split);
}
else
snode = g_list_nth (slist, 0); // else first split
}
}
else if (depth == 3) /* Split */
{
flags = SPLIT;
{
flags = SPLIT;
/* Check if this is the blank split */
if ((tnode == model->priv->bsplit_parent_node) && (xaccTransCountSplits (tnode->data) == indices[2]))
{
flags |= BLANK;
snode = model->priv->bsplit_node;
}
else
snode = g_list_nth (slist, indices[2]);
/* Check if this is the blank split */
if ((tnode == model->priv->bsplit_parent_node) && (xaccTransCountSplits (tnode->data) == indices[2]))
{
flags |= BLANK;
snode = model->priv->bsplit_node;
}
else
snode = g_list_nth (slist, indices[2]);
if (!snode) {
DEBUG("path index off end of slist");
goto fail;
}
}
if (!snode) {
DEBUG("path index off end of slist");
goto fail;
}
}
else {
DEBUG("Invalid path depth");
goto fail;
}
*iter = make_iter(model, flags, tnode, snode);
*iter = make_iter (model, flags, tnode, snode);
/* g_assert(VALID_ITER(model, iter)); */
LEAVE("True");
return TRUE;
@@ -736,13 +826,15 @@ gnc_tree_model_split_reg_get_path (GtkTreeModel *tree_model, GtkTreeIter *iter)
/* Level 1 */
tpos = g_list_position (model->priv->tlist, tnode);
if (tpos == -1)
goto fail;
gtk_tree_path_append_index(path, tpos);
gtk_tree_path_append_index (path, tpos);
/* Level 2 - All ways 0 */
if (IS_TROW2 (iter))
gtk_tree_path_append_index(path, 0);
gtk_tree_path_append_index (path, 0);
/* Level 3 */
if (IS_SPLIT (iter))
@@ -806,7 +898,7 @@ gtm_get_read_only (GncTreeModelSplitReg *model, Transaction *trans)
/* Returns the row color */
static gchar*
gtm_get_row_color(GncTreeModelSplitReg *model, gboolean is_trow1, gboolean is_trow2, gboolean is_split, gint num)
gtm_get_row_color (GncTreeModelSplitReg *model, gboolean is_trow1, gboolean is_trow2, gboolean is_split, gint num)
{
gchar *cell_color = NULL;
@@ -872,7 +964,6 @@ gnc_tree_model_split_reg_get_value (GtkTreeModel *tree_model,
/* Initializes and sets value to that at column. When done with value,
g_value_unset() needs to be called to free any allocated memory. */
GncTreeModelSplitReg *model = GNC_TREE_MODEL_SPLIT_REG (tree_model);
Account *account;
Transaction *trans;
Split *split;
const GncGUID *guid;
@@ -881,9 +972,7 @@ gnc_tree_model_split_reg_get_value (GtkTreeModel *tree_model,
g_return_if_fail (GNC_IS_TREE_MODEL_SPLIT_REG (model));
ENTER("model %p, iter %s, col %d", tree_model, iter_to_string(iter), column);
account = model->priv->anchor;
ENTER("model %p, iter %s, col %d", tree_model, iter_to_string (iter), column);
tnode = (GList *) iter->user_data2;
trans = (Transaction *) tnode->data;
@@ -891,15 +980,15 @@ gnc_tree_model_split_reg_get_value (GtkTreeModel *tree_model,
snode = (GList *) iter->user_data3;
split = (Split *) snode->data;
g_value_init(value, gnc_tree_model_split_reg_get_column_type(tree_model, column));
g_value_init(value, gnc_tree_model_split_reg_get_column_type (tree_model, column));
indices = gtk_tree_path_get_indices (gtk_tree_model_get_path (GTK_TREE_MODEL(model), iter));
indices = gtk_tree_path_get_indices (gtk_tree_model_get_path (GTK_TREE_MODEL (model), iter));
switch (column)
{
case GNC_TREE_MODEL_SPLIT_REG_COL_GUID:
guid = qof_entity_get_guid(QOF_INSTANCE(trans));
g_value_set_pointer(value, (gpointer) guid);
guid = qof_entity_get_guid (QOF_INSTANCE (trans));
g_value_set_pointer (value, (gpointer) guid);
break;
case GNC_TREE_MODEL_SPLIT_REG_COL_DATE:
@@ -943,6 +1032,7 @@ gnc_tree_model_split_reg_iter_next (GtkTreeModel *tree_model, GtkTreeIter *iter)
If there is no next iter, FALSE is returned and iter is set to be
invalid */
GncTreeModelSplitReg *model = GNC_TREE_MODEL_SPLIT_REG (tree_model);
Account *account;
Transaction *trans;
SplitList *slist;
GList *tnode = NULL, *snode = NULL;
@@ -950,7 +1040,7 @@ gnc_tree_model_split_reg_iter_next (GtkTreeModel *tree_model, GtkTreeIter *iter)
g_return_val_if_fail (GNC_IS_TREE_MODEL_SPLIT_REG (model), FALSE);
ENTER("model %p, iter %s", tree_model, iter_to_string(iter));
ENTER("model %p, iter %s", tree_model, iter_to_string (iter));
if (IS_BLANK (iter)) {
LEAVE("Blanks never have a next");
@@ -962,6 +1052,8 @@ gnc_tree_model_split_reg_iter_next (GtkTreeModel *tree_model, GtkTreeIter *iter)
goto fail;
}
account = model->priv->anchor;
if (IS_TROW1 (iter)) {
flags = TROW1;
tnode = iter->user_data2;
@@ -972,19 +1064,26 @@ gnc_tree_model_split_reg_iter_next (GtkTreeModel *tree_model, GtkTreeIter *iter)
goto fail;
}
slist = xaccTransGetSplitList (tnode->data);
/* Check if this is the blank trans */
if (tnode->data == model->priv->btrans) {
flags |= BLANK;
snode = NULL;
}
else {
trans = tnode->data;
slist = xaccTransGetSplitList (trans);
snode = g_list_nth(slist, 0);
else
{
if (account != NULL)
{
Split *split = get_account_split (model, tnode->data); // get account split
snode = g_list_find (slist, split);
}
else
snode = g_list_nth (slist, 0); // else first split
}
}
if (IS_SPLIT(iter)) {
if (IS_SPLIT (iter)) {
flags = SPLIT;
tnode = iter->user_data2;
@@ -1011,7 +1110,6 @@ gnc_tree_model_split_reg_iter_next (GtkTreeModel *tree_model, GtkTreeIter *iter)
}
static gboolean
gnc_tree_model_split_reg_iter_children (GtkTreeModel *tree_model,
GtkTreeIter *iter,
@@ -1021,6 +1119,7 @@ gnc_tree_model_split_reg_iter_children (GtkTreeModel *tree_model,
FALSE is returned and iter is set to be invalid. Parent will remain a valid
node after this function has been called. */
GncTreeModelSplitReg *model = GNC_TREE_MODEL_SPLIT_REG (tree_model);
Account *account;
GList *tnode = NULL, *snode = NULL;
gint flags = 0;
Transaction *trans;
@@ -1030,25 +1129,38 @@ gnc_tree_model_split_reg_iter_children (GtkTreeModel *tree_model,
ENTER("model %p, iter %p (to be filed in), parent %s",
tree_model, iter, (parent_iter ? iter_to_string(parent_iter) : "(null)"));
if (!parent_iter) {
account = model->priv->anchor;
if (!parent_iter)
{
/* Get the very first iter */
tnode = model->priv->tlist;
if (tnode) {
tnode = g_list_first (model->priv->tlist);
if (tnode)
{
flags = TROW1;
if (tnode->data == model->priv->btrans) {
slist = xaccTransGetSplitList (tnode->data);
if (tnode->data == model->priv->btrans)
{
flags |= BLANK;
snode = NULL;
}
else
{
slist = xaccTransGetSplitList (tnode->data);
snode = g_list_nth (slist, 0);
if (account != NULL)
{
Split *split = get_account_split (model, tnode->data); // get account split
snode = g_list_find (slist, split);
}
else
snode = g_list_nth (slist, 0); // else first split
}
*iter = make_iter (model, flags, tnode, snode);
LEAVE("iter (2) %s", iter_to_string (iter));
return TRUE;
} else {
}
else
{
PERR("We should never have a NULL trans list.");
goto fail;
}
@@ -1060,28 +1172,53 @@ gnc_tree_model_split_reg_iter_children (GtkTreeModel *tree_model,
{
flags = TROW2;
tnode = parent_iter->user_data2;
if (tnode->data == model->priv->btrans) {
slist = xaccTransGetSplitList (tnode->data);
if (tnode->data == model->priv->btrans)
{
flags |= BLANK;
snode = NULL;
}
else
{
slist = xaccTransGetSplitList (tnode->data);
snode = g_list_nth (slist, 0); //FIXME is this always the case or do we need to find it - account split
if (account != NULL)
{
Split *split = get_account_split (model, tnode->data); // get account split
snode = g_list_find (slist, split);
}
else
snode = g_list_nth (slist, 0); // else first split
}
}
if (IS_TROW2 (parent_iter))
{
tnode = parent_iter->user_data2;
if ((tnode->data == model->priv->btrans) && (tnode != model->priv->bsplit_parent_node)) // blank trans has no splits to start with
goto fail;
}
if (IS_TROW2 (parent_iter))
{
flags = SPLIT;
tnode = parent_iter->user_data2;
slist = xaccTransGetSplitList (tnode->data);
if (tnode->data == model->priv->btrans)
snode = NULL;
if ((tnode->data == model->priv->btrans) && (tnode == model->priv->bsplit_parent_node))
{
flags |= BLANK;
snode = model->priv->bsplit_node;
}
else
{
slist = xaccTransGetSplitList (tnode->data);
snode = g_list_nth (slist, 0); //FIXME is this always the case or do we need to find it - account split
if (account != NULL)
{
Split *split = get_account_split (model, tnode->data); // get account split
snode = g_list_find (slist, split);
}
else
snode = g_list_nth (slist, 0); // else first split
}
}
@@ -1103,16 +1240,11 @@ gnc_tree_model_split_reg_iter_has_child (GtkTreeModel *tree_model, GtkTreeIter *
{
/* Returns TRUE if iter has children, FALSE otherwise. */
GncTreeModelSplitReg *model = GNC_TREE_MODEL_SPLIT_REG (tree_model);
GList *tnode;
Transaction *trans;
g_return_val_if_fail (GNC_IS_TREE_MODEL_SPLIT_REG (tree_model), FALSE);
ENTER("model %p, iter %s", tree_model, iter_to_string (iter));
tnode = iter->user_data2;
trans = tnode->data;
if (IS_TROW1 (iter))
{
LEAVE ("Transaction Row 1 is yes");
@@ -1177,6 +1309,7 @@ gnc_tree_model_split_reg_iter_nth_child (GtkTreeModel *tree_model,
{
/* Sets iter to be the n'th child of parent, using the given index. 0 > */
GncTreeModelSplitReg *model = GNC_TREE_MODEL_SPLIT_REG (tree_model);
Account *account;
Transaction *trans;
SplitList *slist;
GList *tnode, *snode;
@@ -1185,26 +1318,34 @@ gnc_tree_model_split_reg_iter_nth_child (GtkTreeModel *tree_model,
ENTER("model %p, iter %s, n %d", tree_model, iter_to_string (parent_iter), n);
g_return_val_if_fail (GNC_IS_TREE_MODEL_SPLIT_REG (tree_model), FALSE);
account = model->priv->anchor;
if (parent_iter == NULL) { /* Top-level */
flags = TROW1;
tnode = g_list_nth(model->priv->tlist, n);
tnode = g_list_nth (model->priv->tlist, n);
if (!tnode) {
PERR("Trans list should never be NULL.");
goto fail;
}
slist = xaccTransGetSplitList (tnode->data);
/* Check if this is the blank trans */
if (tnode->data == model->priv->btrans) {
if (tnode->data == model->priv->btrans)
{
flags |= BLANK;
snode = NULL;
}
else
{
trans = tnode->data;
slist = xaccTransGetSplitList (trans);
snode = g_list_nth (slist, 0); //FIXME is this always the case or do we need to find it - account split
if (account != NULL)
{
Split *split = get_account_split (model, tnode->data); // get account split
snode = g_list_find (slist, split);
}
else
snode = g_list_nth (slist, 0); // else first split
}
*iter = make_iter (model, flags, tnode, snode);
@@ -1238,19 +1379,18 @@ gnc_tree_model_split_reg_iter_nth_child (GtkTreeModel *tree_model,
}
else
{
flags = SPLIT;
if (tnode->data == model->priv->btrans)
{
snode = NULL;
}
else if ((tnode == model->priv->bsplit_parent_node) && (xaccTransCountSplits(trans) == n))
{
flags |= BLANK;
flags = SPLIT | BLANK;
snode = model->priv->bsplit_node;
}
else
{
flags = SPLIT;
slist = xaccTransGetSplitList (trans);
snode = g_list_nth (slist, n);
}
@@ -1317,6 +1457,7 @@ increment_stamp (GncTreeModelSplitReg *model)
while (model->stamp == 0);
}
gboolean
gnc_tree_model_split_reg_get_split_and_trans (
GncTreeModelSplitReg *model, GtkTreeIter *iter,
@@ -1336,11 +1477,14 @@ gnc_tree_model_split_reg_get_split_and_trans (
if (is_blank)
*is_blank = !!IS_BLANK(iter);
if (trans) {
if (trans)
{
node = iter->user_data2;
*trans = node ? (Transaction *) node->data : NULL;
}
if (split) {
if (split)
{
node = iter->user_data3;
*split = node ? (Split *) node->data : NULL;
}
@@ -1401,7 +1545,6 @@ gnc_tree_model_split_reg_get_path_to_split_and_trans (GncTreeModelSplitReg *mode
}
#define get_iter gnc_tree_model_split_reg_get_iter_from_trans_and_split
gboolean
gnc_tree_model_split_reg_get_iter_from_trans_and_split (
@@ -1417,7 +1560,7 @@ gnc_tree_model_split_reg_get_iter_from_trans_and_split (
g_return_val_if_fail (iter1, FALSE);
g_return_val_if_fail (iter2, FALSE);
g_print("get_iter model %p, trans %p, split %p\n", model, trans, split);
//g_print("get_iter model %p, trans %p, split %p\n", model, trans, split);
priv = model->priv;
if (split && !trans)
@@ -1449,14 +1592,9 @@ g_print("get_iter model %p, trans %p, split %p\n", model, trans, split);
if (!snode) return FALSE;
}
*iter1 = make_iter (model, flags1, tnode, snode);
//g_print("iter1 is %s\n", gtk_tree_model_get_string_from_iter (GTK_TREE_MODEL(model), iter1));
*iter2 = make_iter (model, flags2, tnode, snode);
//g_print("iter2 is %s\n", gtk_tree_model_get_string_from_iter (GTK_TREE_MODEL(model), iter2));
return TRUE;
}
@@ -1475,12 +1613,10 @@ update_parent (GncTreeModelSplitReg *model, GtkTreePath *path)
GList *tnode;
GtkTreeIter iter;
//g_print("update_parent 0 - '%s'\n", gtk_tree_path_to_string (path));
//g_print("update_parent - '%s'\n", gtk_tree_path_to_string (path));
if (gtk_tree_path_up (path) && gnc_tree_model_split_reg_get_iter (GTK_TREE_MODEL (model), &iter, path))
{
//g_print("update_parent 1 - '%s'\n", gtk_tree_path_to_string (path));
gtk_tree_model_row_changed (GTK_TREE_MODEL (model), path, &iter);
tnode = iter.user_data2;
@@ -1492,21 +1628,17 @@ update_parent (GncTreeModelSplitReg *model, GtkTreePath *path)
PINFO("toggling has_child at row %s\n", gtk_tree_path_to_string (path));
//g_print("update_parent - toggle Path is '%s'\n", gtk_tree_path_to_string (path));
gtk_tree_model_row_has_child_toggled (GTK_TREE_MODEL (model), path, &iter);
}
}
}
static void
insert_row_at (GncTreeModelSplitReg *model, GtkTreeIter *iter)
{
GtkTreePath *path;
g_print("insert_row_at\n");
//g_print("insert_row_at\n");
// g_assert (VALID_ITER (model, iter));
path = gnc_tree_model_split_reg_get_path (GTK_TREE_MODEL (model), iter);
//g_print("insert_row_at - Path is '%s'\n", gtk_tree_path_to_string (path));
@@ -1556,8 +1688,6 @@ delete_row_at_path (GncTreeModelSplitReg *model, GtkTreePath *path)
//g_print("delete_row_at_path bsplit - Path is '%s'\n", gtk_tree_path_to_string (path));
if (tnode == priv->bsplit_parent_node)
priv->bsplit_parent_node = NULL;
// priv->tlist = g_list_delete_link(priv->tlist, tnode);
}
}
}
@@ -1733,7 +1863,6 @@ make_new_blank_split (GncTreeModelSplitReg *model)
//g_print(" new bsplit is %p\n", split);
/* Insert the new row */
iter = make_iter (model, BLANK|SPLIT, tnode, model->priv->bsplit_node);
insert_row_at (model, &iter);
@@ -1773,27 +1902,33 @@ g_print("gnc_tree_model_split_reg_commit_blank_split\n");
return;
}
// if (xaccSplitGetAccount (bsplit) == NULL) //FIXME this would make sure we have an account, not sure its valid.
// xaccTransScrubOrphans (trans);
if (xaccSplitGetAccount (bsplit) == NULL) //FIXME this would make sure we have an account, not sure its valid.
xaccTransScrubOrphans (trans);
/* If we haven't set an amount yet, and there's an imbalance, use that. */
if (gnc_numeric_zero_p (xaccSplitGetAmount (bsplit)))
{
gnc_numeric imbal = gnc_numeric_neg (xaccTransGetImbalanceValue (trans));
if (!gnc_numeric_zero_p (imbal))
{
gnc_numeric amount, rate;
Account *acct = xaccSplitGetAccount (bsplit);
xaccSplitSetValue (bsplit, imbal);
if (gnc_commodity_equal (xaccAccountGetCommodity (acct), xaccTransGetCurrency (trans)))
{
amount = imbal;
}
else
{
{
rate = xaccTransGetAccountConvRate (trans, acct);
amount = gnc_numeric_mul (imbal, rate, xaccAccountGetCommoditySCU (acct), GNC_HOW_RND_ROUND);
}
if (gnc_numeric_check (amount) == GNC_ERROR_OK)
{
xaccSplitSetAmount (bsplit, amount);
}
}
}
/* Mark the old blank split as changed */
@@ -1855,7 +1990,6 @@ get_removal_path (GncTreeModelSplitReg *model, Transaction *trans,
/*###################################################################*/
/* Combo and Autocompletion ListStore functions */
Account *
gnc_tree_model_split_reg_get_anchor (GncTreeModelSplitReg *model)
{
@@ -2070,7 +2204,7 @@ gnc_tree_model_split_reg_get_action_list (GncTreeModelSplitReg *model)
break;
case CREDIT_REGISTER2:
gtk_list_store_insert_with_values (store, &iter, 100, 0, _("ATM Deposit"), -1);
gtk_list_store_insert_with_values (store, &iter, 100, 0, _("ATM Draw"), -1);
gtk_list_store_insert_with_values (store, &iter, 100, 0, _("ATM Withdraw"), -1);
gtk_list_store_insert_with_values (store, &iter, 100, 0, _("Buy"), -1);
gtk_list_store_insert_with_values (store, &iter, 100, 0, _("Credit"), -1);
gtk_list_store_insert_with_values (store, &iter, 100, 0, _("Fee"), -1);
@@ -2270,7 +2404,7 @@ gnc_tree_model_split_reg_event_handler (QofInstance *entity,
g_return_if_fail (GNC_IS_TREE_MODEL_SPLIT_REG (model));
g_print("\n\n--gnc_tree_model_split_reg_event_handler\n");
//g_print("\n\n--gnc_tree_model_split_reg_event_handler\n");
if (qof_instance_get_book (entity) != priv->book)
return;
@@ -2285,7 +2419,7 @@ g_print("\n\n--gnc_tree_model_split_reg_event_handler\n");
switch (event_type)
{
case QOF_EVENT_MODIFY:
g_print("--gnc_tree_model_split_reg_event_handler - Modify Split\n");
//g_print("--gnc_tree_model_split_reg_event_handler - Modify Split\n");
if (get_iter (model, NULL, split, &iter1, &iter2))
{
//g_print("--Change model %p split %p\n", model, split); //works
@@ -2306,7 +2440,7 @@ g_print("--gnc_tree_model_split_reg_event_handler - Modify Split\n");
switch (event_type)
{
case GNC_EVENT_ITEM_ADDED:
g_print("--gnc_tree_model_split_reg_event_handler - Add Split\n");
//g_print("--gnc_tree_model_split_reg_event_handler - Add Split\n");
split = (Split *) ed->node;
/* The blank split will be added to the transaction when
it's first edited. That will generate an event, but
@@ -2325,7 +2459,7 @@ g_print("--gnc_tree_model_split_reg_event_handler - Add Split\n");
}
break;
case GNC_EVENT_ITEM_REMOVED:
g_print("--gnc_tree_model_split_reg_event_handler - Remove Split\n");
//g_print("--gnc_tree_model_split_reg_event_handler - Remove Split\n");
split = (Split *) ed->node;
path = get_removal_path (model, trans, ed->idx);
@@ -2343,7 +2477,7 @@ g_print("--gnc_tree_model_split_reg_event_handler - Remove Split\n");
make_new_blank_split (model);
break;
case QOF_EVENT_MODIFY:
g_print("--gnc_tree_model_split_reg_event_handler - Modify Trans\n");
//g_print("--gnc_tree_model_split_reg_event_handler - Modify Trans\n");
/* The blank trans won't emit MODIFY until it's committed */
if (priv->btrans == trans)
{
@@ -2369,7 +2503,7 @@ g_print("--gnc_tree_model_split_reg_event_handler - Modify Trans\n");
break;
case QOF_EVENT_DESTROY:
g_print("--gnc_tree_model_split_reg_event_handler - Destroy Trans\n");
//g_print("--gnc_tree_model_split_reg_event_handler - Destroy Trans\n");
if (priv->btrans == trans)
{
tnode = g_list_find (priv->tlist, priv->btrans);
@@ -2398,7 +2532,7 @@ g_print("--Change blank trans %p\n",priv->btrans); // Not sure this is ever used
{
Account *acc;
case GNC_EVENT_ITEM_ADDED:
g_print("--gnc_tree_model_split_reg_event_handler - Add Account\n");
//g_print("--gnc_tree_model_split_reg_event_handler - Add Account\n");
split = (Split *) ed;
acc = xaccSplitGetAccount (split);
trans = xaccSplitGetParent (split);
+2 -2
View File
@@ -112,7 +112,7 @@ typedef struct
{
GncTreeModel gnc_tree_model; /**< The parent object data. */
GncTreeModelSplitRegPrivate *priv;
int stamp; /**< The state of the model. Any state change increments this number. */
gint stamp; /**< The state of the model. Any state change increments this number. */
SplitRegisterType2 type; /**<FIXME ? This may be the wrong place for these, may be the view ? */
SplitRegisterStyle2 style; /**<FIXME ? This may be the wrong place for these, may be the view ? */
@@ -120,7 +120,7 @@ typedef struct
gboolean is_template;
gboolean do_auto_complete; /**< whether to use auto-competion */
gboolean do_auto_complete; /**<FIXME Not setup - whether to use auto-competion */
gboolean use_accounting_labels; /**< whether to use accounting Labels */
gboolean separator_changed; /**< whether the separator has changed */
gboolean alt_colors_by_txn; /**< whether to use alternative colors by transaction */
File diff suppressed because it is too large Load Diff
@@ -55,11 +55,20 @@ typedef struct
GFunc moved_cb;
gpointer moved_cb_data;
gchar *help_text;
} GncTreeViewSplitReg;
typedef struct
{
GncTreeViewClass gnc_tree_view;
/* This signal is emitted when we update the view */
void (*update_signal) (GncTreeViewSplitReg *view, gpointer user_data);
/* This signal is emitted when we update the help text */
void (*help_signal) (GncTreeViewSplitReg *view, gpointer user_data);
} GncTreeViewSplitRegClass;
typedef enum {
+34 -29
View File
@@ -728,7 +728,7 @@ gnc_plugin_page_register2_finalize (GObject *object)
{
GncPluginPageRegister2 *page;
GncPluginPageRegister2Private *priv;
//g_print("gnc_plugin_page_register2_finalize\n");
g_return_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER2 (object));
ENTER("object %p", object);
@@ -914,7 +914,7 @@ g_print("Register New Create\n");
LEAVE("existing widget %p", priv->widget);
return priv->widget;
}
g_print("Register New Create - page %p\n", page);
priv->widget = gtk_vbox_new (FALSE, 0);
gtk_widget_show (priv->widget);
@@ -1053,8 +1053,8 @@ gnc_plugin_page_register2_destroy_widget (GncPluginPage *plugin_page)
ENTER("page %p", plugin_page);
page = GNC_PLUGIN_PAGE_REGISTER2 (plugin_page);
priv = GNC_PLUGIN_PAGE_REGISTER2_GET_PRIVATE(plugin_page);
gnc_gconf_general_remove_cb(KEY_SUMMARYBAR_POSITION,
//g_print("gnc_plugin_page_register2_destroy_widget\n");
gnc_gconf_general_remove_cb (KEY_SUMMARYBAR_POSITION,
gnc_plugin_page_register2_summarybar_position_changed, page);
if (priv->widget == NULL)
@@ -1062,29 +1062,36 @@ gnc_plugin_page_register2_destroy_widget (GncPluginPage *plugin_page)
if (priv->component_manager_id)
{
gnc_unregister_gui_component(priv->component_manager_id);
gnc_unregister_gui_component (priv->component_manager_id);
priv->component_manager_id = 0;
}
if (priv->event_handler_id)
{
qof_event_unregister_handler(priv->event_handler_id);
qof_event_unregister_handler (priv->event_handler_id);
priv->event_handler_id = 0;
}
if (priv->sd.dialog)
{
gtk_widget_destroy(priv->sd.dialog);
gtk_widget_destroy (priv->sd.dialog);
memset(&priv->sd, 0, sizeof(priv->sd));
}
if (priv->fd.dialog)
{
gtk_widget_destroy(priv->fd.dialog);
gtk_widget_destroy (priv->fd.dialog);
memset(&priv->fd, 0, sizeof(priv->fd));
}
gtk_widget_hide(priv->widget);
gtk_widget_hide (priv->widget);
if (priv->widget)
{
g_object_unref (G_OBJECT(priv->widget));
priv->widget = NULL;
}
gnc_ledger_display2_close (priv->ledger);
priv->ledger = NULL;
LEAVE(" ");
@@ -1099,11 +1106,11 @@ gnc_plugin_page_register2_window_changed (GncPluginPage *plugin_page,
g_return_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER2 (plugin_page));
page = GNC_PLUGIN_PAGE_REGISTER2(plugin_page);
priv = GNC_PLUGIN_PAGE_REGISTER2_GET_PRIVATE(page);
page = GNC_PLUGIN_PAGE_REGISTER2 (plugin_page);
priv = GNC_PLUGIN_PAGE_REGISTER2_GET_PRIVATE (page);
/* priv->gsr->window =
GTK_WIDGET(gnc_window_get_gtk_window(GNC_WINDOW(window)));
GTK_WIDGET(gnc_window_get_gtk_window (GNC_WINDOW (window)));
*/
}
@@ -1379,7 +1386,7 @@ gnc_plugin_page_register2_finish_pending (GncPluginPage *page)
priv = GNC_PLUGIN_PAGE_REGISTER2_GET_PRIVATE(reg_page);
model = gnc_ledger_display2_get_split_model_register(priv->ledger);
/*FIXME if (!model || !gnc_split_register_changed(model)) */
/*FIXME if (!model || !gnc_split_register_changed (model)) */
return TRUE;
name = gnc_plugin_page_register2_get_tab_name(page);
@@ -1410,11 +1417,11 @@ gnc_plugin_page_register2_finish_pending (GncPluginPage *page)
switch (response)
{
case GTK_RESPONSE_ACCEPT:
/*FIXME gnc_split_register_save(model, TRUE); */
/*FIXME gnc_split_register_save (model, TRUE); */
return TRUE;
case GTK_RESPONSE_REJECT:
/*FIXME gnc_split_register_cancel_cursor_trans_changes(model); */
/*FIXME gnc_split_register_cancel_cursor_trans_changes (model); */
/*FIXME gnc_split_register_save (model, TRUE); */
return TRUE;
@@ -3416,7 +3423,6 @@ gnc_plugin_page_register2_cmd_jump (GtkAction *action,
LEAVE("couldn't create new page");
return;
}
new_reg_page = GNC_PLUGIN_PAGE_REGISTER2 (new_page);
gnc_main_window_open_page (GNC_MAIN_WINDOW (window), new_page);
gsr = gnc_plugin_page_register2_get_gsr (new_page);
@@ -3608,29 +3614,28 @@ gnc_plugin_page_register2_get_gsr (GncPluginPage *plugin_page)
}
static void
gnc_plugin_page_help_changed_cb (GNCSplitReg2 *gsr, GncPluginPageRegister2 *register_page)
gnc_plugin_page_help_changed_cb (GNCSplitReg2 *gsr, GncPluginPageRegister2 *register_page) //this works
{
GncPluginPageRegister2Private *priv;
SplitRegister *reg;
GncTreeViewSplitReg *view;
GncWindow *window;
char *help;
//g_print("gnc_plugin_page_help_changed_cb register_page is %p\n", register_page);
g_return_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER2 (register_page));
g_return_if_fail(GNC_IS_PLUGIN_PAGE_REGISTER2(register_page));
window = GNC_WINDOW(GNC_PLUGIN_PAGE(register_page)->window);
window = GNC_WINDOW (GNC_PLUGIN_PAGE (register_page)->window);
if (!window)
{
// This routine can be called before the page is added to a
// window.
return;
}
/* Get the text from the ledger */
priv = GNC_PLUGIN_PAGE_REGISTER2_GET_PRIVATE(register_page);
reg = gnc_ledger_display2_get_split_register(priv->ledger);
help = gnc_table_get_help(reg->table);
gnc_window_set_status(window, GNC_PLUGIN_PAGE(register_page), help);
g_free(help);
/* Get the text from the view */
priv = GNC_PLUGIN_PAGE_REGISTER2_GET_PRIVATE (register_page);
view = gnc_ledger_display2_get_split_view_register (priv->ledger);
help = g_strdup (view->help_text); //FIXME might need to be a function
gnc_window_set_status (window, GNC_PLUGIN_PAGE (register_page), help);
g_free (help);
}
static void
@@ -3664,7 +3669,7 @@ gnc_plugin_page_register2_refresh_cb (GHashTable *changes, gpointer user_data)
//g_print("gnc_plugin_page_register2_refresh_cb 2\n");
/* Force updates */
/*FIXME gnucash_register_refresh_from_gconf(priv->gsr->reg); */
/*FIXME gnucash_register_refresh_from_gconf (priv->gsr->reg); */
gtk_widget_queue_draw(priv->widget);
}
+19 -18
View File
@@ -119,7 +119,7 @@ void gsr2_default_unvoid_txn_handler ( GNCSplitReg2 *w, gpointer ud );
void gsr2_default_reverse_txn_handler ( GNCSplitReg2 *w, gpointer ud );
static void gsr2_emit_simple_signal( GNCSplitReg2 *gsr, const char *sigName );
/*FIXME static void gsr2_emit_help_changed( GncTreeViewSplitReg *view, gpointer user_data ); */
static void gsr2_emit_help_changed (GncTreeViewSplitReg *view, gpointer user_data);
static void gsr2_emit_include_date_signal( GNCSplitReg2 *gsr, time_t date );
void gnc_split_reg2_cut_cb(GtkWidget *w, gpointer data);
@@ -446,7 +446,6 @@ g_print("gsr2_create_table\n");
/* This column gets all the free space */
gnc_tree_view_expand_columns (GNC_TREE_VIEW (view), "descnotes", NULL);
/*FIXME is this OK ? - Set the Reconcile column width */
col = gnc_tree_view_find_column_by_name (GNC_TREE_VIEW (view), "recn");
if (col != NULL)
@@ -485,29 +484,31 @@ g_print("gsr2_create_table\n");
g_signal_connect (gsr->reg, "redraw_all",
G_CALLBACK(gsr2_redraw_all_cb), gsr); */
/*FIXME I think this is to do with the help text at the bottom, we need to connect this to some thing
g_signal_connect (gsr->reg, "redraw_help",
G_CALLBACK(gsr2_emit_help_changed), gsr); */
g_signal_connect (view, "help_signal",
G_CALLBACK (gsr2_emit_help_changed), gsr); // this works
LEAVE(" ");
}
static
void
gsr2_setup_status_widgets( GNCSplitReg2 *gsr )
gsr2_setup_status_widgets (GNCSplitReg2 *gsr)
{
GncTreeModelSplitReg *model;
gboolean use_double_line;
model = gnc_ledger_display2_get_split_model_register( gsr->ledger );
use_double_line = gnc_ledger_display2_default_double_line( gsr->ledger );
model = gnc_ledger_display2_get_split_model_register (gsr->ledger);
use_double_line = gnc_ledger_display2_default_double_line (gsr->ledger);
/* be sure to initialize the gui elements */
gnc_tree_model_split_reg_config( model, model->type, model->style, use_double_line );
gnc_tree_model_split_reg_config (model, model->type, model->style, use_double_line);
}
void
gnc_split_reg2_destroy_cb(GtkWidget *widget, gpointer data)
gnc_split_reg2_destroy_cb (GtkWidget *widget, gpointer data)
{
//g_print("gnc_split_reg2_destroy_cb - does not do any thing\n");
}
/**
@@ -532,13 +533,13 @@ gnc_split_reg2_raise( GNCSplitReg2 *gsr )
**/
static
void
gsr2_update_summary_label( GtkWidget *label,
gsr2_update_summary_label (GtkWidget *label,
xaccGetBalanceFn getter,
Account *leader,
GNCPrintAmountInfo print_info,
gnc_commodity *cmdty,
gboolean reverse,
gboolean euroFlag )
gboolean euroFlag)
{
gnc_numeric amount;
char string[256];
@@ -603,9 +604,9 @@ account_latest_price_any_currency (Account *account)
price_list = gnc_pricedb_lookup_latest_any_currency (pdb, commodity);
if (!price_list) return NULL;
result = gnc_price_clone((GNCPrice *)(price_list->data), book);
result = gnc_price_clone ((GNCPrice *)(price_list->data), book);
gnc_price_list_destroy(price_list);
gnc_price_list_destroy (price_list);
return result;
}
@@ -2015,7 +2016,7 @@ gsr2_create_summary_bar( GNCSplitReg2 *gsr )
gsr->summarybar = summarybar;
/* Force the first update */
gsr2_redraw_all_cb(NULL, gsr);
gsr2_redraw_all_cb (NULL, gsr);
return gsr->summarybar;
}
@@ -2163,7 +2164,7 @@ gnc_split_reg2_get_parent( GNCLedgerDisplay2 *ledger )
static
void
gsr2_emit_help_changed (GncTreeViewSplitReg *view, gpointer user_data )
gsr2_emit_help_changed (GncTreeViewSplitReg *view, gpointer user_data ) //this works
{
gsr2_emit_simple_signal ((GNCSplitReg2*)user_data, "help-changed" );
}
@@ -2177,7 +2178,7 @@ gsr2_emit_include_date_signal( GNCSplitReg2 *gsr, time_t date )
static
void
gsr2_emit_simple_signal( GNCSplitReg2 *gsr, const char *sigName )
gsr2_emit_simple_signal( GNCSplitReg2 *gsr, const char *sigName ) //this works
{
g_signal_emit_by_name( gsr, sigName, NULL );
}
@@ -2219,7 +2220,7 @@ gnc_split_reg2_get_read_only( GNCSplitReg2 *gsr )
}
void
gnc_split_reg2_set_moved_cb( GNCSplitReg2 *gsr, GFunc cb, gpointer cb_data )
gnc_split_reg2_set_moved_cb( GNCSplitReg2 *gsr, GFunc cb, gpointer cb_data ) //this works
{
g_print("gnc_split_reg2_set_moved_cb\n");
gnc_tree_view_split_reg_moved_cb (gnc_ledger_display2_get_split_view_register(gsr->ledger), cb, cb_data);
+10 -9
View File
@@ -612,7 +612,7 @@ refresh_handler (GHashTable *changes, gpointer user_data)
*/
splits = qof_query_run (ld->query);
// gnc_ledger_display2_set_watches (ld, splits);
gnc_ledger_display2_set_watches (ld, splits);
gnc_ledger_display2_refresh_internal (ld, splits);
LEAVE(" ");
@@ -625,7 +625,7 @@ close_handler (gpointer user_data)
if (!ld)
return;
//g_print("ledger close_handler\n");
gnc_unregister_gui_component (ld->component_id);
if (ld->destroy)
@@ -633,6 +633,7 @@ close_handler (gpointer user_data)
gnc_tree_model_split_reg_destroy (ld->model);
ld->model = NULL;
ld->view = NULL;
qof_query_destroy (ld->query);
ld->query = NULL;
@@ -821,7 +822,7 @@ gnc_ledger_display2_internal (Account *lead_account, Query *q,
splits = qof_query_run (ld->query);
// gnc_ledger_display2_set_watches (ld, splits);
gnc_ledger_display2_set_watches (ld, splits);
gnc_ledger_display2_refresh_internal (ld, splits);
@@ -890,11 +891,11 @@ g_print("gnc_ledger_display2_refresh_internal\n");
else
{
ld->loading = TRUE;
/*FIXME All this may not be required !!!!! */
smodel = gtk_tree_view_get_model (GTK_TREE_VIEW (ld->view)); // this is the sort model
model = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (smodel)); // our model
//g_print("view is %p model is %p and smodel is %p\n", ld->view, model, smodel);
g_object_ref (smodel);
g_object_ref (model);
@@ -904,10 +905,10 @@ g_print("gnc_ledger_display2_refresh_internal\n");
gnc_tree_model_split_reg_load (ld->model, splits, gnc_ledger_display2_leader (ld)); //reload splits
// smodel = gtk_tree_model_sort_new_with_model (model); // create new sort model
//Not needed smodel = gtk_tree_model_sort_new_with_model (model); // create new sort model
gtk_tree_view_set_model (GTK_TREE_VIEW(ld->view), GTK_TREE_MODEL (smodel)); // Re-attach sort model to view
//g_print("view is %p model is %p and smodel is %p\n", ld->view, model, smodel);
gnc_tree_view_split_reg_block_selection (ld->view, FALSE); // This unblocks the tree selection
/* Set the default selection start position */
@@ -981,7 +982,6 @@ gnc_ledger_display2_refresh_by_split_register (GncTreeModelSplitReg *model)
}
}
void
gnc_ledger_display2_set_split_view_refresh (GNCLedgerDisplay2 *ld, gboolean ok)
{
@@ -990,11 +990,12 @@ gnc_ledger_display2_set_split_view_refresh (GNCLedgerDisplay2 *ld, gboolean ok)
ld->refresh_ok = ok;
}
void
gnc_ledger_display2_close (GNCLedgerDisplay2 *ld)
{
if (!ld)
return;
//g_print("gnc_ledger_display2_close\n");
gnc_close_gui_component (ld->component_id);
}