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" 48 static QofLogModule log_module = GNC_MOD_LEDGER;
51 static gboolean use_red_for_negative = TRUE;
58 gnc_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);
146 static gnc_commodity*
147 gnc_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);
186 gnc_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);
234 gnc_split_register_get_date_label (VirtualLocation virt_loc,
241 gnc_split_register_get_due_date_label (VirtualLocation virt_loc,
244 return _ (
"Due Date");
248 gnc_split_register_get_num_label (VirtualLocation virt_loc,
251 SplitRegister* reg = user_data;
255 case RECEIVABLE_REGISTER:
256 case PAYABLE_REGISTER:
269 gnc_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)
292 gnc_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");
309 gnc_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");
326 gnc_split_register_get_baln_label (VirtualLocation virt_loc,
329 return _ (
"Balance");
333 gnc_split_register_get_action_label (VirtualLocation virt_loc,
340 gnc_split_register_get_doclink_label (VirtualLocation virt_loc,
343 return C_ (
"Column header for 'Document Link'",
"L");
347 gnc_split_register_get_xfrm_label (VirtualLocation virt_loc,
350 return _ (
"Account");
354 gnc_split_register_get_mxfrm_label (VirtualLocation virt_loc,
357 return _ (
"Transfer");
361 gnc_split_register_get_memo_label (VirtualLocation virt_loc,
368 gnc_split_register_get_type_label (VirtualLocation virt_loc,
375 gnc_split_register_get_rate_label (VirtualLocation virt_loc,
382 gnc_split_register_get_debit_label (VirtualLocation virt_loc,
385 SplitRegister* reg = user_data;
391 gnc_split_register_get_credit_label (VirtualLocation virt_loc,
394 SplitRegister* reg = user_data;
400 gnc_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");
417 gnc_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.");
434 gnc_split_register_get_tcredit_label (VirtualLocation virt_loc,
437 SplitRegister* reg = user_data;
438 SRInfo* info = gnc_split_register_get_info (reg);
440 if (info->tcredit_str)
441 return info->tcredit_str;
447 info->tcredit_str = g_strdup_printf (_ (
"Tot %s"),
string);
450 if (info->tcredit_str)
451 return info->tcredit_str;
453 info->tcredit_str = g_strdup (_ (
"Tot Credit"));
455 return info->tcredit_str;
459 gnc_split_register_get_tdebit_label (VirtualLocation virt_loc,
462 SplitRegister* reg = user_data;
463 SRInfo* info = gnc_split_register_get_info (reg);
465 if (info->tdebit_str)
466 return info->tdebit_str;
471 info->tdebit_str = g_strdup_printf (_ (
"Tot %s"),
string);
474 if (info->tdebit_str)
475 return info->tdebit_str;
477 info->tdebit_str = g_strdup (_ (
"Tot Debit"));
479 return info->tdebit_str;
483 gnc_split_register_get_tshares_label (VirtualLocation virt_loc,
486 return _ (
"Tot Shares");
490 gnc_split_register_get_tbalance_label (VirtualLocation virt_loc,
493 return _ (
"Balance");
497 gnc_split_register_get_notes_label (VirtualLocation virt_loc,
504 gnc_split_register_get_fdebit_label (VirtualLocation virt_loc,
507 return _ (
"Debit Formula");
511 gnc_split_register_get_fcredit_label (VirtualLocation virt_loc,
514 return _ (
"Credit Formula");
520 gnc_split_register_get_recn_tooltip (VirtualLocation virt_loc,
523 SplitRegister* reg = user_data;
526 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
534 memset (datebuff, 0,
sizeof (datebuff));
536 return g_strdup_printf (_ (
"Reconciled on %s"), datebuff);
548 gnc_split_register_get_doclink_tooltip (VirtualLocation virt_loc,
551 SplitRegister* reg = user_data;
555 trans = gnc_split_register_get_trans (reg, virt_loc.vcell_loc);
564 return gnc_doclink_get_unescaped_just_uri (uri);
570 get_trans_total_amount (SplitRegister* reg, Transaction* trans)
572 Account* account = gnc_split_register_get_default_account (reg);
577 get_trans_total_balance (SplitRegister* reg, Transaction* trans)
581 account = gnc_split_register_get_default_account (reg);
582 if (!trans || !account)
return gnc_numeric_zero();
588 gnc_split_register_use_negative_color (VirtualLocation virt_loc,
591 const char* cell_name;
592 gnc_numeric value = gnc_numeric_zero();
595 if (!use_red_for_negative)
598 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
602 cell_name = gnc_table_get_cell_name (reg->table, virt_loc);
604 if (gnc_cell_name_equal (cell_name, TSHRS_CELL))
606 else if (gnc_cell_name_equal (cell_name, SHRS_CELL))
608 if (virt_cell_loc_equal (reg->table->current_cursor_loc.vcell_loc,
611 ((
PriceCell*) gnc_table_layout_get_cell (reg->table->layout,
616 else if (gnc_cell_name_equal (cell_name, BALN_CELL))
618 else if (gnc_cell_name_equal (cell_name, RBALN_CELL))
619 value = gnc_split_register_get_rbaln (virt_loc, reg, TRUE);
620 else if (gnc_cell_name_equal (cell_name, TBALN_CELL))
623 if ((gnc_cell_name_equal (cell_name, BALN_CELL)) ||
624 (gnc_cell_name_equal (cell_name, RBALN_CELL)) ||
625 (gnc_cell_name_equal (cell_name, TBALN_CELL)))
628 if (gnc_reverse_balance (account))
639 gnc_split_register_get_cell_color_internal (VirtualLocation virt_loc,
642 const char* cursor_name;
645 guint32 colorbase = 0;
649 if (gnc_split_register_use_negative_color (virt_loc, reg))
650 colorbase = COLOR_NEGATIVE;
653 return (colorbase + COLOR_UNDEFINED);
655 if (gnc_table_virtual_location_in_header (reg->table, virt_loc))
656 return (colorbase + COLOR_HEADER);
659 if (!vcell || !vcell->cellblock)
660 return (colorbase + COLOR_UNDEFINED);
662 if ((virt_loc.phys_col_offset < vcell->cellblock->start_col) ||
663 (virt_loc.phys_col_offset > vcell->cellblock->stop_col))
664 return (colorbase + COLOR_UNDEFINED);
666 is_current = virt_cell_loc_equal (reg->table->current_cursor_loc.vcell_loc,
669 cursor_name = vcell->cellblock->cursor_name;
671 if (g_strcmp0 (cursor_name, CURSOR_SINGLE_JOURNAL) == 0 ||
672 g_strcmp0 (cursor_name, CURSOR_SINGLE_LEDGER) == 0)
676 (colorbase + COLOR_PRIMARY_ACTIVE) :
677 (colorbase + COLOR_SECONDARY_ACTIVE);
680 (colorbase + COLOR_PRIMARY) : (colorbase + COLOR_SECONDARY);
683 if (g_strcmp0 (cursor_name, CURSOR_DOUBLE_JOURNAL) == 0 ||
684 g_strcmp0 (cursor_name, CURSOR_DOUBLE_JOURNAL_NUM_ACTN) == 0 ||
685 g_strcmp0 (cursor_name, CURSOR_DOUBLE_LEDGER) == 0 ||
686 g_strcmp0 (cursor_name, CURSOR_DOUBLE_LEDGER_NUM_ACTN) == 0)
690 if (reg->double_alt_color)
692 (colorbase + COLOR_PRIMARY_ACTIVE) :
693 (colorbase + COLOR_SECONDARY_ACTIVE);
695 return (virt_loc.phys_row_offset % 2 == 0) ?
696 (colorbase + COLOR_PRIMARY_ACTIVE) :
697 (colorbase + COLOR_SECONDARY_ACTIVE);
700 if (reg->double_alt_color)
702 (colorbase + COLOR_PRIMARY) :
703 (colorbase + COLOR_SECONDARY);
705 return (virt_loc.phys_row_offset % 2 == 0) ?
706 (colorbase + COLOR_PRIMARY) :
707 (colorbase + COLOR_SECONDARY);
710 if (g_strcmp0 (cursor_name, CURSOR_SPLIT) == 0)
713 return (colorbase + COLOR_SPLIT_ACTIVE);
715 return (colorbase + COLOR_SPLIT);
718 PWARN (
"Unexpected cursor: %s\n", cursor_name);
720 return (colorbase + COLOR_UNDEFINED);
725 gnc_split_register_get_cell_color (VirtualLocation virt_loc,
729 SplitRegister* reg = user_data;
734 return gnc_split_register_get_cell_color_internal (virt_loc, reg);
739 gnc_split_register_get_debcred_color (VirtualLocation virt_loc,
743 SplitRegister* reg = user_data;
749 trans = gnc_split_register_get_trans (reg, virt_loc.vcell_loc);
756 return gnc_split_register_get_cell_color_internal (virt_loc, reg);
760 gnc_split_register_get_border (VirtualLocation virt_loc,
764 SplitRegister* reg = user_data;
769 if (!vcell || !vcell->cellblock)
772 if (virt_loc.phys_col_offset < vcell->cellblock->start_col ||
773 virt_loc.phys_col_offset > vcell->cellblock->stop_col)
775 borders->top = CELL_BORDER_LINE_NONE;
776 borders->bottom = CELL_BORDER_LINE_NONE;
777 borders->left = CELL_BORDER_LINE_NONE;
778 borders->right = CELL_BORDER_LINE_NONE;
783 gnc_split_register_cursor_name_to_class (vcell->cellblock->cursor_name);
785 if (cursor_class == CURSOR_CLASS_SPLIT)
787 borders->top = CELL_BORDER_LINE_LIGHT;
788 borders->bottom = CELL_BORDER_LINE_LIGHT;
789 borders->left = MIN (borders->left, CELL_BORDER_LINE_LIGHT);
790 borders->right = MIN (borders->right, CELL_BORDER_LINE_LIGHT);
792 if (virt_loc.phys_col_offset == vcell->cellblock->start_col)
793 borders->left = CELL_BORDER_LINE_NORMAL;
794 if (virt_loc.phys_col_offset == vcell->cellblock->stop_col)
795 borders->right = CELL_BORDER_LINE_NORMAL;
800 gnc_split_register_get_doclink_entry (VirtualLocation virt_loc,
802 gboolean* conditionally_changed,
805 SplitRegister* reg = user_data;
811 cell = (
Doclinkcell *)gnc_table_layout_get_cell (reg->table->layout, DOCLINK_CELL);
816 trans = gnc_split_register_get_trans (reg, virt_loc.vcell_loc);
828 if (!scheme || g_strcmp0 (scheme,
"file") == 0)
838 if (gnc_doclink_get_use_glyphs (cell))
839 return gnc_doclink_get_glyph_from_flag (link_flag);
854 gnc_split_register_get_doclink_help (VirtualLocation virt_loc,
858 return g_strdup (
" ");
864 gnc_split_register_get_doclink_value (SplitRegister* reg,
865 VirtualLocation virt_loc)
869 cell = (
Doclinkcell *)gnc_table_layout_get_cell (reg->table->layout, DOCLINK_CELL);
873 return gnc_doclink_cell_get_flag (cell);
878 gnc_split_register_get_type_entry (VirtualLocation virt_loc,
880 gboolean* conditionally_changed,
883 SplitRegister* reg = user_data;
888 trans = gnc_split_register_get_trans (reg, virt_loc.vcell_loc);
904 gnc_split_register_get_type_value (SplitRegister* reg,
905 VirtualLocation virt_loc)
909 cell = (
RecnCell*)gnc_table_layout_get_cell (reg->table->layout, TYPE_CELL);
913 return gnc_recn_cell_get_flag (cell);
917 gnc_split_register_get_due_date_entry (VirtualLocation virt_loc,
919 gboolean* conditionally_changed,
922 SplitRegister* reg = user_data;
929 is_current = virt_cell_loc_equal (reg->table->current_cursor_loc.vcell_loc,
934 type = gnc_split_register_get_type_value (reg, virt_loc);
938 const char* typestr =
939 gnc_split_register_get_type_entry (virt_loc, translate,
940 conditionally_changed, user_data);
954 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
964 memset (dateBuff, 0,
sizeof (dateBuff));
970 gnc_split_register_get_date_entry (VirtualLocation virt_loc,
972 gboolean* conditionally_changed,
975 SplitRegister* reg = user_data;
980 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
985 memset (dateBuff, 0,
sizeof (dateBuff));
991 gnc_split_register_get_date_help (VirtualLocation virt_loc,
994 SplitRegister* reg = user_data;
998 cell = gnc_table_get_cell (reg->table, virt_loc);
999 if (!cell || !cell->value || *cell->value ==
'\0')
1010 gnc_split_register_get_inactive_date_entry (VirtualLocation virt_loc,
1012 gboolean* conditionally_changed,
1017 return _ (
"Scheduled");
1021 gnc_split_register_get_num_entry (VirtualLocation virt_loc,
1023 gboolean* conditionally_changed,
1026 SplitRegister* reg = user_data;
1030 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1033 return gnc_get_num_action (trans, split);
1037 gnc_split_register_get_tran_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, NULL);
1053 gnc_split_register_get_num_help (VirtualLocation virt_loc,
1056 SplitRegister* reg = user_data;
1059 help = gnc_table_get_entry (reg->table, virt_loc);
1060 if (!help || *help ==
'\0')
1063 case RECEIVABLE_REGISTER:
1064 case PAYABLE_REGISTER:
1065 help = reg->use_tran_num_for_num_field ?
1066 _ (
"Enter a reference, such as an invoice or check number, " 1067 "common to all entry lines (splits)") :
1068 _ (
"Enter a reference, such as an invoice or check number, " 1069 "unique to each entry line (split)");
1072 help = reg->use_tran_num_for_num_field ?
1073 _ (
"Enter a reference, such as a check number, " 1074 "common to all entry lines (splits)") :
1075 _ (
"Enter a reference, such as a check number, " 1076 "unique to each entry line (split)");
1080 return g_strdup (help);
1084 gnc_split_register_get_tran_num_help (VirtualLocation virt_loc,
1087 SplitRegister* reg = user_data;
1090 help = gnc_table_get_entry (reg->table, virt_loc);
1091 if (!help || *help ==
'\0')
1094 case RECEIVABLE_REGISTER:
1095 case PAYABLE_REGISTER:
1096 help = _ (
"Enter a transaction reference, such as an invoice " 1097 "or check number, common to all entry lines (splits)");
1100 help = _ (
"Enter a transaction reference " 1101 "that will be common to all entry lines (splits)");
1105 return g_strdup (help);
1109 gnc_split_register_get_desc_entry (VirtualLocation virt_loc,
1111 gboolean* conditionally_changed,
1114 SplitRegister* reg = user_data;
1118 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1125 gnc_split_register_get_desc_help (VirtualLocation virt_loc,
1128 SplitRegister* reg = user_data;
1131 help = gnc_table_get_entry (reg->table, virt_loc);
1132 if (!help || *help ==
'\0')
1135 case RECEIVABLE_REGISTER:
1136 help = _ (
"Enter the name of the Customer");
1138 case PAYABLE_REGISTER:
1139 help = _ (
"Enter the name of the Vendor");
1142 help = _ (
"Enter a description of the transaction");
1145 return g_strdup (help);
1149 gnc_split_register_get_notes_entry (VirtualLocation virt_loc,
1151 gboolean* conditionally_changed,
1154 SplitRegister* reg = user_data;
1158 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1165 gnc_split_register_get_notes_help (VirtualLocation virt_loc,
1168 SplitRegister* reg = user_data;
1171 help = gnc_table_get_entry (reg->table, virt_loc);
1172 if (!help || *help ==
'\0')
1173 help = _ (
"Enter notes for the transaction");
1175 return g_strdup (help);
1179 gnc_split_register_get_vnotes_entry (VirtualLocation virt_loc,
1181 gboolean* conditionally_changed,
1184 SplitRegister* reg = user_data;
1188 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1198 gnc_split_register_get_vnotes_help (VirtualLocation virt_loc,
1201 SplitRegister* reg = user_data;
1204 help = gnc_table_get_entry (reg->table, virt_loc);
1205 if (!help || *help ==
'\0')
1206 help = _ (
"Reason the transaction was voided");
1208 return g_strdup (help);
1212 gnc_split_register_get_rate_entry (VirtualLocation virt_loc,
1214 gboolean* conditionally_changed,
1217 SplitRegister* reg = user_data;
1218 Split* split, *osplit;
1220 gnc_numeric amount, value, convrate;
1221 gnc_commodity* curr;
1222 SRInfo* info = gnc_split_register_get_info (reg);
1224 if (info->rate_reset == RATE_RESET_REQD && info->auto_complete)
1227 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1236 txn = gnc_split_register_get_trans (reg, virt_loc.vcell_loc);
1239 !gnc_split_register_needs_conv_rate (reg, txn,
1254 return xaccPrintAmount (convrate, gnc_default_price_print_info (curr));
1258 gnc_split_register_get_recn_entry (VirtualLocation virt_loc,
1260 gboolean* conditionally_changed,
1263 SplitRegister* reg = user_data;
1266 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1284 gnc_split_register_get_action_entry (VirtualLocation virt_loc,
1286 gboolean* conditionally_changed,
1289 SplitRegister* reg = user_data;
1290 Split* split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1292 return gnc_get_num_action (NULL, split);
1296 gnc_split_register_get_action_help (VirtualLocation virt_loc,
1299 SplitRegister* reg = user_data;
1302 help = gnc_table_get_entry (reg->table, virt_loc);
1303 if (!help || *help ==
'\0')
1304 help = reg->use_tran_num_for_num_field ?
1305 _ (
"Enter an action type, or choose one from the list") :
1306 _ (
"Enter a reference number, such as the next check number, or choose an action type from the list");
1308 return g_strdup (help);
1312 gnc_split_register_get_memo_entry (VirtualLocation virt_loc,
1314 gboolean* conditionally_changed,
1317 SplitRegister* reg = user_data;
1320 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1326 gnc_split_register_get_memo_help (VirtualLocation virt_loc,
1329 SplitRegister* reg = user_data;
1332 help = gnc_table_get_entry (reg->table, virt_loc);
1333 if (!help || *help ==
'\0')
1334 help = _ (
"Enter a description of the split");
1335 return g_strdup (help);
1339 gnc_split_register_get_balance_entry (VirtualLocation virt_loc,
1341 gboolean* conditionally_changed,
1344 SplitRegister* reg = user_data;
1345 SRInfo* info = gnc_split_register_get_info (reg);
1346 gnc_numeric balance;
1351 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1353 gnc_get_current_book()))
1356 is_trans = gnc_cell_name_equal
1357 (gnc_table_get_cell_name (reg->table, virt_loc), TBALN_CELL);
1366 account = gnc_split_register_get_default_account (reg);
1368 if (gnc_reverse_balance (account))
1372 reg->mismatched_commodities));
1376 gnc_split_register_get_price_entry (VirtualLocation virt_loc,
1378 gboolean* conditionally_changed,
1381 SplitRegister* reg = user_data;
1383 gnc_commodity* curr;
1386 if (!gnc_split_register_use_security_cells (reg, virt_loc))
1389 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1400 gnc_split_register_get_price_help (VirtualLocation virt_loc,
1403 SplitRegister* reg = user_data;
1406 help = gnc_table_get_entry (reg->table, virt_loc);
1407 if (!help || *help ==
'\0')
1408 help = _ (
"Enter the effective share price");
1410 return g_strdup (help);
1414 gnc_split_register_get_shares_entry (VirtualLocation virt_loc,
1416 gboolean* conditionally_changed,
1419 SplitRegister* reg = user_data;
1423 if (!gnc_split_register_use_security_cells (reg, virt_loc))
1426 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1432 return xaccPrintAmount (shares, gnc_split_amount_print_info (split, FALSE));
1436 gnc_split_register_get_shares_help (VirtualLocation virt_loc,
1439 SplitRegister* reg = user_data;
1442 help = gnc_table_get_entry (reg->table, virt_loc);
1443 if (!help || *help ==
'\0')
1444 help = _ (
"Enter the number of shares bought or sold");
1446 return g_strdup (help);
1450 gnc_split_register_get_tshares_entry (VirtualLocation virt_loc,
1452 gboolean* conditionally_changed,
1455 SplitRegister* reg = user_data;
1459 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1463 return xaccPrintAmount (total, gnc_split_amount_print_info (split, FALSE));
1467 gnc_split_register_get_xfrm_entry (VirtualLocation virt_loc,
1469 gboolean* conditionally_changed,
1472 static char* name = NULL;
1474 SplitRegister* reg = user_data;
1477 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1482 reg->show_leaf_accounts);
1488 gnc_split_register_get_xfrm_help (VirtualLocation virt_loc,
1491 SplitRegister* reg = user_data;
1494 help = gnc_table_get_entry (reg->table, virt_loc);
1495 if (!help || *help ==
'\0')
1496 help = _ (
"Enter the account to transfer from, " 1497 "or choose one from the list");
1499 return g_strdup (help);
1503 gnc_split_register_get_mxfrm_entry (VirtualLocation virt_loc,
1505 gboolean* conditionally_changed,
1508 static char* name = NULL;
1510 SplitRegister* reg = user_data;
1514 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1524 reg->show_leaf_accounts);
1532 name = g_strdup (SPLIT_TRANS_STR);
1534 name = g_strdup (STOCK_SPLIT_STR);
1536 name = g_strdup (
"");
1543 gnc_split_register_get_mxfrm_help (VirtualLocation virt_loc,
1548 SplitRegister* reg = user_data;
1552 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1560 help = gnc_split_register_get_mxfrm_entry (virt_loc, FALSE,
1562 if (!help || *help ==
'\0')
1563 help = _ (
"Enter the account to transfer from, " 1564 "or choose one from the list");
1573 help = _ (
"This transaction has multiple splits; " 1574 "press the Split button to see them all");
1576 help = _ (
"This transaction is a stock split; " 1577 "press the Split button to see details");
1582 return g_strdup (help);
1589 get_trans_total_value_subaccounts (SplitRegister* reg, Transaction* trans)
1591 GList* children, *child;
1593 gnc_numeric total = gnc_numeric_zero();
1596 parent = gnc_split_register_get_default_account (reg);
1604 children = g_list_prepend (children, parent);
1606 for (child = children; child; child = child->next)
1612 g_list_free (children);
1618 gnc_split_register_get_tdebcred_entry (VirtualLocation virt_loc,
1620 gboolean* conditionally_changed,
1623 SplitRegister* reg = user_data;
1624 const char* cell_name;
1628 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1632 cell_name = gnc_table_get_cell_name (reg->table, virt_loc);
1636 case GENERAL_JOURNAL:
1649 gnc_cell_name_equal (cell_name, TDEBT_CELL))
1653 gnc_cell_name_equal (cell_name, TCRED_CELL))
1659 reg->mismatched_commodities));
1672 case ASSET_REGISTER:
1673 case CREDIT_REGISTER:
1674 case LIABILITY_REGISTER:
1675 case INCOME_REGISTER:
1676 case EXPENSE_REGISTER:
1677 case EQUITY_REGISTER:
1678 case TRADING_REGISTER:
1679 case GENERAL_JOURNAL:
1682 case RECEIVABLE_REGISTER:
1683 case PAYABLE_REGISTER:
1686 case STOCK_REGISTER:
1687 case CURRENCY_REGISTER:
1688 case PORTFOLIO_LEDGER:
1699 gnc_split_register_needs_conv_rate (SplitRegister* reg,
1700 Transaction* txn,
Account* acc)
1702 gnc_commodity* txn_cur, *acc_com;
1718 gnc_split_register_get_debcred_entry (VirtualLocation virt_loc,
1720 gboolean* conditionally_changed,
1723 SplitRegister* reg = user_data;
1727 gnc_commodity* currency;
1729 is_debit = gnc_cell_name_equal
1730 (gnc_table_get_cell_name (reg->table, virt_loc), DEBT_CELL);
1732 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1733 trans = gnc_split_register_get_trans (reg, virt_loc.vcell_loc);
1741 gnc_numeric imbalance;
1751 MonetaryList* imbal_list;
1752 gnc_monetary* imbal_mon;
1761 if (imbal_list->next)
1768 imbal_mon = imbal_list->data;
1795 if (conditionally_changed)
1796 *conditionally_changed = TRUE;
1800 acc = gnc_split_register_get_default_account (reg);
1801 if (gnc_split_register_needs_conv_rate (reg, trans, acc))
1804 xaccTransGetAccountConvRate (trans, acc),
1816 reg->mismatched_commodities));
1821 gnc_commodity* split_commodity;
1824 gnc_commodity* commodity;
1826 account = gnc_split_register_get_default_account (reg);
1832 gboolean use_symbol, is_current;
1833 is_current = virt_cell_loc_equal (reg->table->current_cursor_loc.vcell_loc,
1834 virt_loc.vcell_loc);
1836 if (reg->type == STOCK_REGISTER ||
1837 reg->type == CURRENCY_REGISTER ||
1838 reg->type == PORTFOLIO_LEDGER)
1840 gnc_commodity* amount_commodity;
1843 if (gnc_split_register_use_security_cells (reg, virt_loc))
1846 amount_commodity = currency;
1851 amount_commodity = split_commodity;
1859 print_info = gnc_commodity_print_info (amount_commodity, use_symbol);
1870 print_info = gnc_commodity_print_info (split_commodity, use_symbol);
1877 case STOCK_REGISTER:
1878 case CURRENCY_REGISTER:
1879 case PORTFOLIO_LEDGER:
1881 print_info = gnc_commodity_print_info (currency, reg->mismatched_commodities);
1893 amount = xaccSplitConvertAmount(split, account);
1897 print_info = gnc_account_print_info (account, reg->mismatched_commodities);
1898 print_info.commodity = commodity;
1921 gnc_split_register_get_rbaln_entry (VirtualLocation virt_loc,
1923 gboolean* conditionally_changed,
1926 SplitRegister* reg = user_data;
1927 SRInfo* info = gnc_split_register_get_info (reg);
1930 gnc_numeric balance;
1934 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1936 gnc_get_current_book()))
1943 balance = gnc_split_register_get_rbaln (virt_loc, user_data, TRUE);
1947 account = gnc_split_register_get_default_account (reg);
1949 if (gnc_reverse_balance (account))
1952 return xaccPrintAmount (balance, gnc_account_print_info (account, FALSE));
1956 gnc_split_register_cursor_is_readonly (VirtualLocation virt_loc,
1959 SplitRegister* reg = user_data;
1964 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
1980 if (!txn)
return FALSE;
1991 gnc_split_register_get_inactive_io_flags (VirtualLocation virt_loc,
1994 if (gnc_split_register_cursor_is_readonly (virt_loc, user_data))
1995 return XACC_CELL_ALLOW_READ_ONLY;
1997 return XACC_CELL_ALLOW_NONE;
2001 gnc_split_register_get_standard_io_flags (VirtualLocation virt_loc,
2004 if (gnc_split_register_cursor_is_readonly (virt_loc, user_data))
2005 return XACC_CELL_ALLOW_READ_ONLY;
2007 return XACC_CELL_ALLOW_ALL;
2011 gnc_split_register_get_recn_io_flags (VirtualLocation virt_loc,
2014 if (gnc_split_register_cursor_is_readonly (virt_loc, user_data))
2015 return XACC_CELL_ALLOW_READ_ONLY;
2017 return XACC_CELL_ALLOW_ALL | XACC_CELL_ALLOW_EXACT_ONLY;
2021 gnc_split_register_get_doclink_io_flags (VirtualLocation virt_loc,
2024 if (gnc_split_register_cursor_is_readonly (virt_loc, user_data))
2025 return XACC_CELL_ALLOW_READ_ONLY;
2027 return XACC_CELL_ALLOW_ALL | XACC_CELL_ALLOW_EXACT_ONLY;
2031 gnc_split_register_get_ddue_io_flags (VirtualLocation virt_loc,
2034 SplitRegister* reg = user_data;
2037 type = gnc_split_register_get_type_value (reg, virt_loc);
2042 return XACC_CELL_ALLOW_NONE;
2045 return XACC_CELL_ALLOW_READ_ONLY;
2049 gnc_split_register_get_rate_io_flags (VirtualLocation virt_loc,
2052 return XACC_CELL_ALLOW_SHADOW;
2056 gnc_split_register_get_debcred_io_flags (VirtualLocation virt_loc,
2059 SplitRegister* reg = user_data;
2062 if (gnc_split_register_cursor_is_readonly (virt_loc, user_data))
2063 return XACC_CELL_ALLOW_READ_ONLY;
2065 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
2068 return XACC_CELL_ALLOW_NONE;
2070 return XACC_CELL_ALLOW_ALL;
2074 gnc_split_register_get_security_io_flags (VirtualLocation virt_loc,
2077 SplitRegister* reg = user_data;
2079 if (gnc_split_register_cursor_is_readonly (virt_loc, user_data))
2080 return XACC_CELL_ALLOW_READ_ONLY;
2082 if (gnc_split_register_use_security_cells (reg, virt_loc))
2083 return XACC_CELL_ALLOW_ALL;
2085 return XACC_CELL_ALLOW_SHADOW;
2089 xaccTransWarnReadOnly (GtkWidget* parent, Transaction* trans)
2092 const gchar* reason;
2093 const gchar* format =
2094 _ (
"Cannot modify or delete this transaction. This transaction is " 2095 "marked read-only because:\n\n'%s'");
2097 if (!trans)
return FALSE;
2102 dialog = gtk_message_dialog_new (GTK_WINDOW (parent),
2108 gtk_dialog_run (GTK_DIALOG (dialog));
2109 gtk_widget_destroy (dialog);
2115 static gboolean reg_trans_has_reconciled_splits (SplitRegister* reg,
2122 Split* split = node->data;
2124 if (!xaccTransStillHasSplit (trans, split))
2128 (g_list_index (reg->unrecn_splits, split) == -1))
2136 gnc_split_register_confirm (VirtualLocation virt_loc, gpointer user_data)
2138 SplitRegister* reg = user_data;
2139 SRInfo* info = gnc_split_register_get_info (reg);
2143 const char* cell_name;
2144 gboolean protected_split_cell, protected_trans_cell;
2145 const gchar* title = NULL;
2146 const gchar* message = NULL;
2150 if (info->change_confirmed)
2153 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
2158 if (xaccTransWarnReadOnly (gnc_split_register_get_parent (reg), trans))
2161 if (!reg_trans_has_reconciled_splits (reg, trans))
2164 if (gnc_table_layout_get_cell_changed (reg->table->layout, RECN_CELL, FALSE))
2165 recn = gnc_recn_cell_get_flag
2166 ((
RecnCell*) gnc_table_layout_get_cell (reg->table->layout, RECN_CELL));
2167 else if (g_list_index (reg->unrecn_splits, split) != -1)
2173 cell_name = gnc_table_get_cell_name (reg->table, virt_loc);
2176 if (g_strcmp0 (cell_name,
"transfer") == 0)
2180 protected_split_cell = (g_strcmp0 (cell_name,
"account") == 0) ||
2181 (g_strcmp0 (cell_name,
"transfer") == 0) ||
2182 (g_strcmp0 (cell_name,
"debit") == 0) ||
2183 (g_strcmp0 (cell_name,
"credit") == 0);
2184 protected_trans_cell = (g_strcmp0 (cell_name,
"date") == 0) ||
2185 (g_strcmp0 (cell_name,
"num") == 0) ||
2186 (g_strcmp0 (cell_name,
"description") == 0);
2188 PINFO (
"Protected transaction cell %d, Protected split cell %d, Cell is %s",
2189 protected_trans_cell, protected_split_cell, cell_name);
2191 if (protected_trans_cell)
2193 GList* acc_g_list = NULL;
2194 gchar* acc_list = NULL;
2195 gchar* message_format;
2199 Split* split = node->data;
2201 if (!xaccTransStillHasSplit (trans, split))
2207 acc_g_list = g_list_prepend (acc_g_list, name);
2211 title = _ (
"Change transaction containing a reconciled split?");
2213 _ (
"The transaction you are about to change contains reconciled splits in the following accounts:\n%s" 2214 "\n\nAre you sure you want to continue with this change?");
2216 message = g_strdup_printf (message_format, acc_list);
2217 g_list_free_full (acc_g_list, g_free);
2221 if (protected_split_cell)
2223 title = _ (
"Change reconciled split?");
2225 _ (
"You are about to change a protected field of a reconciled split. " 2226 "If you continue editing this split it will be unreconciled. " 2227 "This might make future reconciliation difficult! Continue with this change?");
2230 if ((recn ==
YREC && protected_split_cell) || protected_trans_cell)
2232 GtkWidget* dialog, *window;
2236 window = gnc_split_register_get_parent (reg);
2238 gtk_message_dialog_new (GTK_WINDOW (window),
2239 GTK_DIALOG_DESTROY_WITH_PARENT,
2240 GTK_MESSAGE_WARNING,
2243 gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
2246 if (protected_split_cell)
2247 gtk_dialog_add_button (GTK_DIALOG (dialog), _ (
"Chan_ge Split"),
2250 gtk_dialog_add_button (GTK_DIALOG (dialog), _ (
"Chan_ge Transaction"),
2252 response = gnc_dialog_run (GTK_DIALOG (dialog),
2253 GNC_PREF_WARN_REG_RECD_SPLIT_MOD);
2254 gtk_widget_destroy (dialog);
2255 if (response != GTK_RESPONSE_YES)
2259 if (recn ==
YREC && protected_split_cell)
2261 if (g_list_index (reg->unrecn_splits, split) == -1)
2263 reg->unrecn_splits = g_list_append (reg->unrecn_splits, split);
2264 gnc_recn_cell_set_flag
2265 ((
RecnCell*) gnc_table_layout_get_cell (reg->table->layout, RECN_CELL),
2270 PINFO (
"Unreconcile split list length is %d",
2271 g_list_length (reg->unrecn_splits));
2272 info->change_confirmed = TRUE;
2278 gnc_split_register_guid_malloc (
void)
2290 gnc_template_register_get_xfrm_entry (VirtualLocation virt_loc,
2292 gboolean* conditionally_changed,
2295 static char* name = NULL;
2297 SplitRegister* reg = user_data;
2302 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
2311 "sx-account", &guid,
2315 reg->show_leaf_accounts) : NULL;
2321 gnc_template_register_get_fdebt_entry (VirtualLocation virt_loc,
2323 gboolean* conditionally_changed,
2326 SplitRegister* reg = user_data;
2327 Split* split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
2328 static char* formula = NULL;
2335 "sx-debit-formula", &formula,
2343 gnc_split_register_get_fdebt_help (VirtualLocation virt_loc,
2346 SplitRegister* reg = user_data;
2349 help = gnc_table_get_entry (reg->table, virt_loc);
2350 if (!help || *help ==
'\0')
2351 help = _ (
"Enter debit formula for real transaction");
2353 return g_strdup (help);
2357 gnc_template_register_get_fcred_entry (VirtualLocation virt_loc,
2359 gboolean* conditionally_changed,
2362 SplitRegister* reg = user_data;
2363 Split* split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
2364 static char* formula = NULL;
2371 "sx-credit-formula", &formula,
2380 gnc_split_register_get_fcred_help (VirtualLocation virt_loc,
2383 SplitRegister* reg = user_data;
2384 const char* help = gnc_table_get_entry (reg->table, virt_loc);
2386 if (!help || *help ==
'\0')
2387 help = _ (
"Enter credit formula for real transaction");
2389 return g_strdup (help);
2393 gnc_split_register_get_default_help (VirtualLocation virt_loc,
2396 SplitRegister* reg = user_data;
2397 const char* help = gnc_table_get_entry (reg->table, virt_loc);
2399 return g_strdup (help);
2411 gnc_template_register_get_debcred_entry (VirtualLocation virt_loc,
2413 gboolean* conditionally_changed,
2416 SplitRegister* reg = user_data;
2418 gnc_numeric* amount, amount2;
2419 const char* cell_name;
2421 split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
2423 return gnc_split_register_get_debcred_entry (virt_loc,
2425 conditionally_changed,
2428 cell_name = gnc_table_get_cell_name (reg->table, virt_loc);
2429 if (gnc_cell_name_equal (cell_name, DEBT_CELL))
2431 "sx-debit-numeric", &amount,
2435 "sx-credit-numeric", &amount,
2449 gnc_default_print_info (reg->mismatched_commodities));
2453 gnc_split_register_guid_free (gpointer guid)
2459 gnc_split_register_guid_copy (gpointer p_to, gconstpointer p_from)
2464 g_return_if_fail (to != NULL);
2470 gnc_split_register_colorize_negative (gpointer gsettings, gchar* key,
2474 GNC_PREF_NEGATIVE_IN_RED);
2479 gnc_split_register_model_add_hooks (gpointer unused)
2482 GNC_PREF_NEGATIVE_IN_RED,
2483 gnc_split_register_colorize_negative,
2486 gnc_prefs_set_reg_negative_color_pref_id (
id);
2490 GNC_PREF_NEGATIVE_IN_RED);
2496 gnc_split_register_model_new (
void)
2499 static GOnce once = G_ONCE_INIT;
2501 g_once (&once, gnc_split_register_model_add_hooks, NULL);
2503 model = gnc_table_model_new();
2506 gnc_table_model_set_entry_handler (model,
2507 gnc_split_register_get_date_entry,
2510 gnc_table_model_set_entry_handler (model,
2511 gnc_split_register_get_due_date_entry,
2514 gnc_table_model_set_entry_handler (model,
2515 gnc_split_register_get_num_entry,
2518 gnc_table_model_set_entry_handler (model,
2519 gnc_split_register_get_tran_num_entry,
2522 gnc_table_model_set_entry_handler (model,
2523 gnc_split_register_get_desc_entry,
2526 gnc_table_model_set_entry_handler (model,
2527 gnc_split_register_get_notes_entry,
2530 gnc_table_model_set_entry_handler (model,
2531 gnc_split_register_get_vnotes_entry,
2534 gnc_table_model_set_entry_handler (model,
2535 gnc_split_register_get_rate_entry,
2538 gnc_table_model_set_entry_handler (model,
2539 gnc_split_register_get_recn_entry,
2542 gnc_table_model_set_entry_handler (model,
2543 gnc_split_register_get_action_entry,
2546 gnc_table_model_set_entry_handler (model,
2547 gnc_split_register_get_memo_entry,
2550 gnc_table_model_set_entry_handler (model,
2551 gnc_split_register_get_balance_entry,
2554 gnc_table_model_set_entry_handler (model,
2555 gnc_split_register_get_balance_entry,
2558 gnc_table_model_set_entry_handler (model,
2559 gnc_split_register_get_price_entry,
2562 gnc_table_model_set_entry_handler (model,
2563 gnc_split_register_get_shares_entry,
2566 gnc_table_model_set_entry_handler (model,
2567 gnc_split_register_get_tshares_entry,
2570 gnc_table_model_set_entry_handler (model,
2571 gnc_split_register_get_xfrm_entry,
2574 gnc_table_model_set_entry_handler (model,
2575 gnc_split_register_get_mxfrm_entry,
2578 gnc_table_model_set_entry_handler (model,
2579 gnc_split_register_get_tdebcred_entry,
2582 gnc_table_model_set_entry_handler (model,
2583 gnc_split_register_get_tdebcred_entry,
2586 gnc_table_model_set_entry_handler (model,
2587 gnc_split_register_get_doclink_entry,
2590 gnc_table_model_set_entry_handler (model,
2591 gnc_split_register_get_type_entry,
2594 gnc_table_model_set_entry_handler (model,
2595 gnc_split_register_get_debcred_entry,
2598 gnc_table_model_set_entry_handler (model,
2599 gnc_split_register_get_debcred_entry,
2602 gnc_table_model_set_entry_handler (model,
2603 gnc_split_register_get_rbaln_entry,
2607 gnc_table_model_set_label_handler (model,
2608 gnc_split_register_get_date_label,
2611 gnc_table_model_set_label_handler (model,
2612 gnc_split_register_get_due_date_label,
2615 gnc_table_model_set_label_handler (model,
2616 gnc_split_register_get_num_label,
2619 gnc_table_model_set_label_handler (model,
2620 gnc_split_register_get_tran_num_label,
2623 gnc_table_model_set_label_handler (model,
2624 gnc_split_register_get_desc_label,
2627 gnc_table_model_set_label_handler (model,
2628 gnc_split_register_get_recn_label,
2631 gnc_table_model_set_label_handler (model,
2632 gnc_split_register_get_baln_label,
2635 gnc_table_model_set_label_handler (model,
2636 gnc_split_register_get_action_label,
2639 gnc_table_model_set_label_handler (model,
2640 gnc_split_register_get_xfrm_label,
2643 gnc_table_model_set_label_handler (model,
2644 gnc_split_register_get_memo_label,
2647 gnc_table_model_set_label_handler (model,
2648 gnc_split_register_get_debit_label,
2651 gnc_table_model_set_label_handler (model,
2652 gnc_split_register_get_credit_label,
2655 gnc_table_model_set_label_handler (model,
2656 gnc_split_register_get_price_label,
2659 gnc_table_model_set_label_handler (model,
2660 gnc_split_register_get_rate_label,
2663 gnc_table_model_set_label_handler (model,
2664 gnc_split_register_get_shares_label,
2667 gnc_table_model_set_label_handler (model,
2668 gnc_split_register_get_mxfrm_label,
2671 gnc_table_model_set_label_handler (model,
2672 gnc_split_register_get_tcredit_label,
2675 gnc_table_model_set_label_handler (model,
2676 gnc_split_register_get_tdebit_label,
2679 gnc_table_model_set_label_handler (model,
2680 gnc_split_register_get_tshares_label,
2683 gnc_table_model_set_label_handler (model,
2684 gnc_split_register_get_tbalance_label,
2687 gnc_table_model_set_label_handler (model,
2688 gnc_split_register_get_doclink_label,
2691 gnc_table_model_set_label_handler (model,
2692 gnc_split_register_get_type_label,
2695 gnc_table_model_set_label_handler (model,
2696 gnc_split_register_get_notes_label,
2699 gnc_table_model_set_label_handler (model,
2700 gnc_split_register_get_fdebit_label,
2703 gnc_table_model_set_label_handler (model,
2704 gnc_split_register_get_fcredit_label,
2707 gnc_table_model_set_label_handler (model,
2708 gnc_split_register_get_tbalance_label,
2713 gnc_table_model_set_tooltip_handler (model,
2714 gnc_split_register_get_recn_tooltip,
2717 gnc_table_model_set_tooltip_handler (model,
2718 gnc_split_register_get_doclink_tooltip,
2723 gnc_table_model_set_default_help_handler (
2724 model, gnc_split_register_get_default_help);
2726 gnc_table_model_set_help_handler (model,
2727 gnc_split_register_get_date_help,
2730 gnc_table_model_set_help_handler (model,
2731 gnc_split_register_get_date_help,
2734 gnc_table_model_set_help_handler (model,
2735 gnc_split_register_get_num_help,
2738 gnc_table_model_set_help_handler (model,
2739 gnc_split_register_get_tran_num_help,
2742 gnc_table_model_set_help_handler (model,
2743 gnc_split_register_get_desc_help,
2746 gnc_table_model_set_help_handler (model,
2747 gnc_split_register_get_price_help,
2750 gnc_table_model_set_help_handler (model,
2751 gnc_split_register_get_shares_help,
2754 gnc_table_model_set_help_handler (model,
2755 gnc_split_register_get_action_help,
2758 gnc_table_model_set_help_handler (model,
2759 gnc_split_register_get_memo_help,
2762 gnc_table_model_set_help_handler (model,
2763 gnc_split_register_get_notes_help,
2766 gnc_table_model_set_help_handler (model,
2767 gnc_split_register_get_vnotes_help,
2770 gnc_table_model_set_help_handler (model,
2771 gnc_split_register_get_xfrm_help,
2774 gnc_table_model_set_help_handler (model,
2775 gnc_split_register_get_mxfrm_help,
2778 gnc_table_model_set_help_handler (model,
2779 gnc_split_register_get_fcred_help,
2782 gnc_table_model_set_help_handler (model,
2783 gnc_split_register_get_fdebt_help,
2786 gnc_table_model_set_help_handler (model,
2787 gnc_split_register_get_doclink_help,
2791 gnc_table_model_set_io_flags_handler (
2792 model, gnc_split_register_get_standard_io_flags, DATE_CELL);
2799 gnc_table_model_set_io_flags_handler (
2800 model, gnc_split_register_get_rate_io_flags, RATE_CELL);
2802 gnc_table_model_set_io_flags_handler (
2803 model, gnc_split_register_get_ddue_io_flags, DDUE_CELL);
2805 gnc_table_model_set_io_flags_handler (
2806 model, gnc_split_register_get_standard_io_flags, NUM_CELL);
2808 gnc_table_model_set_io_flags_handler (
2809 model, gnc_split_register_get_standard_io_flags, TNUM_CELL);
2811 gnc_table_model_set_io_flags_handler (
2812 model, gnc_split_register_get_standard_io_flags, DESC_CELL);
2814 gnc_table_model_set_io_flags_handler (
2815 model, gnc_split_register_get_standard_io_flags, ACTN_CELL);
2817 gnc_table_model_set_io_flags_handler (
2818 model, gnc_split_register_get_standard_io_flags, XFRM_CELL);
2820 gnc_table_model_set_io_flags_handler (
2821 model, gnc_split_register_get_standard_io_flags, MEMO_CELL);
2823 gnc_table_model_set_io_flags_handler (
2824 model, gnc_split_register_get_standard_io_flags, MXFRM_CELL);
2826 gnc_table_model_set_io_flags_handler (
2827 model, gnc_split_register_get_standard_io_flags, NOTES_CELL);
2829 gnc_table_model_set_io_flags_handler (
2830 model, gnc_split_register_get_inactive_io_flags, VNOTES_CELL);
2832 gnc_table_model_set_io_flags_handler (
2833 model, gnc_split_register_get_debcred_io_flags, CRED_CELL);
2835 gnc_table_model_set_io_flags_handler (
2836 model, gnc_split_register_get_debcred_io_flags, DEBT_CELL);
2838 gnc_table_model_set_io_flags_handler (
2839 model, gnc_split_register_get_recn_io_flags, RECN_CELL);
2841 gnc_table_model_set_io_flags_handler (
2842 model, gnc_split_register_get_doclink_io_flags, DOCLINK_CELL);
2844 gnc_table_model_set_io_flags_handler (
2845 model, gnc_split_register_get_recn_io_flags, TYPE_CELL);
2847 gnc_table_model_set_io_flags_handler (
2848 model, gnc_split_register_get_security_io_flags, PRIC_CELL);
2850 gnc_table_model_set_io_flags_handler (
2851 model, gnc_split_register_get_security_io_flags, SHRS_CELL);
2854 gnc_table_model_set_default_cell_color_handler (
2855 model, gnc_split_register_get_cell_color);
2857 gnc_table_model_set_cell_color_handler (
2858 model, gnc_split_register_get_debcred_color, DEBT_CELL);
2860 gnc_table_model_set_cell_color_handler (
2861 model, gnc_split_register_get_debcred_color, CRED_CELL);
2863 gnc_table_model_set_cell_color_handler (
2864 model, gnc_split_register_get_debcred_color, TDEBT_CELL);
2866 gnc_table_model_set_cell_color_handler (
2867 model, gnc_split_register_get_debcred_color, TCRED_CELL);
2869 gnc_table_model_set_cell_color_handler (
2870 model, gnc_split_register_get_debcred_color, FCRED_CELL);
2872 gnc_table_model_set_cell_color_handler (
2873 model, gnc_split_register_get_debcred_color, FDEBT_CELL);
2876 gnc_table_model_set_default_cell_border_handler (
2877 model, gnc_split_register_get_border);
2880 gnc_table_model_set_default_confirm_handler (
2881 model, gnc_split_register_confirm);
2883 model->cell_data_allocator = gnc_split_register_guid_malloc;
2884 model->cell_data_deallocator = gnc_split_register_guid_free;
2885 model->cell_data_copy = gnc_split_register_guid_copy;
2887 gnc_split_register_model_add_save_handlers (model);
2893 gnc_template_register_model_new (
void)
2897 model = gnc_split_register_model_new();
2899 gnc_table_model_set_entry_handler (
2900 model, gnc_split_register_get_inactive_date_entry, DATE_CELL);
2902 gnc_table_model_set_entry_handler (
2903 model, gnc_split_register_get_inactive_date_entry, DDUE_CELL);
2905 gnc_table_model_set_io_flags_handler (
2906 model, gnc_split_register_get_inactive_io_flags, DATE_CELL);
2908 gnc_table_model_set_io_flags_handler (
2909 model, gnc_split_register_get_inactive_io_flags, DDUE_CELL);
2911 gnc_table_model_set_entry_handler (
2912 model, gnc_template_register_get_xfrm_entry, XFRM_CELL);
2914 gnc_table_model_set_entry_handler (
2915 model, gnc_template_register_get_fdebt_entry, FDEBT_CELL);
2917 gnc_table_model_set_entry_handler (
2918 model, gnc_template_register_get_fcred_entry, FCRED_CELL);
2920 gnc_table_model_set_entry_handler (
2921 model, gnc_template_register_get_debcred_entry, DEBT_CELL);
2923 gnc_table_model_set_entry_handler (
2924 model, gnc_template_register_get_debcred_entry, CRED_CELL);
2926 gnc_table_model_set_io_flags_handler (
2927 model, gnc_split_register_get_standard_io_flags, FCRED_CELL);
2929 gnc_table_model_set_io_flags_handler (
2930 model, gnc_split_register_get_standard_io_flags, FDEBT_CELL);
2932 gnc_template_register_model_add_save_handlers (model);
The RecnCell object implements a cell handler that will cycle through a series of single-character va...
gboolean gnc_numeric_equal(gnc_numeric a, gnc_numeric b)
Equivalence predicate: Returns TRUE (1) if a and b represent the same number.
const char * gnc_split_register_get_credit_string(SplitRegister *reg)
Return the credit string used in the register.
int gnc_commodity_get_fraction(const gnc_commodity *cm)
Retrieve the fraction for the specified commodity.
void qof_instance_get(const QofInstance *inst, const gchar *first_prop,...)
Wrapper for g_object_get.
Split * xaccTransGetSplit(const Transaction *trans, int i)
Return a pointer to the indexed split in this transaction's split list.
gchar * gnc_uri_get_scheme(const gchar *uri)
Extracts the scheme from a uri.
gboolean xaccTransUseTradingAccounts(const Transaction *trans)
Determine whether this transaction should use commodity trading accounts.
gboolean xaccTransIsReadonlyByPostedDate(const Transaction *trans)
Returns TRUE if this Transaction is read-only because its posted-date is older than the "auto-readonl...
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.
gchar * gnc_g_list_stringjoin(GList *list_of_strings, const gchar *sep)
Return a string joining a GList whose elements are gchar* strings.
gboolean xaccAccountIsPriced(const Account *acc)
Returns true if the account is a stock, mutual fund or currency, otherwise false. ...
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...
char xaccTransGetTxnType(Transaction *trans)
Returns the Transaction Type: note this type will be derived from the transaction splits...
#define TXN_TYPE_INVOICE
Transaction is an invoice.
#define PINFO(format, args...)
Print an informational note.
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...
gnc_numeric gnc_numeric_neg(gnc_numeric a)
Returns a newly created gnc_numeric that is the negative of the given gnc_numeric value...
const char * xaccTransGetVoidReason(const Transaction *trans)
Returns the user supplied textual reason why a transaction was voided.
holds information about each virtual cell.
const char * xaccTransGetReadOnly(Transaction *trans)
Returns a non-NULL value if this Transaction was marked as read-only with some specific "reason" text...
char xaccSplitGetReconcile(const Split *split)
Returns the value of the reconcile flag.
gboolean gnc_commodity_equal(const gnc_commodity *a, const gnc_commodity *b)
This routine returns TRUE if the two commodities are equal.
const char * xaccPrintAmount(gnc_numeric val, GNCPrintAmountInfo info)
Make a string representation of a gnc_numeric.
CursorClass gnc_split_register_get_cursor_class(SplitRegister *reg, VirtualCellLocation vcell_loc)
Returns the class of the cursor at the given virtual cell location.
Save handlers for the SplitRegister Model and Template SplitRegister model.
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...
gboolean gnc_numeric_zero_p(gnc_numeric a)
Returns 1 if the given gnc_numeric is 0 (zero), else returns 0.
Transaction * xaccSplitGetParent(const Split *split)
Returns the parent transaction of the split.
TableModels specialized for SplitRegister and template SplitRegister.
The Doclinkcell object implements a cell handler that will cycle through a series of single-character...
gboolean xaccTransIsBalanced(const Transaction *trans)
Returns true if the transaction is balanced according to the rules currently in effect.
gnc_numeric xaccSplitGetBalance(const Split *s)
Returns the running balance up to and including the indicated split.
gboolean gnc_split_register_current_trans_expanded(SplitRegister *reg)
Return TRUE if current trans is expanded and style is REG_STYLE_LEDGER.
const char * xaccTransGetDocLink(const Transaction *trans)
Gets the transaction Document Link.
gboolean gnc_numeric_negative_p(gnc_numeric a)
Returns 1 if a < 0, otherwise returns 0.
#define VREC
split is void
gnc_commodity * gnc_default_currency(void)
Return the default currency set by the user.
#define PWARN(format, args...)
Log a warning.
const char * xaccTransGetNotes(const Transaction *trans)
Gets the transaction Notes.
#define TXN_TYPE_NONE
No transaction type.
Split * xaccSplitLookup(const GncGUID *guid, QofBook *book)
The xaccSplitLookup() subroutine will return the split associated with the given id, or NULL if there is no such split.
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...
const char * gnc_split_register_get_debit_string(SplitRegister *reg)
Return the debit string used in the register.
gnc_numeric gnc_numeric_convert(gnc_numeric n, gint64 denom, gint how)
Change the denominator of a gnc_numeric value to the specified denominator under standard arguments '...
Reduce the result value by common factor elimination, using the smallest possible value for the denom...
GncGUID * guid_malloc(void)
Allocate memory for a GUID.
gnc_numeric xaccTransGetImbalanceValue(const Transaction *trans)
The xaccTransGetImbalanceValue() method returns the total value of the transaction.
CursorClass
Types of cursors.
#define YREC
The Split has been reconciled.
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_numeric gnc_numeric_mul(gnc_numeric a, gnc_numeric b, gint64 denom, gint how)
Multiply a times b, returning the product.
The PriceCell object implements a cell handler that stores a single double-precision value...
VirtualCell * gnc_table_get_virtual_cell(Table *table, VirtualCellLocation vcell_loc)
returns the virtual cell associated with a particular virtual location.
void gnc_monetary_list_free(MonetaryList *list)
Free a MonetaryList and all the monetaries it points to.
void gnc_date_cell_get_date(DateCell *cell, time64 *time, gboolean warn)
Set a time64 to the value in the DateCell.
char * gnc_print_time64(time64 time, const char *format)
print a time64 as a date string per format
time64 xaccTransRetDatePosted(const Transaction *trans)
Retrieve the posted date of the transaction.
private declarations for SplitRegister
const char * xaccTransGetDescription(const Transaction *trans)
Gets the transaction Description.
unsigned int start_primary_color
visible in the GUI
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...
#define MAX_DATE_LENGTH
The maximum length of a string created by the date printers.
gnc_numeric gnc_numeric_div(gnc_numeric x, gnc_numeric y, gint64 denom, gint how)
Division.
gnc_numeric xaccSplitGetSharePrice(const Split *split)
Returns the price of the split, that is, the value divided by the amount.
All type declarations for the whole Gnucash engine.
API for checkbook register display area.
gboolean gnc_numeric_positive_p(gnc_numeric a)
Returns 1 if a > 0, otherwise returns 0.
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.
Generic api to store and retrieve preferences.
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...
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.
Account * xaccSplitGetAccount(const Split *split)
Returns the account of this split, which was set through xaccAccountInsertSplit().
gnc_commodity * xaccAccountGetCommodity(const Account *acc)
Get the account's commodity.
const GncGUID * guid_null(void)
Returns a GncGUID which is guaranteed to never reference any entity.
gnc_commodity * xaccTransGetCurrency(const Transaction *trans)
Returns the valuation commodity of this transaction.
MonetaryList * xaccTransGetImbalance(const Transaction *trans)
The xaccTransGetImbalance method returns a list giving the value of the transaction in each currency ...
gboolean gnc_prefs_get_bool(const gchar *group, const gchar *pref_name)
Get a boolean value from the preferences backend.
Split * xaccSplitGetOtherSplit(const Split *split)
The xaccSplitGetOtherSplit() is a convenience routine that returns the other of a pair of splits...
Round to the nearest integer, rounding away from zero when there are two equidistant nearest integers...
const char * gnc_get_doclink_str(char link_flag)
Get a string representing the document link type.
Utility functions for convert uri in separate components and back.
const char * xaccSplitGetMemo(const Split *split)
Returns the memo string.
gint64 time64
Most systems that are currently maintained, including Microsoft Windows, BSD-derived Unixes and Linux...
The DateCell object implements a date handling cell.
File path resolution utility functions.
const char * xaccSplitGetType(const Split *s)
The xaccIsPeerSplit() is a convenience routine that returns TRUE (a non-zero value) if the two splits...
SplitRegisterType
Register types.
#define GNC_DENOM_AUTO
Values that can be passed as the 'denom' argument.
The type used to store guids in C.
gnc_numeric gnc_price_cell_get_value(PriceCell *cell)
return the value of a price cell
time64 xaccTransRetDateDue(const Transaction *trans)
Dates and txn-type for A/R and A/P "invoice" postings.
size_t qof_print_date_buff(char *buff, size_t buflen, time64 secs)
Convenience: calls through to qof_print_date_dmy_buff().
SplitList * xaccTransGetSplitList(const Transaction *trans)
The xaccTransGetSplitList() method returns a GList of the splits in a transaction.
gboolean gnc_commodity_equiv(const gnc_commodity *a, const gnc_commodity *b)
This routine returns TRUE if the two commodities are equivalent.
gnc_numeric xaccTransGetAccountAmount(const Transaction *trans, const Account *acc)
Same as xaccTransGetAccountValue, but uses the Account's commodity.
gboolean gnc_commodity_is_iso(const gnc_commodity *cm)
Checks to see if the specified commodity is an ISO 4217 recognized currency.
gnc_numeric xaccTransGetAccountValue(const Transaction *trans, const Account *acc)
The xaccTransGetAccountValue() method returns the total value applied to a particular account...
#define NREC
not reconciled or cleared
gnc_numeric xaccSplitGetAmount(const Split *split)
Returns the amount of the split in the account's commodity.
Account * xaccAccountLookup(const GncGUID *guid, QofBook *book)
The xaccAccountLookup() subroutine will return the account associated with the given id...