26#include <glib/gi18n.h>
29#include "dialog-utils.h"
30#include "dialog-doclink-utils.h"
37#include "gnc-warnings.h"
45#include "engine-helpers.h"
48static QofLogModule log_module = GNC_MOD_LEDGER;
51static gboolean use_red_for_negative = TRUE;
58gnc_split_register_get_rbaln (VirtualLocation virt_loc, gpointer user_data,
61 SplitRegister* reg = user_data;
63 SRInfo* info = gnc_split_register_get_info (reg);
68 GList* children = NULL;
71 balance = gnc_numeric_zero();
74 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
76 gnc_get_current_book()))
77 return gnc_numeric_zero();
81 return gnc_numeric_zero();
84 account = gnc_split_register_get_default_account (reg);
93 children = g_list_prepend (children, account);
97 row = virt_loc.vcell_loc.virt_row;
98 virt_loc.vcell_loc.virt_row = 0;
100 while (virt_loc.vcell_loc.virt_row <= row)
103 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
109 Split* secondary = node->data;
111 if (!xaccTransStillHasSplit (trans, secondary))
122 for (child = children; child; child = child->next)
124 if (account == child->data)
137 virt_loc.vcell_loc.virt_row += i;
141 g_list_free (children);
147gnc_split_register_get_split_commodity (SplitRegister* reg,
148 VirtualLocation virt_loc)
154 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
160 if (cursor_class != CURSOR_CLASS_SPLIT)
165 if (virt_cell_loc_equal (virt_loc.vcell_loc,
166 reg->table->current_cursor_loc.vcell_loc) &&
167 gnc_table_layout_get_cell_changed (reg->table->layout, XFRM_CELL, FALSE))
171 name = gnc_table_layout_get_cell_value (reg->table->layout, XFRM_CELL);
186gnc_split_register_use_security_cells (SplitRegister* reg,
187 VirtualLocation virt_loc)
193 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
199 if (cursor_class != CURSOR_CLASS_SPLIT)
204 if (virt_cell_loc_equal (virt_loc.vcell_loc,
205 reg->table->current_cursor_loc.vcell_loc) &&
206 gnc_table_layout_get_cell_changed (reg->table->layout, XFRM_CELL, FALSE))
210 name = gnc_table_layout_get_cell_value (reg->table->layout, XFRM_CELL);
234gnc_split_register_get_date_label (VirtualLocation virt_loc,
241gnc_split_register_get_due_date_label (VirtualLocation virt_loc,
244 return _ (
"Due Date");
248gnc_split_register_get_num_label (VirtualLocation virt_loc,
251 SplitRegister* reg = user_data;
255 case RECEIVABLE_REGISTER:
256 case PAYABLE_REGISTER:
269gnc_split_register_get_tran_num_label (VirtualLocation virt_loc,
272 SplitRegister* reg = user_data;
276 case RECEIVABLE_REGISTER:
277 case PAYABLE_REGISTER:
279 case GENERAL_JOURNAL:
283 if (reg->use_tran_num_for_num_field)
292gnc_split_register_get_desc_label (VirtualLocation virt_loc,
295 SplitRegister* reg = user_data;
299 case RECEIVABLE_REGISTER:
300 return _ (
"Customer");
301 case PAYABLE_REGISTER:
304 return _ (
"Description");
309gnc_split_register_get_recn_label (VirtualLocation virt_loc,
312 SplitRegister* reg = user_data;
316 case RECEIVABLE_REGISTER:
317 case PAYABLE_REGISTER:
321 return C_ (
"Column header for 'Reconciled'",
"R");
326gnc_split_register_get_baln_label (VirtualLocation virt_loc,
329 return _ (
"Balance");
333gnc_split_register_get_action_label (VirtualLocation virt_loc,
340gnc_split_register_get_doclink_label (VirtualLocation virt_loc,
343 return C_ (
"Column header for 'Document Link'",
"L");
347gnc_split_register_get_xfrm_label (VirtualLocation virt_loc,
350 return _ (
"Account");
354gnc_split_register_get_mxfrm_label (VirtualLocation virt_loc,
357 return _ (
"Transfer");
361gnc_split_register_get_memo_label (VirtualLocation virt_loc,
368gnc_split_register_get_type_label (VirtualLocation virt_loc,
375gnc_split_register_get_rate_label (VirtualLocation virt_loc,
382gnc_split_register_get_debit_label (VirtualLocation virt_loc,
385 SplitRegister* reg = user_data;
391gnc_split_register_get_credit_label (VirtualLocation virt_loc,
394 SplitRegister* reg = user_data;
400gnc_split_register_get_price_label (VirtualLocation virt_loc,
403 SplitRegister* reg = user_data;
404 gnc_commodity* commod;
406 if (!gnc_split_register_use_security_cells (reg, virt_loc))
409 commod = gnc_split_register_get_split_commodity (reg, virt_loc);
413 return _ (
"Exch. Rate");
417gnc_split_register_get_shares_label (VirtualLocation virt_loc,
420 SplitRegister* reg = user_data;
421 gnc_commodity* commod;
423 if (!gnc_split_register_use_security_cells (reg, virt_loc))
426 commod = gnc_split_register_get_split_commodity (reg, virt_loc);
430 return _ (
"Oth. Curr.");
434gnc_split_register_get_tcredit_label (VirtualLocation virt_loc,
437 SplitRegister* reg = user_data;
438 SRInfo* info = gnc_split_register_get_info (reg);
440 if (reg->is_template)
443 if (info->tcredit_str)
444 return info->tcredit_str;
450 info->tcredit_str = g_strdup_printf (_ (
"Tot %s"),
string);
453 if (info->tcredit_str)
454 return info->tcredit_str;
456 info->tcredit_str = g_strdup (_ (
"Tot Credit"));
458 return info->tcredit_str;
462gnc_split_register_get_tdebit_label (VirtualLocation virt_loc,
465 SplitRegister* reg = user_data;
466 SRInfo* info = gnc_split_register_get_info (reg);
468 if (reg->is_template)
471 if (info->tdebit_str)
472 return info->tdebit_str;
477 info->tdebit_str = g_strdup_printf (_ (
"Tot %s"),
string);
480 if (info->tdebit_str)
481 return info->tdebit_str;
483 info->tdebit_str = g_strdup (_ (
"Tot Debit"));
485 return info->tdebit_str;
489gnc_split_register_get_tshares_label (VirtualLocation virt_loc,
492 SplitRegister* reg = user_data;
494 if (reg->is_template)
497 return _ (
"Tot Shares");
501gnc_split_register_get_tbalance_label (VirtualLocation virt_loc,
504 SplitRegister* reg = user_data;
506 if (reg->is_template)
509 return _ (
"Balance");
513gnc_split_register_get_notes_label (VirtualLocation virt_loc,
520gnc_split_register_get_fdebit_label (VirtualLocation virt_loc,
523 return _ (
"Debit Formula");
527gnc_split_register_get_fcredit_label (VirtualLocation virt_loc,
530 return _ (
"Credit Formula");
536gnc_split_register_get_recn_tooltip (VirtualLocation virt_loc,
539 SplitRegister* reg = user_data;
542 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
550 memset (datebuff, 0,
sizeof (datebuff));
552 return g_strdup_printf (_ (
"Reconciled on %s"), datebuff);
564gnc_split_register_get_doclink_tooltip (VirtualLocation virt_loc,
567 SplitRegister* reg = user_data;
571 trans = gnc_split_register_get_trans (reg, virt_loc.vcell_loc);
580 return gnc_doclink_get_unescaped_just_uri (uri);
586get_trans_total_amount (SplitRegister* reg, Transaction* trans)
588 Account* account = gnc_split_register_get_default_account (reg);
593get_trans_total_balance (SplitRegister* reg, Transaction* trans)
597 account = gnc_split_register_get_default_account (reg);
598 if (!trans || !account)
return gnc_numeric_zero();
604gnc_split_register_use_negative_color (VirtualLocation virt_loc,
607 const char* cell_name;
608 gnc_numeric value = gnc_numeric_zero();
611 if (!use_red_for_negative)
614 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
618 cell_name = gnc_table_get_cell_name (reg->table, virt_loc);
620 if (gnc_cell_name_equal (cell_name, TSHRS_CELL))
622 else if (gnc_cell_name_equal (cell_name, SHRS_CELL))
624 if (virt_cell_loc_equal (reg->table->current_cursor_loc.vcell_loc,
627 ((
PriceCell*) gnc_table_layout_get_cell (reg->table->layout,
632 else if (gnc_cell_name_equal (cell_name, BALN_CELL))
634 else if (gnc_cell_name_equal (cell_name, RBALN_CELL))
635 value = gnc_split_register_get_rbaln (virt_loc, reg, TRUE);
636 else if (gnc_cell_name_equal (cell_name, TBALN_CELL))
639 if ((gnc_cell_name_equal (cell_name, BALN_CELL)) ||
640 (gnc_cell_name_equal (cell_name, RBALN_CELL)) ||
641 (gnc_cell_name_equal (cell_name, TBALN_CELL)))
644 if (gnc_reverse_balance (account))
655gnc_split_register_get_cell_color_internal (VirtualLocation virt_loc,
658 const char* cursor_name;
661 guint32 colorbase = 0;
665 if (gnc_split_register_use_negative_color (virt_loc, reg))
666 colorbase = COLOR_NEGATIVE;
669 return (colorbase + COLOR_UNDEFINED);
671 if (gnc_table_virtual_location_in_header (reg->table, virt_loc))
672 return (colorbase + COLOR_HEADER);
675 if (!vcell || !vcell->cellblock)
676 return (colorbase + COLOR_UNDEFINED);
678 if ((virt_loc.phys_col_offset < vcell->cellblock->start_col) ||
679 (virt_loc.phys_col_offset > vcell->cellblock->stop_col))
680 return (colorbase + COLOR_UNDEFINED);
682 is_current = virt_cell_loc_equal (reg->table->current_cursor_loc.vcell_loc,
685 cursor_name = vcell->cellblock->cursor_name;
687 if (g_strcmp0 (cursor_name, CURSOR_SINGLE_JOURNAL) == 0 ||
688 g_strcmp0 (cursor_name, CURSOR_SINGLE_LEDGER) == 0)
692 (colorbase + COLOR_PRIMARY_ACTIVE) :
693 (colorbase + COLOR_SECONDARY_ACTIVE);
696 (colorbase + COLOR_PRIMARY) : (colorbase + COLOR_SECONDARY);
699 if (g_strcmp0 (cursor_name, CURSOR_DOUBLE_JOURNAL) == 0 ||
700 g_strcmp0 (cursor_name, CURSOR_DOUBLE_JOURNAL_NUM_ACTN) == 0 ||
701 g_strcmp0 (cursor_name, CURSOR_DOUBLE_LEDGER) == 0 ||
702 g_strcmp0 (cursor_name, CURSOR_DOUBLE_LEDGER_NUM_ACTN) == 0)
706 if (reg->double_alt_color)
708 (colorbase + COLOR_PRIMARY_ACTIVE) :
709 (colorbase + COLOR_SECONDARY_ACTIVE);
711 return (virt_loc.phys_row_offset % 2 == 0) ?
712 (colorbase + COLOR_PRIMARY_ACTIVE) :
713 (colorbase + COLOR_SECONDARY_ACTIVE);
716 if (reg->double_alt_color)
718 (colorbase + COLOR_PRIMARY) :
719 (colorbase + COLOR_SECONDARY);
721 return (virt_loc.phys_row_offset % 2 == 0) ?
722 (colorbase + COLOR_PRIMARY) :
723 (colorbase + COLOR_SECONDARY);
726 if (g_strcmp0 (cursor_name, CURSOR_SPLIT) == 0)
729 return (colorbase + COLOR_SPLIT_ACTIVE);
731 return (colorbase + COLOR_SPLIT);
734 PWARN (
"Unexpected cursor: %s\n", cursor_name);
736 return (colorbase + COLOR_UNDEFINED);
741gnc_split_register_get_cell_color (VirtualLocation virt_loc,
745 SplitRegister* reg = user_data;
750 return gnc_split_register_get_cell_color_internal (virt_loc, reg);
755gnc_split_register_get_debcred_color (VirtualLocation virt_loc,
759 SplitRegister* reg = user_data;
765 trans = gnc_split_register_get_trans (reg, virt_loc.vcell_loc);
772 return gnc_split_register_get_cell_color_internal (virt_loc, reg);
776gnc_split_register_get_border (VirtualLocation virt_loc,
780 SplitRegister* reg = user_data;
785 if (!vcell || !vcell->cellblock)
788 if (virt_loc.phys_col_offset < vcell->cellblock->start_col ||
789 virt_loc.phys_col_offset > vcell->cellblock->stop_col)
791 borders->top = CELL_BORDER_LINE_NONE;
792 borders->bottom = CELL_BORDER_LINE_NONE;
793 borders->left = CELL_BORDER_LINE_NONE;
794 borders->right = CELL_BORDER_LINE_NONE;
799 gnc_split_register_cursor_name_to_class (vcell->cellblock->cursor_name);
801 if (cursor_class == CURSOR_CLASS_SPLIT)
803 borders->top = CELL_BORDER_LINE_LIGHT;
804 borders->bottom = CELL_BORDER_LINE_LIGHT;
805 borders->left = MIN (borders->left, CELL_BORDER_LINE_LIGHT);
806 borders->right = MIN (borders->right, CELL_BORDER_LINE_LIGHT);
808 if (virt_loc.phys_col_offset == vcell->cellblock->start_col)
809 borders->left = CELL_BORDER_LINE_NORMAL;
810 if (virt_loc.phys_col_offset == vcell->cellblock->stop_col)
811 borders->right = CELL_BORDER_LINE_NORMAL;
816gnc_split_register_get_doclink_entry (VirtualLocation virt_loc,
818 gboolean* conditionally_changed,
821 SplitRegister* reg = user_data;
827 cell = (
Doclinkcell *)gnc_table_layout_get_cell (reg->table->layout, DOCLINK_CELL);
832 trans = gnc_split_register_get_trans (reg, virt_loc.vcell_loc);
844 if (!scheme || g_strcmp0 (scheme,
"file") == 0)
854 if (gnc_doclink_get_use_glyphs (cell))
855 return gnc_doclink_get_glyph_from_flag (link_flag);
870gnc_split_register_get_doclink_help (VirtualLocation virt_loc,
874 return g_strdup (
" ");
880gnc_split_register_get_doclink_value (SplitRegister* reg,
881 VirtualLocation virt_loc)
885 cell = (
Doclinkcell *)gnc_table_layout_get_cell (reg->table->layout, DOCLINK_CELL);
889 return gnc_doclink_cell_get_flag (cell);
894gnc_split_register_get_type_entry (VirtualLocation virt_loc,
896 gboolean* conditionally_changed,
899 SplitRegister* reg = user_data;
904 trans = gnc_split_register_get_trans (reg, virt_loc.vcell_loc);
920gnc_split_register_get_type_value (SplitRegister* reg,
921 VirtualLocation virt_loc)
925 cell = (
RecnCell*)gnc_table_layout_get_cell (reg->table->layout, TYPE_CELL);
929 return gnc_recn_cell_get_flag (cell);
933gnc_split_register_get_due_date_entry (VirtualLocation virt_loc,
935 gboolean* conditionally_changed,
938 SplitRegister* reg = user_data;
945 is_current = virt_cell_loc_equal (reg->table->current_cursor_loc.vcell_loc,
950 type = gnc_split_register_get_type_value (reg, virt_loc);
954 const char* typestr =
955 gnc_split_register_get_type_entry (virt_loc, translate,
956 conditionally_changed, user_data);
970 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
980 memset (dateBuff, 0,
sizeof (dateBuff));
986gnc_split_register_get_date_entry (VirtualLocation virt_loc,
988 gboolean* conditionally_changed,
991 SplitRegister* reg = user_data;
996 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1001 memset (dateBuff, 0,
sizeof (dateBuff));
1007gnc_split_register_get_date_help (VirtualLocation virt_loc,
1010 SplitRegister* reg = user_data;
1014 cell = gnc_table_get_cell (reg->table, virt_loc);
1015 if (!cell || !cell->value || *cell->value ==
'\0')
1026gnc_split_register_get_inactive_date_entry (VirtualLocation virt_loc,
1028 gboolean* conditionally_changed,
1033 return _ (
"Scheduled");
1037gnc_split_register_get_num_entry (VirtualLocation virt_loc,
1039 gboolean* conditionally_changed,
1042 SplitRegister* reg = user_data;
1046 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1049 return gnc_get_num_action (trans, split);
1053gnc_split_register_get_tran_num_entry (VirtualLocation virt_loc,
1055 gboolean* conditionally_changed,
1058 SplitRegister* reg = user_data;
1062 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1065 return gnc_get_num_action (trans, NULL);
1069gnc_split_register_get_num_help (VirtualLocation virt_loc,
1072 SplitRegister* reg = user_data;
1075 help = gnc_table_get_entry (reg->table, virt_loc);
1076 if (!help || *help ==
'\0')
1079 case RECEIVABLE_REGISTER:
1080 case PAYABLE_REGISTER:
1081 help = reg->use_tran_num_for_num_field ?
1082 _ (
"Enter a reference, such as an invoice or check number, "
1083 "common to all entry lines (splits)") :
1084 _ (
"Enter a reference, such as an invoice or check number, "
1085 "unique to each entry line (split)");
1088 help = reg->use_tran_num_for_num_field ?
1089 _ (
"Enter a reference, such as a check number, "
1090 "common to all entry lines (splits)") :
1091 _ (
"Enter a reference, such as a check number, "
1092 "unique to each entry line (split)");
1096 return g_strdup (help);
1100gnc_split_register_get_tran_num_help (VirtualLocation virt_loc,
1103 SplitRegister* reg = user_data;
1106 help = gnc_table_get_entry (reg->table, virt_loc);
1107 if (!help || *help ==
'\0')
1110 case RECEIVABLE_REGISTER:
1111 case PAYABLE_REGISTER:
1112 help =
_ (
"Enter a transaction reference, such as an invoice "
1113 "or check number, common to all entry lines (splits)");
1116 help =
_ (
"Enter a transaction reference "
1117 "that will be common to all entry lines (splits)");
1121 return g_strdup (help);
1125gnc_split_register_get_desc_entry (VirtualLocation virt_loc,
1127 gboolean* conditionally_changed,
1130 SplitRegister* reg = user_data;
1134 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1141gnc_split_register_get_desc_help (VirtualLocation virt_loc,
1144 SplitRegister* reg = user_data;
1147 help = gnc_table_get_entry (reg->table, virt_loc);
1148 if (!help || *help ==
'\0')
1151 case RECEIVABLE_REGISTER:
1152 help =
_ (
"Enter the name of the Customer");
1154 case PAYABLE_REGISTER:
1155 help =
_ (
"Enter the name of the Vendor");
1158 help =
_ (
"Enter a description of the transaction");
1161 return g_strdup (help);
1165gnc_split_register_get_notes_entry (VirtualLocation virt_loc,
1167 gboolean* conditionally_changed,
1170 SplitRegister* reg = user_data;
1174 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1181gnc_split_register_get_notes_help (VirtualLocation virt_loc,
1184 SplitRegister* reg = user_data;
1187 help = gnc_table_get_entry (reg->table, virt_loc);
1188 if (!help || *help ==
'\0')
1189 help =
_ (
"Enter notes for the transaction");
1191 return g_strdup (help);
1195gnc_split_register_get_vnotes_entry (VirtualLocation virt_loc,
1197 gboolean* conditionally_changed,
1200 SplitRegister* reg = user_data;
1204 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1214gnc_split_register_get_vnotes_help (VirtualLocation virt_loc,
1217 SplitRegister* reg = user_data;
1220 help = gnc_table_get_entry (reg->table, virt_loc);
1221 if (!help || *help ==
'\0')
1222 help =
_ (
"Reason the transaction was voided");
1224 return g_strdup (help);
1228gnc_split_register_get_rate_entry (VirtualLocation virt_loc,
1230 gboolean* conditionally_changed,
1233 SplitRegister* reg = user_data;
1234 Split* split, *osplit;
1236 gnc_numeric amount, value, convrate;
1237 gnc_commodity* curr;
1238 SRInfo* info = gnc_split_register_get_info (reg);
1240 if (info->rate_reset == RATE_RESET_REQD && info->auto_complete)
1243 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1252 txn = gnc_split_register_get_trans (reg, virt_loc.vcell_loc);
1255 !gnc_split_register_needs_conv_rate (reg, txn,
1268 GNC_HOW_DENOM_REDUCE);
1270 return xaccPrintAmount (convrate, gnc_default_price_print_info (curr));
1274gnc_split_register_get_recn_entry (VirtualLocation virt_loc,
1276 gboolean* conditionally_changed,
1279 SplitRegister* reg = user_data;
1282 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1300gnc_split_register_get_action_entry (VirtualLocation virt_loc,
1302 gboolean* conditionally_changed,
1305 SplitRegister* reg = user_data;
1306 Split* split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1308 return gnc_get_num_action (NULL, split);
1312gnc_split_register_get_action_help (VirtualLocation virt_loc,
1315 SplitRegister* reg = user_data;
1318 help = gnc_table_get_entry (reg->table, virt_loc);
1319 if (!help || *help ==
'\0')
1320 help = reg->use_tran_num_for_num_field ?
1321 _ (
"Enter an action type, or choose one from the list") :
1322 _ (
"Enter a reference number, such as the next check number, or choose an action type from the list");
1324 return g_strdup (help);
1328gnc_split_register_get_memo_entry (VirtualLocation virt_loc,
1330 gboolean* conditionally_changed,
1333 SplitRegister* reg = user_data;
1336 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1342gnc_split_register_get_memo_help (VirtualLocation virt_loc,
1345 SplitRegister* reg = user_data;
1348 help = gnc_table_get_entry (reg->table, virt_loc);
1349 if (!help || *help ==
'\0')
1350 help =
_ (
"Enter a description of the split");
1351 return g_strdup (help);
1355gnc_split_register_get_balance_entry (VirtualLocation virt_loc,
1357 gboolean* conditionally_changed,
1360 SplitRegister* reg = user_data;
1361 SRInfo* info = gnc_split_register_get_info (reg);
1362 gnc_numeric balance;
1367 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1369 gnc_get_current_book()))
1372 is_trans = gnc_cell_name_equal
1373 (gnc_table_get_cell_name (reg->table, virt_loc), TBALN_CELL);
1382 account = gnc_split_register_get_default_account (reg);
1384 if (gnc_reverse_balance (account))
1388 reg->mismatched_commodities));
1392gnc_split_register_get_price_entry (VirtualLocation virt_loc,
1394 gboolean* conditionally_changed,
1397 SplitRegister* reg = user_data;
1399 gnc_commodity* curr;
1402 if (!gnc_split_register_use_security_cells (reg, virt_loc))
1405 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1416gnc_split_register_get_price_help (VirtualLocation virt_loc,
1419 SplitRegister* reg = user_data;
1422 help = gnc_table_get_entry (reg->table, virt_loc);
1423 if (!help || *help ==
'\0')
1424 help =
_ (
"Enter the effective share price");
1426 return g_strdup (help);
1430gnc_split_register_get_shares_entry (VirtualLocation virt_loc,
1432 gboolean* conditionally_changed,
1435 SplitRegister* reg = user_data;
1439 if (!gnc_split_register_use_security_cells (reg, virt_loc))
1442 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1448 return xaccPrintAmount (shares, gnc_split_amount_print_info (split, FALSE));
1452gnc_split_register_get_shares_help (VirtualLocation virt_loc,
1455 SplitRegister* reg = user_data;
1458 help = gnc_table_get_entry (reg->table, virt_loc);
1459 if (!help || *help ==
'\0')
1460 help =
_ (
"Enter the number of shares bought or sold");
1462 return g_strdup (help);
1466gnc_split_register_get_tshares_entry (VirtualLocation virt_loc,
1468 gboolean* conditionally_changed,
1471 SplitRegister* reg = user_data;
1475 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1479 return xaccPrintAmount (total, gnc_split_amount_print_info (split, FALSE));
1483gnc_split_register_get_xfrm_entry (VirtualLocation virt_loc,
1485 gboolean* conditionally_changed,
1488 static char* name = NULL;
1490 SplitRegister* reg = user_data;
1493 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1498 reg->show_leaf_accounts);
1504gnc_split_register_get_xfrm_help (VirtualLocation virt_loc,
1507 SplitRegister* reg = user_data;
1510 help = gnc_table_get_entry (reg->table, virt_loc);
1511 if (!help || *help ==
'\0')
1512 help =
_ (
"Enter the account to transfer from, "
1513 "or choose one from the list");
1515 return g_strdup (help);
1519gnc_split_register_get_mxfrm_entry (VirtualLocation virt_loc,
1521 gboolean* conditionally_changed,
1524 static char* name = NULL;
1526 SplitRegister* reg = user_data;
1530 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1540 reg->show_leaf_accounts);
1548 name = g_strdup (SPLIT_TRANS_STR);
1550 name = g_strdup (STOCK_SPLIT_STR);
1552 name = g_strdup (
"");
1559gnc_split_register_get_mxfrm_help (VirtualLocation virt_loc,
1564 SplitRegister* reg = user_data;
1568 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1576 help = gnc_split_register_get_mxfrm_entry (virt_loc, FALSE,
1578 if (!help || *help ==
'\0')
1579 help =
_ (
"Enter the account to transfer from, "
1580 "or choose one from the list");
1589 help =
_ (
"This transaction has multiple splits; "
1590 "press the Split button to see them all");
1592 help =
_ (
"This transaction is a stock split; "
1593 "press the Split button to see details");
1598 return g_strdup (help);
1605get_trans_total_value_subaccounts (SplitRegister* reg, Transaction* trans)
1607 GList* children, *child;
1609 gnc_numeric total = gnc_numeric_zero();
1612 parent = gnc_split_register_get_default_account (reg);
1620 children = g_list_prepend (children, parent);
1622 for (child = children; child; child = child->next)
1628 g_list_free (children);
1634gnc_split_register_get_tdebcred_entry (VirtualLocation virt_loc,
1636 gboolean* conditionally_changed,
1639 SplitRegister* reg = user_data;
1640 const char* cell_name;
1644 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1648 cell_name = gnc_table_get_cell_name (reg->table, virt_loc);
1652 case GENERAL_JOURNAL:
1665 gnc_cell_name_equal (cell_name, TDEBT_CELL))
1669 gnc_cell_name_equal (cell_name, TCRED_CELL))
1675 reg->mismatched_commodities));
1688 case ASSET_REGISTER:
1689 case CREDIT_REGISTER:
1690 case LIABILITY_REGISTER:
1691 case INCOME_REGISTER:
1692 case EXPENSE_REGISTER:
1693 case EQUITY_REGISTER:
1694 case TRADING_REGISTER:
1695 case GENERAL_JOURNAL:
1698 case RECEIVABLE_REGISTER:
1699 case PAYABLE_REGISTER:
1702 case STOCK_REGISTER:
1703 case CURRENCY_REGISTER:
1704 case PORTFOLIO_LEDGER:
1715gnc_split_register_needs_conv_rate (SplitRegister* reg,
1716 Transaction* txn,
Account* acc)
1718 gnc_commodity* txn_cur, *acc_com;
1734gnc_split_register_get_debcred_entry (VirtualLocation virt_loc,
1736 gboolean* conditionally_changed,
1739 SplitRegister* reg = user_data;
1743 gnc_commodity* currency;
1745 is_debit = gnc_cell_name_equal
1746 (gnc_table_get_cell_name (reg->table, virt_loc), DEBT_CELL);
1748 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1749 trans = gnc_split_register_get_trans (reg, virt_loc.vcell_loc);
1757 gnc_numeric imbalance;
1767 MonetaryList* imbal_list;
1768 gnc_monetary* imbal_mon;
1777 if (imbal_list->next)
1784 imbal_mon = imbal_list->data;
1811 if (conditionally_changed)
1812 *conditionally_changed = TRUE;
1816 acc = gnc_split_register_get_default_account (reg);
1817 if (gnc_split_register_needs_conv_rate (reg, trans, acc))
1820 xaccTransGetAccountConvRate (trans, acc),
1822 GNC_HOW_RND_ROUND_HALF_UP);
1826 imbalance = gnc_numeric_convert (imbalance,
1828 GNC_HOW_RND_ROUND_HALF_UP);
1832 reg->mismatched_commodities));
1837 gnc_commodity* split_commodity;
1840 gnc_commodity* commodity;
1842 account = gnc_split_register_get_default_account (reg);
1848 gboolean use_symbol, is_current;
1849 is_current = virt_cell_loc_equal (reg->table->current_cursor_loc.vcell_loc,
1850 virt_loc.vcell_loc);
1852 if (reg->type == STOCK_REGISTER ||
1853 reg->type == CURRENCY_REGISTER ||
1854 reg->type == PORTFOLIO_LEDGER)
1856 gnc_commodity* amount_commodity;
1859 if (gnc_split_register_use_security_cells (reg, virt_loc))
1862 amount_commodity = currency;
1867 amount_commodity = split_commodity;
1875 print_info = gnc_commodity_print_info (amount_commodity, use_symbol);
1886 print_info = gnc_commodity_print_info (split_commodity, use_symbol);
1893 case STOCK_REGISTER:
1894 case CURRENCY_REGISTER:
1895 case PORTFOLIO_LEDGER:
1897 print_info = gnc_commodity_print_info (currency, reg->mismatched_commodities);
1909 amount = xaccSplitConvertAmount(split, account);
1913 print_info = gnc_account_print_info (account, reg->mismatched_commodities);
1914 print_info.commodity = commodity;
1937gnc_split_register_get_rbaln_entry (VirtualLocation virt_loc,
1939 gboolean* conditionally_changed,
1942 SplitRegister* reg = user_data;
1943 SRInfo* info = gnc_split_register_get_info (reg);
1946 gnc_numeric balance;
1950 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1952 gnc_get_current_book()))
1959 balance = gnc_split_register_get_rbaln (virt_loc, user_data, TRUE);
1963 account = gnc_split_register_get_default_account (reg);
1965 if (gnc_reverse_balance (account))
1968 return xaccPrintAmount (balance, gnc_account_print_info (account, FALSE));
1972gnc_split_register_cursor_is_readonly (VirtualLocation virt_loc,
1975 SplitRegister* reg = user_data;
1980 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1996 if (!txn)
return FALSE;
2007gnc_split_register_get_inactive_io_flags (VirtualLocation virt_loc,
2010 if (gnc_split_register_cursor_is_readonly (virt_loc, user_data))
2011 return XACC_CELL_ALLOW_READ_ONLY;
2013 return XACC_CELL_ALLOW_NONE;
2017gnc_split_register_get_standard_io_flags (VirtualLocation virt_loc,
2020 if (gnc_split_register_cursor_is_readonly (virt_loc, user_data))
2021 return XACC_CELL_ALLOW_READ_ONLY;
2023 return XACC_CELL_ALLOW_ALL;
2027gnc_split_register_get_recn_io_flags (VirtualLocation virt_loc,
2030 if (gnc_split_register_cursor_is_readonly (virt_loc, user_data))
2031 return XACC_CELL_ALLOW_READ_ONLY;
2033 return XACC_CELL_ALLOW_ALL | XACC_CELL_ALLOW_EXACT_ONLY;
2037gnc_split_register_get_doclink_io_flags (VirtualLocation virt_loc,
2040 if (gnc_split_register_cursor_is_readonly (virt_loc, user_data))
2041 return XACC_CELL_ALLOW_READ_ONLY;
2043 return XACC_CELL_ALLOW_ALL | XACC_CELL_ALLOW_EXACT_ONLY;
2047gnc_split_register_get_ddue_io_flags (VirtualLocation virt_loc,
2050 SplitRegister* reg = user_data;
2053 type = gnc_split_register_get_type_value (reg, virt_loc);
2058 return XACC_CELL_ALLOW_NONE;
2061 return XACC_CELL_ALLOW_READ_ONLY;
2065gnc_split_register_get_rate_io_flags (VirtualLocation virt_loc,
2068 return XACC_CELL_ALLOW_SHADOW;
2072gnc_split_register_get_debcred_io_flags (VirtualLocation virt_loc,
2075 SplitRegister* reg = user_data;
2078 if (gnc_split_register_cursor_is_readonly (virt_loc, user_data))
2079 return XACC_CELL_ALLOW_READ_ONLY;
2081 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
2084 return XACC_CELL_ALLOW_NONE;
2086 return XACC_CELL_ALLOW_ALL;
2090gnc_split_register_get_security_io_flags (VirtualLocation virt_loc,
2093 SplitRegister* reg = user_data;
2095 if (gnc_split_register_cursor_is_readonly (virt_loc, user_data))
2096 return XACC_CELL_ALLOW_READ_ONLY;
2098 if (gnc_split_register_use_security_cells (reg, virt_loc))
2099 return XACC_CELL_ALLOW_ALL;
2101 return XACC_CELL_ALLOW_SHADOW;
2105xaccTransWarnReadOnly (GtkWidget* parent, Transaction* trans)
2108 const gchar* reason;
2109 const gchar* format =
2110 _ (
"Cannot modify or delete this transaction. This transaction is "
2111 "marked read-only because:\n\n'%s'");
2113 if (!trans)
return FALSE;
2118 dialog = gtk_message_dialog_new (GTK_WINDOW (parent),
2124 gtk_dialog_run (GTK_DIALOG (dialog));
2125 gtk_widget_destroy (dialog);
2131static gboolean reg_trans_has_reconciled_splits (SplitRegister* reg,
2138 Split* split = node->data;
2140 if (!xaccTransStillHasSplit (trans, split))
2144 (g_list_index (reg->unrecn_splits, split) == -1))
2152gnc_split_register_confirm (VirtualLocation virt_loc, gpointer user_data)
2154 SplitRegister* reg = user_data;
2155 SRInfo* info = gnc_split_register_get_info (reg);
2159 const char* cell_name;
2160 gboolean protected_split_cell, protected_trans_cell;
2161 const gchar* title = NULL;
2162 const gchar* message = NULL;
2166 if (info->change_confirmed)
2169 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
2174 if (xaccTransWarnReadOnly (gnc_split_register_get_parent (reg), trans))
2177 if (!reg_trans_has_reconciled_splits (reg, trans))
2180 if (gnc_table_layout_get_cell_changed (reg->table->layout, RECN_CELL, FALSE))
2181 recn = gnc_recn_cell_get_flag
2182 ((
RecnCell*) gnc_table_layout_get_cell (reg->table->layout, RECN_CELL));
2183 else if (g_list_index (reg->unrecn_splits, split) != -1)
2189 cell_name = gnc_table_get_cell_name (reg->table, virt_loc);
2192 if (g_strcmp0 (cell_name,
"transfer") == 0)
2196 protected_split_cell = (g_strcmp0 (cell_name,
"account") == 0) ||
2197 (g_strcmp0 (cell_name,
"transfer") == 0) ||
2198 (g_strcmp0 (cell_name,
"debit") == 0) ||
2199 (g_strcmp0 (cell_name,
"credit") == 0);
2200 protected_trans_cell = (g_strcmp0 (cell_name,
"date") == 0) ||
2201 (g_strcmp0 (cell_name,
"num") == 0) ||
2202 (g_strcmp0 (cell_name,
"description") == 0);
2204 PINFO (
"Protected transaction cell %d, Protected split cell %d, Cell is %s",
2205 protected_trans_cell, protected_split_cell, cell_name);
2207 if (protected_trans_cell)
2209 GList* acc_g_list = NULL;
2210 gchar* acc_list = NULL;
2211 gchar* message_format;
2215 Split* split = node->data;
2217 if (!xaccTransStillHasSplit (trans, split))
2223 acc_g_list = g_list_prepend (acc_g_list, name);
2227 title =
_ (
"Change transaction containing a reconciled split?");
2229 _ (
"The transaction you are about to change contains reconciled splits in the following accounts:\n%s"
2230 "\n\nAre you sure you want to continue with this change?");
2232 message = g_strdup_printf (message_format, acc_list);
2233 g_list_free_full (acc_g_list, g_free);
2237 if (protected_split_cell)
2239 title =
_ (
"Change reconciled split?");
2241 _ (
"You are about to change a protected field of a reconciled split. "
2242 "If you continue editing this split it will be unreconciled. "
2243 "This might make future reconciliation difficult! Continue with this change?");
2246 if ((recn ==
YREC && protected_split_cell) || protected_trans_cell)
2248 GtkWidget* dialog, *window;
2252 window = gnc_split_register_get_parent (reg);
2254 gtk_message_dialog_new (GTK_WINDOW (window),
2255 GTK_DIALOG_DESTROY_WITH_PARENT,
2256 GTK_MESSAGE_WARNING,
2259 gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
2262 if (protected_split_cell)
2263 gtk_dialog_add_button (GTK_DIALOG (dialog), _ (
"Chan_ge Split"),
2266 gtk_dialog_add_button (GTK_DIALOG (dialog), _ (
"Chan_ge Transaction"),
2268 response = gnc_dialog_run (GTK_DIALOG (dialog),
2269 GNC_PREF_WARN_REG_RECD_SPLIT_MOD);
2270 gtk_widget_destroy (dialog);
2271 if (response != GTK_RESPONSE_YES)
2275 if (recn ==
YREC && protected_split_cell)
2277 if (g_list_index (reg->unrecn_splits, split) == -1)
2279 reg->unrecn_splits = g_list_append (reg->unrecn_splits, split);
2280 gnc_recn_cell_set_flag
2281 ((
RecnCell*) gnc_table_layout_get_cell (reg->table->layout, RECN_CELL),
2286 PINFO (
"Unreconcile split list length is %d",
2287 g_list_length (reg->unrecn_splits));
2288 info->change_confirmed = TRUE;
2294gnc_split_register_guid_malloc (
void)
2306gnc_template_register_get_xfrm_entry (VirtualLocation virt_loc,
2308 gboolean* conditionally_changed,
2311 static char* name = NULL;
2313 SplitRegister* reg = user_data;
2318 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
2327 "sx-account", &guid,
2331 reg->show_leaf_accounts) : NULL;
2337gnc_template_register_get_fdebt_entry (VirtualLocation virt_loc,
2339 gboolean* conditionally_changed,
2342 SplitRegister* reg = user_data;
2343 Split* split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
2344 static char* formula = NULL;
2351 "sx-debit-formula", &formula,
2359gnc_split_register_get_fdebt_help (VirtualLocation virt_loc,
2362 SplitRegister* reg = user_data;
2365 help = gnc_table_get_entry (reg->table, virt_loc);
2366 if (!help || *help ==
'\0')
2367 help =
_ (
"Enter debit formula for real transaction");
2369 return g_strdup (help);
2373gnc_template_register_get_fcred_entry (VirtualLocation virt_loc,
2375 gboolean* conditionally_changed,
2378 SplitRegister* reg = user_data;
2379 Split* split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
2380 static char* formula = NULL;
2387 "sx-credit-formula", &formula,
2396gnc_split_register_get_fcred_help (VirtualLocation virt_loc,
2399 SplitRegister* reg = user_data;
2400 const char* help = gnc_table_get_entry (reg->table, virt_loc);
2402 if (!help || *help ==
'\0')
2403 help =
_ (
"Enter credit formula for real transaction");
2405 return g_strdup (help);
2409gnc_split_register_get_default_help (VirtualLocation virt_loc,
2412 SplitRegister* reg = user_data;
2413 const char* help = gnc_table_get_entry (reg->table, virt_loc);
2415 return g_strdup (help);
2427gnc_template_register_get_debcred_entry (VirtualLocation virt_loc,
2429 gboolean* conditionally_changed,
2432 SplitRegister* reg = user_data;
2434 gnc_numeric* amount, amount2;
2435 const char* cell_name;
2437 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
2439 return gnc_split_register_get_debcred_entry (virt_loc,
2441 conditionally_changed,
2444 cell_name = gnc_table_get_cell_name (reg->table, virt_loc);
2445 if (gnc_cell_name_equal (cell_name, DEBT_CELL))
2447 "sx-debit-numeric", &amount,
2451 "sx-credit-numeric", &amount,
2465 gnc_default_print_info (reg->mismatched_commodities));
2469gnc_split_register_guid_free (gpointer guid)
2475gnc_split_register_guid_copy (gpointer p_to, gconstpointer p_from)
2480 g_return_if_fail (to != NULL);
2486gnc_split_register_colorize_negative (gpointer gsettings, gchar* key,
2490 GNC_PREF_NEGATIVE_IN_RED);
2495gnc_split_register_model_add_hooks (gpointer unused)
2498 GNC_PREF_NEGATIVE_IN_RED,
2499 gnc_split_register_colorize_negative,
2502 gnc_prefs_set_reg_negative_color_pref_id (
id);
2506 GNC_PREF_NEGATIVE_IN_RED);
2512gnc_split_register_model_new (
void)
2515 static GOnce once = G_ONCE_INIT;
2517 g_once (&once, gnc_split_register_model_add_hooks, NULL);
2519 model = gnc_table_model_new();
2522 gnc_table_model_set_entry_handler (model,
2523 gnc_split_register_get_date_entry,
2526 gnc_table_model_set_entry_handler (model,
2527 gnc_split_register_get_due_date_entry,
2530 gnc_table_model_set_entry_handler (model,
2531 gnc_split_register_get_num_entry,
2534 gnc_table_model_set_entry_handler (model,
2535 gnc_split_register_get_tran_num_entry,
2538 gnc_table_model_set_entry_handler (model,
2539 gnc_split_register_get_desc_entry,
2542 gnc_table_model_set_entry_handler (model,
2543 gnc_split_register_get_notes_entry,
2546 gnc_table_model_set_entry_handler (model,
2547 gnc_split_register_get_vnotes_entry,
2550 gnc_table_model_set_entry_handler (model,
2551 gnc_split_register_get_rate_entry,
2554 gnc_table_model_set_entry_handler (model,
2555 gnc_split_register_get_recn_entry,
2558 gnc_table_model_set_entry_handler (model,
2559 gnc_split_register_get_action_entry,
2562 gnc_table_model_set_entry_handler (model,
2563 gnc_split_register_get_memo_entry,
2566 gnc_table_model_set_entry_handler (model,
2567 gnc_split_register_get_balance_entry,
2570 gnc_table_model_set_entry_handler (model,
2571 gnc_split_register_get_balance_entry,
2574 gnc_table_model_set_entry_handler (model,
2575 gnc_split_register_get_price_entry,
2578 gnc_table_model_set_entry_handler (model,
2579 gnc_split_register_get_shares_entry,
2582 gnc_table_model_set_entry_handler (model,
2583 gnc_split_register_get_tshares_entry,
2586 gnc_table_model_set_entry_handler (model,
2587 gnc_split_register_get_xfrm_entry,
2590 gnc_table_model_set_entry_handler (model,
2591 gnc_split_register_get_mxfrm_entry,
2594 gnc_table_model_set_entry_handler (model,
2595 gnc_split_register_get_tdebcred_entry,
2598 gnc_table_model_set_entry_handler (model,
2599 gnc_split_register_get_tdebcred_entry,
2602 gnc_table_model_set_entry_handler (model,
2603 gnc_split_register_get_doclink_entry,
2606 gnc_table_model_set_entry_handler (model,
2607 gnc_split_register_get_type_entry,
2610 gnc_table_model_set_entry_handler (model,
2611 gnc_split_register_get_debcred_entry,
2614 gnc_table_model_set_entry_handler (model,
2615 gnc_split_register_get_debcred_entry,
2618 gnc_table_model_set_entry_handler (model,
2619 gnc_split_register_get_rbaln_entry,
2623 gnc_table_model_set_label_handler (model,
2624 gnc_split_register_get_date_label,
2627 gnc_table_model_set_label_handler (model,
2628 gnc_split_register_get_due_date_label,
2631 gnc_table_model_set_label_handler (model,
2632 gnc_split_register_get_num_label,
2635 gnc_table_model_set_label_handler (model,
2636 gnc_split_register_get_tran_num_label,
2639 gnc_table_model_set_label_handler (model,
2640 gnc_split_register_get_desc_label,
2643 gnc_table_model_set_label_handler (model,
2644 gnc_split_register_get_recn_label,
2647 gnc_table_model_set_label_handler (model,
2648 gnc_split_register_get_baln_label,
2651 gnc_table_model_set_label_handler (model,
2652 gnc_split_register_get_action_label,
2655 gnc_table_model_set_label_handler (model,
2656 gnc_split_register_get_xfrm_label,
2659 gnc_table_model_set_label_handler (model,
2660 gnc_split_register_get_memo_label,
2663 gnc_table_model_set_label_handler (model,
2664 gnc_split_register_get_debit_label,
2667 gnc_table_model_set_label_handler (model,
2668 gnc_split_register_get_credit_label,
2671 gnc_table_model_set_label_handler (model,
2672 gnc_split_register_get_price_label,
2675 gnc_table_model_set_label_handler (model,
2676 gnc_split_register_get_rate_label,
2679 gnc_table_model_set_label_handler (model,
2680 gnc_split_register_get_shares_label,
2683 gnc_table_model_set_label_handler (model,
2684 gnc_split_register_get_mxfrm_label,
2687 gnc_table_model_set_label_handler (model,
2688 gnc_split_register_get_tcredit_label,
2691 gnc_table_model_set_label_handler (model,
2692 gnc_split_register_get_tdebit_label,
2695 gnc_table_model_set_label_handler (model,
2696 gnc_split_register_get_tshares_label,
2699 gnc_table_model_set_label_handler (model,
2700 gnc_split_register_get_tbalance_label,
2703 gnc_table_model_set_label_handler (model,
2704 gnc_split_register_get_doclink_label,
2707 gnc_table_model_set_label_handler (model,
2708 gnc_split_register_get_type_label,
2711 gnc_table_model_set_label_handler (model,
2712 gnc_split_register_get_notes_label,
2715 gnc_table_model_set_label_handler (model,
2716 gnc_split_register_get_fdebit_label,
2719 gnc_table_model_set_label_handler (model,
2720 gnc_split_register_get_fcredit_label,
2723 gnc_table_model_set_label_handler (model,
2724 gnc_split_register_get_tbalance_label,
2729 gnc_table_model_set_tooltip_handler (model,
2730 gnc_split_register_get_recn_tooltip,
2733 gnc_table_model_set_tooltip_handler (model,
2734 gnc_split_register_get_doclink_tooltip,
2739 gnc_table_model_set_default_help_handler (
2740 model, gnc_split_register_get_default_help);
2742 gnc_table_model_set_help_handler (model,
2743 gnc_split_register_get_date_help,
2746 gnc_table_model_set_help_handler (model,
2747 gnc_split_register_get_date_help,
2750 gnc_table_model_set_help_handler (model,
2751 gnc_split_register_get_num_help,
2754 gnc_table_model_set_help_handler (model,
2755 gnc_split_register_get_tran_num_help,
2758 gnc_table_model_set_help_handler (model,
2759 gnc_split_register_get_desc_help,
2762 gnc_table_model_set_help_handler (model,
2763 gnc_split_register_get_price_help,
2766 gnc_table_model_set_help_handler (model,
2767 gnc_split_register_get_shares_help,
2770 gnc_table_model_set_help_handler (model,
2771 gnc_split_register_get_action_help,
2774 gnc_table_model_set_help_handler (model,
2775 gnc_split_register_get_memo_help,
2778 gnc_table_model_set_help_handler (model,
2779 gnc_split_register_get_notes_help,
2782 gnc_table_model_set_help_handler (model,
2783 gnc_split_register_get_vnotes_help,
2786 gnc_table_model_set_help_handler (model,
2787 gnc_split_register_get_xfrm_help,
2790 gnc_table_model_set_help_handler (model,
2791 gnc_split_register_get_mxfrm_help,
2794 gnc_table_model_set_help_handler (model,
2795 gnc_split_register_get_fcred_help,
2798 gnc_table_model_set_help_handler (model,
2799 gnc_split_register_get_fdebt_help,
2802 gnc_table_model_set_help_handler (model,
2803 gnc_split_register_get_doclink_help,
2807 gnc_table_model_set_io_flags_handler (
2808 model, gnc_split_register_get_standard_io_flags, DATE_CELL);
2815 gnc_table_model_set_io_flags_handler (
2816 model, gnc_split_register_get_rate_io_flags, RATE_CELL);
2818 gnc_table_model_set_io_flags_handler (
2819 model, gnc_split_register_get_ddue_io_flags, DDUE_CELL);
2821 gnc_table_model_set_io_flags_handler (
2822 model, gnc_split_register_get_standard_io_flags, NUM_CELL);
2824 gnc_table_model_set_io_flags_handler (
2825 model, gnc_split_register_get_standard_io_flags, TNUM_CELL);
2827 gnc_table_model_set_io_flags_handler (
2828 model, gnc_split_register_get_standard_io_flags, DESC_CELL);
2830 gnc_table_model_set_io_flags_handler (
2831 model, gnc_split_register_get_standard_io_flags, ACTN_CELL);
2833 gnc_table_model_set_io_flags_handler (
2834 model, gnc_split_register_get_standard_io_flags, XFRM_CELL);
2836 gnc_table_model_set_io_flags_handler (
2837 model, gnc_split_register_get_standard_io_flags, MEMO_CELL);
2839 gnc_table_model_set_io_flags_handler (
2840 model, gnc_split_register_get_standard_io_flags, MXFRM_CELL);
2842 gnc_table_model_set_io_flags_handler (
2843 model, gnc_split_register_get_standard_io_flags, NOTES_CELL);
2845 gnc_table_model_set_io_flags_handler (
2846 model, gnc_split_register_get_inactive_io_flags, VNOTES_CELL);
2848 gnc_table_model_set_io_flags_handler (
2849 model, gnc_split_register_get_debcred_io_flags, CRED_CELL);
2851 gnc_table_model_set_io_flags_handler (
2852 model, gnc_split_register_get_debcred_io_flags, DEBT_CELL);
2854 gnc_table_model_set_io_flags_handler (
2855 model, gnc_split_register_get_recn_io_flags, RECN_CELL);
2857 gnc_table_model_set_io_flags_handler (
2858 model, gnc_split_register_get_doclink_io_flags, DOCLINK_CELL);
2860 gnc_table_model_set_io_flags_handler (
2861 model, gnc_split_register_get_recn_io_flags, TYPE_CELL);
2863 gnc_table_model_set_io_flags_handler (
2864 model, gnc_split_register_get_security_io_flags, PRIC_CELL);
2866 gnc_table_model_set_io_flags_handler (
2867 model, gnc_split_register_get_security_io_flags, SHRS_CELL);
2870 gnc_table_model_set_default_cell_color_handler (
2871 model, gnc_split_register_get_cell_color);
2873 gnc_table_model_set_cell_color_handler (
2874 model, gnc_split_register_get_debcred_color, DEBT_CELL);
2876 gnc_table_model_set_cell_color_handler (
2877 model, gnc_split_register_get_debcred_color, CRED_CELL);
2879 gnc_table_model_set_cell_color_handler (
2880 model, gnc_split_register_get_debcred_color, TDEBT_CELL);
2882 gnc_table_model_set_cell_color_handler (
2883 model, gnc_split_register_get_debcred_color, TCRED_CELL);
2885 gnc_table_model_set_cell_color_handler (
2886 model, gnc_split_register_get_debcred_color, FCRED_CELL);
2888 gnc_table_model_set_cell_color_handler (
2889 model, gnc_split_register_get_debcred_color, FDEBT_CELL);
2892 gnc_table_model_set_default_cell_border_handler (
2893 model, gnc_split_register_get_border);
2896 gnc_table_model_set_default_confirm_handler (
2897 model, gnc_split_register_confirm);
2899 model->cell_data_allocator = gnc_split_register_guid_malloc;
2900 model->cell_data_deallocator = gnc_split_register_guid_free;
2901 model->cell_data_copy = gnc_split_register_guid_copy;
2903 gnc_split_register_model_add_save_handlers (model);
2909gnc_template_register_model_new (
void)
2913 model = gnc_split_register_model_new();
2915 gnc_table_model_set_entry_handler (
2916 model, gnc_split_register_get_inactive_date_entry, DATE_CELL);
2918 gnc_table_model_set_entry_handler (
2919 model, gnc_split_register_get_inactive_date_entry, DDUE_CELL);
2921 gnc_table_model_set_io_flags_handler (
2922 model, gnc_split_register_get_inactive_io_flags, DATE_CELL);
2924 gnc_table_model_set_io_flags_handler (
2925 model, gnc_split_register_get_inactive_io_flags, DDUE_CELL);
2927 gnc_table_model_set_entry_handler (
2928 model, gnc_template_register_get_xfrm_entry, XFRM_CELL);
2930 gnc_table_model_set_entry_handler (
2931 model, gnc_template_register_get_fdebt_entry, FDEBT_CELL);
2933 gnc_table_model_set_entry_handler (
2934 model, gnc_template_register_get_fcred_entry, FCRED_CELL);
2936 gnc_table_model_set_entry_handler (
2937 model, gnc_template_register_get_debcred_entry, DEBT_CELL);
2939 gnc_table_model_set_entry_handler (
2940 model, gnc_template_register_get_debcred_entry, CRED_CELL);
2942 gnc_table_model_set_io_flags_handler (
2943 model, gnc_split_register_get_standard_io_flags, FCRED_CELL);
2945 gnc_table_model_set_io_flags_handler (
2946 model, gnc_split_register_get_standard_io_flags, FDEBT_CELL);
2948 gnc_template_register_model_add_save_handlers (model);
All type declarations for the whole Gnucash engine.
File path resolution utility functions.
Generic api to store and retrieve preferences.
Utility functions for convert uri in separate components and back.
gchar * gnc_account_get_full_name(const Account *account)
The gnc_account_get_full_name routine returns the fully qualified name of the account using the given...
GList * gnc_account_get_descendants(const Account *account)
This routine returns a flat list of all of the accounts that are descendants of the specified account...
gboolean xaccAccountIsPriced(const Account *acc)
Returns true if the account is a stock, mutual fund or currency, otherwise false.
gnc_commodity * xaccAccountGetCommodity(const Account *acc)
Get the account's commodity
Account * xaccAccountLookup(const GncGUID *guid, QofBook *book)
The xaccAccountLookup() subroutine will return the account associated with the given id,...
gnc_numeric gnc_price_cell_get_value(PriceCell *cell)
return the value of a price cell
void gnc_date_cell_get_date(DateCell *cell, time64 *time, gboolean warn)
Set a time64 to the value in the DateCell.
gboolean gnc_commodity_equiv(const gnc_commodity *a, const gnc_commodity *b)
This routine returns TRUE if the two commodities are equivalent.
gboolean gnc_commodity_equal(const gnc_commodity *a, const gnc_commodity *b)
This routine returns TRUE if the two commodities are equal.
int gnc_commodity_get_fraction(const gnc_commodity *cm)
Retrieve the fraction for the specified commodity.
void gnc_monetary_list_free(MonetaryList *list)
Free a MonetaryList and all the monetaries it points to.
gboolean gnc_commodity_is_iso(const gnc_commodity *cm)
Checks to see if the specified commodity is an ISO 4217 recognized currency.
#define MAX_DATE_LENGTH
The maximum length of a string created by the date printers.
gint64 time64
Most systems that are currently maintained, including Microsoft Windows, BSD-derived Unixes and Linux...
size_t qof_print_date_buff(char *buff, const size_t len, time64 t)
Convenience: calls through to qof_print_date_dmy_buff().
char * gnc_print_time64(time64 time, const char *format)
print a time64 as a date string per format
const char * xaccTransGetVoidReason(const Transaction *trans)
Returns the user supplied textual reason why a transaction was voided.
gnc_commodity * xaccTransGetCurrency(const Transaction *trans)
Returns the valuation commodity of this transaction.
char xaccTransGetTxnType(Transaction *trans)
Returns the Transaction Type: note this type will be derived from the transaction splits,...
const char * xaccTransGetDocLink(const Transaction *trans)
Gets the transaction Document Link.
const char * xaccTransGetDescription(const Transaction *trans)
Gets the transaction Description.
MonetaryList * xaccTransGetImbalance(const Transaction *trans)
The xaccTransGetImbalance method returns a list giving the value of the transaction in each currency ...
#define TXN_TYPE_NONE
No transaction type
gboolean xaccTransIsBalanced(const Transaction *trans)
Returns true if the transaction is balanced according to the rules currently in effect.
#define TXN_TYPE_INVOICE
Transaction is an invoice.
Split * xaccTransGetSplit(const Transaction *trans, int i)
Return a pointer to the indexed split in this transaction's split list.
time64 xaccTransRetDatePosted(const Transaction *trans)
Retrieve the posted date of the transaction.
const char * xaccTransGetNotes(const Transaction *trans)
Gets the transaction Notes.
gnc_numeric xaccTransGetAccountValue(const Transaction *trans, const Account *acc)
The xaccTransGetAccountValue() method returns the total value applied to a particular account.
gnc_numeric xaccTransGetAccountAmount(const Transaction *trans, const Account *acc)
Same as xaccTransGetAccountValue, but uses the Account's commodity.
SplitList * xaccTransGetSplitList(const Transaction *trans)
The xaccTransGetSplitList() method returns a GList of the splits in a transaction.
gboolean xaccTransUseTradingAccounts(const Transaction *trans)
Determine whether this transaction should use commodity trading accounts.
time64 xaccTransRetDateDue(const Transaction *trans)
Dates and txn-type for A/R and A/P "invoice" postings.
gboolean xaccTransIsReadonlyByPostedDate(const Transaction *trans)
Returns TRUE if this Transaction is read-only because its posted-date is older than the "auto-readonl...
const char * xaccTransGetReadOnly(Transaction *trans)
Returns a non-NULL value if this Transaction was marked as read-only with some specific "reason" text...
gnc_numeric xaccTransGetAccountBalance(const Transaction *trans, const Account *account)
Get the account balance for the specified account after the last split in the specified transaction.
gnc_numeric xaccTransGetImbalanceValue(const Transaction *trans)
The xaccTransGetImbalanceValue() method returns the total value of the transaction.
const GncGUID * guid_null(void)
Returns a GncGUID which is guaranteed to never reference any entity.
GncGUID * guid_malloc(void)
Allocate memory for a GUID.
Account * gnc_account_lookup_for_register(const Account *base_account, const char *name)
Retrieve the account matching the given name starting from the descendants of base_account.
const char * xaccPrintAmount(gnc_numeric val, GNCPrintAmountInfo info)
Make a string representation of a gnc_numeric.
char * gnc_get_account_name_for_split_register(const Account *account, gboolean show_leaf_accounts)
Get either the full name of the account or the simple name, depending on the show_leaf_accounts.
gnc_commodity * gnc_default_currency(void)
Return the default currency set by the user.
const char * gnc_get_doclink_str(char link_flag)
Get a string representing the document link type.
gchar * gnc_g_list_stringjoin(GList *list_of_strings, const gchar *sep)
Return a string joining a GList whose elements are gchar* strings.
void qof_instance_get(const QofInstance *inst, const gchar *first_prop,...)
Wrapper for g_object_get.
#define PINFO(format, args...)
Print an informational note.
#define PWARN(format, args...)
Log a warning.
#define GNC_DENOM_AUTO
Values that can be passed as the 'denom' argument.
gnc_numeric gnc_numeric_div(gnc_numeric a, gnc_numeric b, gint64 denom, gint how)
Division.
gnc_numeric gnc_numeric_abs(gnc_numeric a)
Returns a newly created gnc_numeric that is the absolute value of the given gnc_numeric value.
gnc_numeric gnc_numeric_mul(gnc_numeric a, gnc_numeric b, gint64 denom, gint how)
Multiply a times b, returning the product.
gboolean gnc_numeric_negative_p(gnc_numeric a)
Returns 1 if a < 0, otherwise returns 0.
gboolean gnc_numeric_zero_p(gnc_numeric a)
Returns 1 if the given gnc_numeric is 0 (zero), else returns 0.
gnc_numeric gnc_numeric_neg(gnc_numeric a)
Returns a newly created gnc_numeric that is the negative of the given gnc_numeric value.
gboolean gnc_numeric_equal(gnc_numeric a, gnc_numeric b)
Equivalence predicate: Returns TRUE (1) if a and b represent the same number.
gboolean gnc_numeric_positive_p(gnc_numeric a)
Returns 1 if a > 0, otherwise returns 0.
gulong gnc_prefs_register_cb(const char *group, const gchar *pref_name, gpointer func, gpointer user_data)
Register a callback that gets triggered when the given preference changes.
gboolean gnc_prefs_get_bool(const gchar *group, const gchar *pref_name)
Get a boolean value from the preferences backend.
gboolean gnc_split_register_current_trans_expanded(SplitRegister *reg)
Return TRUE if current trans is expanded and style is REG_STYLE_LEDGER.
CursorClass gnc_split_register_get_cursor_class(SplitRegister *reg, VirtualCellLocation vcell_loc)
Returns the class of the cursor at the given virtual cell location.
SplitRegisterType
Register types.
Transaction * gnc_split_register_get_current_trans(SplitRegister *reg)
Gets the transaction at the current cursor location, which may be on the transaction itself or on any...
const char * gnc_split_register_get_credit_string(SplitRegister *reg)
Return the credit string used in the register.
const char * gnc_split_register_get_debit_string(SplitRegister *reg)
Return the debit string used in the register.
gboolean gnc_split_reg_has_rate_cell(SplitRegisterType type)
Determine if we need to perform any conversion on the splits in this transaction, and if so,...
CursorClass
Types of cursors.
VirtualCell * gnc_table_get_virtual_cell(Table *table, VirtualCellLocation vcell_loc)
returns the virtual cell associated with a particular virtual location.
Transaction * xaccSplitGetParent(const Split *split)
Returns the parent transaction of the split.
char xaccSplitGetReconcile(const Split *split)
Returns the value of the reconcile flag.
Split * xaccSplitLookup(const GncGUID *guid, QofBook *book)
The xaccSplitLookup() subroutine will return the split associated with the given id,...
#define VREC
split is void
time64 xaccSplitGetDateReconciled(const Split *split)
Retrieve the date when the Split was reconciled.
gnc_numeric xaccSplitGetValue(const Split *split)
Returns the value of this split in the transaction's commodity.
gnc_numeric xaccSplitGetSharePrice(const Split *split)
Returns the price of the split, that is, the value divided by the amount.
Account * xaccSplitGetAccount(const Split *split)
Returns the account of this split, which was set through xaccAccountInsertSplit().
const char * xaccSplitGetMemo(const Split *split)
Returns the memo string.
#define NREC
not reconciled or cleared
Split * xaccSplitGetOtherSplit(const Split *split)
The xaccSplitGetOtherSplit() is a convenience routine that returns the other of a pair of splits.
gnc_numeric xaccSplitGetBalance(const Split *s)
Returns the running balance up to and including the indicated split.
#define YREC
The Split has been reconciled.
gboolean xaccSplitIsStockSplit(Split *s)
Returns true if the split is of type stock split.
gnc_numeric xaccSplitGetAmount(const Split *split)
Returns the amount of the split in the account's commodity.
gchar * gnc_uri_get_scheme(const gchar *uri)
Extracts the scheme from a uri.
Save handlers for the SplitRegister Model and Template SplitRegister model.
TableModels specialized for SplitRegister and template SplitRegister.
private declarations for SplitRegister
API for checkbook register display area.
The DateCell object implements a date handling cell.
The Doclinkcell object implements a cell handler that will cycle through a series of single-character...
The type used to store guids in C.
The PriceCell object implements a cell handler that stores a single double-precision value,...
The RecnCell object implements a cell handler that will cycle through a series of single-character va...
holds information about each virtual cell.
unsigned int start_primary_color
visible in the GUI