Question about Tables, Cursors, and Cells
Derek Atkins
warlord@MIT.EDU
19 Jan 2002 21:04:58 -0500
Hi,
In my work on the Entry Ledger, I've come across a problem. I'm
trying to write some code to determine _which_ cells changed. In
particular, I want to find out if a particular cell is the only cell
that changed within a particular cursor. Is there an easy way to do
that?
I know that I could do this by running a loop over all my cells, by
name, and testing whether the cell changed by calling:
gnc_table_layout_get_cell_changed (ledger->table->layout, cell_name,
TRUE))
However, that seems like a lot more work, IMHO. The cursor clearly
knows whether there were any changes[0].
Question: since the cells are actually numbered in the Cursor[1],
can't we provide a bitmask for all the cells that changed, and provide
a function that gives the bit position of a cell in a cursor based on
it's name? Then I could see if the bitmask is all negative in all
positions other than the one in question.
Another solution to my particular problem would be a function to
return the number (count) of changed cells. If the count != 1 then I
know that something else was changed other than the cell in question.
Any suggestions?
-derek
[0] You can tell if a cursor changed by calling:
gnc_table_current_cursor_changed (ledger->table, FALSE)
[1] When you add a cell to a cursor you give it a position in the cursor:
gnc_table_layout_set_cell (layout, curs, ENTRY_TAXACC_CELL, 0, x++);
One would think that you could remember what 'x' was in this particular
case and map ENTRY_TAXACC_CELL to the value of 'x'. That way it would
be easy to return a bitmask of changed cells, because a change in cell
ENTRY_TAXACC_CELL would map to a bit in position 0,x in the bitmask.
--
Derek Atkins, SB '93 MIT EE, SM '95 MIT Media Laboratory
Member, MIT Student Information Processing Board (SIPB)
URL: http://web.mit.edu/warlord/ PP-ASEL-IA N1NWH
warlord@MIT.EDU PGP key available