gnucash maint: Multiple changes pushed

Mike Alexander mta at code.gnucash.org
Tue Sep 2 00:25:02 EDT 2014


Updated	 via  https://github.com/Gnucash/gnucash/commit/8d9b3c7c (commit)
	 via  https://github.com/Gnucash/gnucash/commit/668aab4a (commit)
	from  https://github.com/Gnucash/gnucash/commit/483302ab (commit)



commit 8d9b3c7c5d0cab8a03060f18c4fe9ee67c255a3a
Author: Mike Alexander <mta at umich.edu>
Date:   Mon Sep 1 01:43:17 2014 -0400

    Bug 735769: Enable price and shares cells in a split if it is not in the trans currency.
    The label for the cells are changed to "Exch. Rate" and "Oth. Curr." in this case.

diff --git a/src/register/ledger-core/split-register-model.c b/src/register/ledger-core/split-register-model.c
index 5af4a3b..4ff22af 100644
--- a/src/register/ledger-core/split-register-model.c
+++ b/src/register/ledger-core/split-register-model.c
@@ -145,6 +145,44 @@ gnc_split_register_get_rbaln (VirtualLocation virt_loc, gpointer user_data, gboo
     return balance;
 }
 
+static gnc_commodity *
+gnc_split_register_get_split_commodity (SplitRegister *reg,
+                                        VirtualLocation virt_loc)
+{
+    CursorClass cursor_class;
+    Account *account;
+    Split *split;
+
+    split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
+    if (!split)
+        return NULL;
+
+    cursor_class = gnc_split_register_get_cursor_class (reg,
+                   virt_loc.vcell_loc);
+    if (cursor_class != CURSOR_CLASS_SPLIT)
+        return NULL;
+
+    account = NULL;
+
+    if (virt_cell_loc_equal (virt_loc.vcell_loc,
+                             reg->table->current_cursor_loc.vcell_loc) &&
+            gnc_table_layout_get_cell_changed (reg->table->layout, XFRM_CELL, FALSE))
+    {
+        const char *name;
+
+        name = gnc_table_layout_get_cell_value (reg->table->layout, XFRM_CELL);
+        account = gnc_account_lookup_for_register (gnc_get_current_root_account (), name);
+    }
+
+    if (!account)
+        account = xaccSplitGetAccount (split);
+
+    if (!account)
+        return NULL;
+        
+    return xaccAccountGetCommodity(account);
+}
+
 static gboolean
 gnc_split_register_use_security_cells (SplitRegister *reg,
                                        VirtualLocation virt_loc)
@@ -182,7 +220,9 @@ gnc_split_register_use_security_cells (SplitRegister *reg,
 
     if (xaccTransUseTradingAccounts (xaccSplitGetParent (split)))
     {
-        if (!gnc_commodity_is_iso(xaccAccountGetCommodity(account)))
+        gnc_commodity *commod = xaccAccountGetCommodity(account);
+        if (!gnc_commodity_is_iso(commod) ||
+            !gnc_commodity_equal(commod, xaccTransGetCurrency(xaccSplitGetParent(split))))
             return TRUE;
     }
 
@@ -341,11 +381,16 @@ gnc_split_register_get_price_label (VirtualLocation virt_loc,
                                     gpointer user_data)
 {
     SplitRegister *reg = user_data;
+    gnc_commodity *commod;
 
     if (!gnc_split_register_use_security_cells (reg, virt_loc))
         return NULL;
 
-    return _("Price");
+    commod = gnc_split_register_get_split_commodity (reg, virt_loc);
+    if (!commod || !gnc_commodity_is_iso(commod))
+        return _("Price");
+    else
+        return _("Exch. Rate");
 }
 
 static const char *
@@ -353,11 +398,16 @@ gnc_split_register_get_shares_label (VirtualLocation virt_loc,
                                      gpointer user_data)
 {
     SplitRegister *reg = user_data;
+    gnc_commodity *commod;
 
     if (!gnc_split_register_use_security_cells (reg, virt_loc))
         return NULL;
 
-    return _("Shares");
+    commod = gnc_split_register_get_split_commodity (reg, virt_loc);
+    if (!commod || !gnc_commodity_is_iso(commod))
+        return _("Shares");
+    else
+        return _("Oth. Curr.");
 }
 
 static const char *

commit 668aab4a2b31c1ee770b90127fcc76b309bc2349
Author: Mike Alexander <mta at umich.edu>
Date:   Mon Sep 1 01:36:06 2014 -0400

    If the cursor moves from one register cell to another, refresh the register headers.
    If trading accounts are on and the transaction is expanded then the headers
    depend on the type of split the cursor is in.

diff --git a/src/register/register-gnome/gnucash-header.c b/src/register/register-gnome/gnucash-header.c
index dddd7bb..7d902d5 100644
--- a/src/register/register-gnome/gnucash-header.c
+++ b/src/register/register-gnome/gnucash-header.c
@@ -222,7 +222,7 @@ gnc_header_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
 }
 
 
-static void
+void
 gnc_header_request_redraw (GncHeader *header)
 {
     GnomeCanvas *canvas = GNOME_CANVAS_ITEM(header)->canvas;
diff --git a/src/register/register-gnome/gnucash-header.h b/src/register/register-gnome/gnucash-header.h
index 553ca3b..fa2091a 100644
--- a/src/register/register-gnome/gnucash-header.h
+++ b/src/register/register-gnome/gnucash-header.h
@@ -64,6 +64,7 @@ typedef struct
 
 GtkWidget *gnc_header_new (GnucashSheet *sheet);
 void gnc_header_reconfigure (GncHeader *header);
+void gnc_header_request_redraw (GncHeader *header);
 
 void gnc_header_set_header_rows (GncHeader *header,
                                  int num_phys_rows);
diff --git a/src/register/register-gnome/gnucash-sheet.c b/src/register/register-gnome/gnucash-sheet.c
index 348236d..1c17b76 100644
--- a/src/register/register-gnome/gnucash-sheet.c
+++ b/src/register/register-gnome/gnucash-sheet.c
@@ -348,6 +348,10 @@ gnucash_sheet_cursor_move (GnucashSheet *sheet, VirtualLocation virt_loc)
     gnucash_sheet_make_cell_visible (sheet, virt_loc);
 
     changed_cells = !virt_loc_equal (virt_loc, old_virt_loc);
+    
+    /* If we've changed cells, redraw the headers */
+    if (changed_cells)
+        gnc_header_request_redraw (GNC_HEADER(sheet->header_item));
 
     /* Now turn on the editing controls. */
     gnucash_sheet_activate_cursor_cell (sheet, changed_cells);



Summary of changes:
 src/register/ledger-core/split-register-model.c | 56 +++++++++++++++++++++++--
 src/register/register-gnome/gnucash-header.c    |  2 +-
 src/register/register-gnome/gnucash-header.h    |  1 +
 src/register/register-gnome/gnucash-sheet.c     |  4 ++
 4 files changed, 59 insertions(+), 4 deletions(-)



More information about the gnucash-changes mailing list