mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Bug 797768 - View Lots sorting numbers not right.
When you try and sort on balance, amount and value the columns are sorted alphabetically as opposed to numeric value. Fixed by adding extra double columns to the list store and use them to sort the numeric columns.
This commit is contained in:
parent
6419857462
commit
c0abdb28d1
@ -61,7 +61,9 @@ enum lot_cols
|
||||
LOT_COL_CLOSE,
|
||||
LOT_COL_TITLE,
|
||||
LOT_COL_BALN,
|
||||
LOT_COL_BALN_DOUBLE, // used only for sorting
|
||||
LOT_COL_GAINS,
|
||||
LOT_COL_GAINS_DOUBLE, // used only for sorting
|
||||
LOT_COL_PNTR,
|
||||
NUM_LOT_COLS
|
||||
};
|
||||
@ -72,9 +74,13 @@ enum split_cols
|
||||
SPLIT_COL_NUM,
|
||||
SPLIT_COL_DESCRIPTION,
|
||||
SPLIT_COL_AMOUNT,
|
||||
SPLIT_COL_AMOUNT_DOUBLE, // used only for sorting
|
||||
SPLIT_COL_VALUE,
|
||||
SPLIT_COL_VALUE_DOUBLE, // used only for sorting
|
||||
SPLIT_COL_GAIN_LOSS,
|
||||
SPLIT_COL_GAIN_LOSS_DOUBLE, // used only for sorting
|
||||
SPLIT_COL_BALANCE,
|
||||
SPLIT_COL_BALANCE_DOUBLE, // used only for sorting
|
||||
SPLIT_COL_PNTR,
|
||||
NUM_SPLIT_COLS
|
||||
};
|
||||
@ -403,11 +409,13 @@ gnc_lot_viewer_fill (GNCLotViewer *lv)
|
||||
xaccSPrintAmount (baln_buff, amt_baln,
|
||||
gnc_account_print_info (lv->account, TRUE));
|
||||
gtk_list_store_set(store, &iter, LOT_COL_BALN, baln_buff, -1);
|
||||
gtk_list_store_set(store, &iter, LOT_COL_BALN_DOUBLE, gnc_numeric_to_double (amt_baln), -1);
|
||||
|
||||
/* Capital Gains/Losses Appreciation/Depreciation */
|
||||
xaccSPrintAmount (gain_buff, gains_baln,
|
||||
gnc_commodity_print_info (currency, TRUE));
|
||||
gtk_list_store_set(store, &iter, LOT_COL_GAINS, gain_buff, -1);
|
||||
gtk_list_store_set(store, &iter, LOT_COL_GAINS_DOUBLE, gnc_numeric_to_double (gains_baln), -1);
|
||||
|
||||
/* Self-reference */
|
||||
gtk_list_store_set(store, &iter, LOT_COL_PNTR, lot, -1);
|
||||
@ -524,6 +532,7 @@ gnc_split_viewer_fill (GNCLotViewer *lv, GtkListStore *store, SplitList *split_l
|
||||
xaccSPrintAmount (amtbuff, amnt,
|
||||
gnc_account_print_info (lv->account, TRUE));
|
||||
gtk_list_store_set (store, &iter, SPLIT_COL_AMOUNT, amtbuff, -1);
|
||||
gtk_list_store_set (store, &iter, SPLIT_COL_AMOUNT_DOUBLE, gnc_numeric_to_double (amnt), -1);
|
||||
|
||||
/* Value.
|
||||
* For non-business accounts which are part of a lot,
|
||||
@ -535,6 +544,7 @@ gnc_split_viewer_fill (GNCLotViewer *lv, GtkListStore *store, SplitList *split_l
|
||||
xaccSPrintAmount (valbuff, valu,
|
||||
gnc_commodity_print_info (currency, TRUE));
|
||||
gtk_list_store_set (store, &iter, SPLIT_COL_VALUE, valbuff, -1);
|
||||
gtk_list_store_set (store, &iter, SPLIT_COL_VALUE_DOUBLE, gnc_numeric_to_double (valu), -1);
|
||||
|
||||
/* Gains. Blank if none. */
|
||||
gains = xaccSplitGetCapGains (split);
|
||||
@ -548,6 +558,7 @@ gnc_split_viewer_fill (GNCLotViewer *lv, GtkListStore *store, SplitList *split_l
|
||||
gnc_commodity_print_info (currency, TRUE));
|
||||
}
|
||||
gtk_list_store_set (store, &iter, SPLIT_COL_GAIN_LOSS, gainbuff, -1);
|
||||
gtk_list_store_set (store, &iter, SPLIT_COL_GAIN_LOSS_DOUBLE, gnc_numeric_to_double (gains), -1);
|
||||
|
||||
/* Balance of Gains */
|
||||
baln = gnc_numeric_add_fixed (baln, amnt);
|
||||
@ -561,6 +572,7 @@ gnc_split_viewer_fill (GNCLotViewer *lv, GtkListStore *store, SplitList *split_l
|
||||
gnc_account_print_info (lv->account, TRUE));
|
||||
}
|
||||
gtk_list_store_set (store, &iter, SPLIT_COL_BALANCE, balnbuff, -1);
|
||||
gtk_list_store_set (store, &iter, SPLIT_COL_BALANCE_DOUBLE, gnc_numeric_to_double (baln), -1);
|
||||
|
||||
/* Self-reference */
|
||||
gtk_list_store_set(store, &iter, SPLIT_COL_PNTR, split, -1);
|
||||
@ -824,8 +836,10 @@ lv_init_lot_view (GNCLotViewer *lv)
|
||||
|
||||
view = lv->lot_view;
|
||||
store = gtk_list_store_new(NUM_LOT_COLS, G_TYPE_STRING, G_TYPE_INT64,
|
||||
G_TYPE_INT64, G_TYPE_STRING, G_TYPE_STRING,
|
||||
G_TYPE_STRING, G_TYPE_POINTER);
|
||||
G_TYPE_INT64, G_TYPE_STRING,
|
||||
G_TYPE_STRING, G_TYPE_DOUBLE,
|
||||
G_TYPE_STRING,G_TYPE_DOUBLE,
|
||||
G_TYPE_POINTER);
|
||||
gtk_tree_view_set_model(view, GTK_TREE_MODEL(store));
|
||||
g_object_unref(store);
|
||||
lv->lot_store = store;
|
||||
@ -866,13 +880,13 @@ lv_init_lot_view (GNCLotViewer *lv)
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
column = gtk_tree_view_column_new_with_attributes(_("Balance"), renderer,
|
||||
"text", LOT_COL_BALN, NULL);
|
||||
gtk_tree_view_column_set_sort_column_id(column, LOT_COL_BALN);
|
||||
gtk_tree_view_column_set_sort_column_id (column, LOT_COL_BALN_DOUBLE);
|
||||
gtk_tree_view_append_column(view, column);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
column = gtk_tree_view_column_new_with_attributes(_("Gains"), renderer,
|
||||
"text", LOT_COL_GAINS, NULL);
|
||||
gtk_tree_view_column_set_sort_column_id(column, LOT_COL_GAINS);
|
||||
gtk_tree_view_column_set_sort_column_id (column, LOT_COL_GAINS_DOUBLE);
|
||||
gtk_tree_view_append_column(view, column);
|
||||
|
||||
/* Set up signals */
|
||||
@ -896,9 +910,12 @@ lv_init_split_view (GNCLotViewer *lv, GtkTreeView *view)
|
||||
|
||||
g_return_val_if_fail(GTK_IS_TREE_VIEW(view), NULL);
|
||||
|
||||
store = gtk_list_store_new(NUM_SPLIT_COLS, G_TYPE_INT64, G_TYPE_STRING,
|
||||
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
|
||||
store = gtk_list_store_new(NUM_SPLIT_COLS, G_TYPE_INT64,
|
||||
G_TYPE_STRING, G_TYPE_STRING,
|
||||
G_TYPE_STRING, G_TYPE_DOUBLE,
|
||||
G_TYPE_STRING, G_TYPE_DOUBLE,
|
||||
G_TYPE_STRING, G_TYPE_DOUBLE,
|
||||
G_TYPE_STRING, G_TYPE_DOUBLE,
|
||||
G_TYPE_POINTER);
|
||||
gtk_tree_view_set_model(view, GTK_TREE_MODEL(store));
|
||||
g_object_unref(store);
|
||||
@ -929,25 +946,25 @@ lv_init_split_view (GNCLotViewer *lv, GtkTreeView *view)
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
column = gtk_tree_view_column_new_with_attributes(_("Amount"), renderer,
|
||||
"text", SPLIT_COL_AMOUNT, NULL);
|
||||
gtk_tree_view_column_set_sort_column_id(column, SPLIT_COL_AMOUNT);
|
||||
gtk_tree_view_column_set_sort_column_id (column, SPLIT_COL_AMOUNT_DOUBLE);
|
||||
gtk_tree_view_append_column(view, column);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
column = gtk_tree_view_column_new_with_attributes(_("Value"), renderer,
|
||||
"text", SPLIT_COL_VALUE, NULL);
|
||||
gtk_tree_view_column_set_sort_column_id(column, SPLIT_COL_VALUE);
|
||||
gtk_tree_view_column_set_sort_column_id (column, SPLIT_COL_VALUE_DOUBLE);
|
||||
gtk_tree_view_append_column(view, column);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
column = gtk_tree_view_column_new_with_attributes(_("Gain/Loss"), renderer,
|
||||
"text", SPLIT_COL_GAIN_LOSS, NULL);
|
||||
gtk_tree_view_column_set_sort_column_id(column, SPLIT_COL_GAIN_LOSS);
|
||||
gtk_tree_view_column_set_sort_column_id (column, SPLIT_COL_GAIN_LOSS_DOUBLE);
|
||||
gtk_tree_view_append_column(view, column);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
column = gtk_tree_view_column_new_with_attributes(_("Balance"), renderer,
|
||||
"text", SPLIT_COL_BALANCE, NULL);
|
||||
gtk_tree_view_column_set_sort_column_id(column, SPLIT_COL_BALANCE);
|
||||
gtk_tree_view_column_set_sort_column_id (column, SPLIT_COL_BALANCE_DOUBLE);
|
||||
gtk_tree_view_append_column(view, column);
|
||||
|
||||
/* Set up the selection callbacks */
|
||||
|
Loading…
Reference in New Issue
Block a user