28 #include "pricecell.h"
29 #include "split-register-p.h"
57 info->first_pass = TRUE;
58 info->full_refresh = TRUE;
59 info->separator_changed = TRUE;
71 gnc_split_register_init_info (reg);
79 SRInfo *info = gnc_split_register_get_info (reg);
84 if (info->get_parent == NULL)
87 return info->get_parent (info->user_data);
99 guid = gnc_table_get_vcell_data (reg->
table, vcell_loc);
109 SRInfo *info = gnc_split_register_get_info (reg);
112 gnc_get_current_book ());
119 SRInfo *info = gnc_split_register_get_info (reg);
121 g_return_if_fail (reg != NULL);
132 if (!reg || !reg->
table)
135 split = gnc_split_register_get_split (reg, vcell_loc);
142 vcell_loc.virt_row--;
144 split = gnc_split_register_get_split (reg, vcell_loc);
165 if ((0 > vcell_loc.virt_row) || (0 > vcell_loc.virt_col))
173 if (cursor_class == CURSOR_CLASS_TRANS)
176 *trans_split_loc = vcell_loc;
178 return gnc_split_register_get_split (reg, vcell_loc);
181 vcell_loc.virt_row--;
194 vcell_loc = reg->
table->current_cursor_loc.vcell_loc;
196 return gnc_split_register_get_trans_split (reg, vcell_loc, trans_split_loc);
206 gboolean found_trans = FALSE;
207 gboolean found_trans_split = FALSE;
208 gboolean found_something = FALSE;
214 for (v_row = 1; v_row < table->num_virt_rows; v_row++)
215 for (v_col = 0; v_col < table->num_virt_cols; v_col++)
219 s = gnc_split_register_get_split (reg, vc_loc);
229 if (cursor_class == CURSOR_CLASS_TRANS)
232 if (s == trans_split)
234 found_trans_split = TRUE;
236 found_trans_split = FALSE;
238 if (find_class == CURSOR_CLASS_TRANS &&
239 (s == split || reg->style == REG_STYLE_JOURNAL))
244 if (vcell_loc != NULL)
255 found_trans_split = FALSE;
258 if (found_trans && (s == split) && s)
262 if (vcell_loc != NULL)
265 found_something = TRUE;
268 if (found_trans_split && (s == split))
273 if (vcell_loc != NULL)
276 if (cursor_class == find_class)
281 return found_something;
293 for (v_row = end_loc.virt_row + 1;
294 v_row < reg->table->num_virt_rows; v_row++)
300 if (cursor_class == CURSOR_CLASS_TRANS)
303 if (cursor_class != CURSOR_CLASS_SPLIT)
310 end_loc.virt_row = MIN (v_row, reg->
table->num_virt_rows - 1);
312 gnc_table_show_range (reg->
table, start_loc, end_loc);
319 gboolean only_blank_split)
325 vcell_loc.virt_row++;
328 if (cursor_class != CURSOR_CLASS_SPLIT)
331 if (only_blank_split && gnc_split_register_get_split (reg, vcell_loc))
334 gnc_table_set_virt_cell_visible (reg->
table, vcell_loc, visible);
347 gboolean trading_accts;
356 split_account = gnc_split_register_get_account (reg, XFRM_CELL);
360 reg_account = gnc_split_register_get_default_account (reg);
379 if (reg->type == STOCK_REGISTER ||
380 reg->type == CURRENCY_REGISTER ||
381 reg->type == PORTFOLIO_LEDGER)
385 commodity = trans_currency;
386 else if (trading_accts &&
388 commodity = trans_currency;
390 commodity = trans_currency;
402 if (reg->type == STOCK_REGISTER ||
403 reg->type == CURRENCY_REGISTER ||
404 reg->type == PORTFOLIO_LEDGER)
405 commodity = trans_currency;
414 cell = (
PriceCell *) gnc_table_layout_get_cell (reg->
table->layout,
416 gnc_price_cell_set_fraction (cell, fraction);
418 cell = (
PriceCell *) gnc_table_layout_get_cell (reg->
table->layout,
420 gnc_price_cell_set_fraction (cell, fraction);
422 cell = (
PriceCell *) gnc_table_layout_get_cell (reg->
table->layout,
429 gnc_price_cell_set_fraction (cell, 1000000);
435 const char *cursor_name = NULL;
439 case REG_STYLE_LEDGER:
440 case REG_STYLE_AUTO_LEDGER:
443 : CURSOR_DOUBLE_LEDGER_NUM_ACTN)
444 : CURSOR_SINGLE_LEDGER;
447 case REG_STYLE_JOURNAL:
450 : CURSOR_DOUBLE_JOURNAL_NUM_ACTN)
451 : CURSOR_SINGLE_JOURNAL;
457 PWARN (
"bad register style");
461 return gnc_table_layout_get_cursor (reg->
table->layout, cursor_name);
467 SRInfo *info = gnc_split_register_get_info (reg);
468 const char *cursor_name = NULL;
472 case REG_STYLE_LEDGER:
473 if (!info->trans_expanded)
477 : CURSOR_DOUBLE_LEDGER_NUM_ACTN)
478 : CURSOR_SINGLE_LEDGER;
483 case REG_STYLE_AUTO_LEDGER:
484 case REG_STYLE_JOURNAL:
487 : CURSOR_DOUBLE_JOURNAL_NUM_ACTN)
488 : CURSOR_SINGLE_JOURNAL;
494 PWARN (
"bad register style");
498 return gnc_table_layout_get_cursor (reg->
table->layout, cursor_name);
502 gnc_split_register_set_last_num (
SplitRegister *reg,
const char *num)
506 account = gnc_split_register_get_default_account (reg);
518 return CURSOR_CLASS_NONE;
520 return gnc_split_register_cursor_name_to_class (cursor->cursor_name);
531 return CURSOR_CLASS_NONE;
535 return CURSOR_CLASS_NONE;
537 vcell = gnc_table_get_virtual_cell (table, vcell_loc);
539 return CURSOR_CLASS_NONE;
541 return gnc_split_register_cursor_class (reg, vcell->cellblock);
550 return CURSOR_CLASS_NONE;
554 return CURSOR_CLASS_NONE;
556 return gnc_split_register_cursor_class (reg, table->current_cursor);
560 gnc_split_register_cursor_name_to_class (
const char *cursor_name)
562 if (cursor_name == NULL)
563 return CURSOR_CLASS_NONE;
565 if (strcmp (cursor_name, CURSOR_SINGLE_LEDGER) == 0 ||
566 strcmp (cursor_name, CURSOR_DOUBLE_LEDGER) == 0 ||
567 strcmp (cursor_name, CURSOR_DOUBLE_LEDGER_NUM_ACTN) == 0 ||
568 strcmp (cursor_name, CURSOR_SINGLE_JOURNAL) == 0 ||
569 strcmp (cursor_name, CURSOR_DOUBLE_JOURNAL) == 0 ||
570 strcmp (cursor_name, CURSOR_DOUBLE_JOURNAL_NUM_ACTN) == 0)
571 return CURSOR_CLASS_TRANS;
573 if (strcmp (cursor_name, CURSOR_SPLIT) == 0)
574 return CURSOR_CLASS_SPLIT;
576 return CURSOR_CLASS_NONE;
time64 gnc_time64_get_today_start(void)
int gnc_commodity_get_fraction(const gnc_commodity *cm)
gboolean xaccTransUseTradingAccounts(const Transaction *trans)
gboolean xaccAccountIsPriced(const Account *acc)
The type, style and table for the register.
gboolean use_tran_num_for_num_field
int xaccAccountGetCommoditySCU(const Account *acc)
CursorClass gnc_split_register_get_cursor_class(SplitRegister *reg, VirtualCellLocation vcell_loc)
Split * gnc_split_register_get_current_trans_split(SplitRegister *reg, VirtualCellLocation *trans_split_loc)
Transaction * xaccSplitGetParent(const Split *split)
#define PERR(format, args...)
void xaccAccountSetLastNum(Account *acc, const char *num)
gnc_commodity * gnc_default_currency(void)
#define PWARN(format, args...)
#define xaccAccountGetGUID(X)
Split * xaccSplitLookup(const GncGUID *guid, QofBook *book)
void gnc_split_register_set_template_account(SplitRegister *reg, Account *template_account)
CursorClass gnc_split_register_get_current_cursor_class(SplitRegister *reg)
Account * xaccSplitGetAccount(const Split *s)
gnc_commodity * xaccAccountGetCommodity(const Account *acc)
const GncGUID * guid_null(void)
gnc_commodity * xaccTransGetCurrency(const Transaction *trans)
gboolean qof_book_use_trading_accounts(const QofBook *book)
gboolean gnc_commodity_is_iso(const gnc_commodity *cm)
const gchar * QofLogModule
Account * xaccAccountLookup(const GncGUID *guid, QofBook *book)