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 (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;
462 gnc_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;
489 gnc_split_register_get_tshares_label (VirtualLocation virt_loc,
492 SplitRegister* reg = user_data;
494 if (reg->is_template)
497 return _ (
"Tot Shares");
501 gnc_split_register_get_tbalance_label (VirtualLocation virt_loc,
504 SplitRegister* reg = user_data;
506 if (reg->is_template)
509 return _ (
"Balance");
513 gnc_split_register_get_notes_label (VirtualLocation virt_loc,
520 gnc_split_register_get_fdebit_label (VirtualLocation virt_loc,
523 return _ (
"Debit Formula");
527 gnc_split_register_get_fcredit_label (VirtualLocation virt_loc,
530 return _ (
"Credit Formula");
536 gnc_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);
564 gnc_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);
586 get_trans_total_amount (SplitRegister* reg, Transaction* trans)
588 Account* account = gnc_split_register_get_default_account (reg);
593 get_trans_total_balance (SplitRegister* reg, Transaction* trans)
597 account = gnc_split_register_get_default_account (reg);
598 if (!trans || !account)
return gnc_numeric_zero();
604 gnc_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))
655 gnc_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);
741 gnc_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);
755 gnc_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);
776 gnc_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;
816 gnc_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);
870 gnc_split_register_get_doclink_help (VirtualLocation virt_loc,
874 return g_strdup (
" ");
880 gnc_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);
894 gnc_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);
920 gnc_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);
933 gnc_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));
986 gnc_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));
1007 gnc_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')
1026 gnc_split_register_get_inactive_date_entry (VirtualLocation virt_loc,
1028 gboolean* conditionally_changed,
1033 return _ (
"Scheduled");
1037 gnc_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);
1053 gnc_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);
1069 gnc_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);
1100 gnc_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);
1125 gnc_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);
1141 gnc_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);
1165 gnc_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);
1181 gnc_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);
1195 gnc_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);
1214 gnc_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);
1228 gnc_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,
1270 return xaccPrintAmount (convrate, gnc_default_price_print_info (curr));
1274 gnc_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);
1300 gnc_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);
1312 gnc_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);
1328 gnc_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);
1342 gnc_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);
1355 gnc_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));
1392 gnc_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);
1416 gnc_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);
1430 gnc_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));
1452 gnc_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);
1466 gnc_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));
1483 gnc_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);
1504 gnc_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);
1519 gnc_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 (
"");
1559 gnc_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);
1605 get_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);
1634 gnc_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:
1715 gnc_split_register_needs_conv_rate (SplitRegister* reg,
1716 Transaction* txn,
Account* acc)
1718 gnc_commodity* txn_cur, *acc_com;
1734 gnc_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),
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;
1937 gnc_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));
1972 gnc_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;
2007 gnc_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;
2017 gnc_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;
2027 gnc_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;
2037 gnc_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;
2047 gnc_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;
2065 gnc_split_register_get_rate_io_flags (VirtualLocation virt_loc,
2068 return XACC_CELL_ALLOW_SHADOW;
2072 gnc_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;
2090 gnc_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;
2105 xaccTransWarnReadOnly (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);
2131 static 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))
2152 gnc_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;
2294 gnc_split_register_guid_malloc (
void)
2306 gnc_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;
2337 gnc_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,
2359 gnc_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);
2373 gnc_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,
2396 gnc_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);
2409 gnc_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);
2427 gnc_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));
2469 gnc_split_register_guid_free (gpointer guid)
2475 gnc_split_register_guid_copy (gpointer p_to, gconstpointer p_from)
2480 g_return_if_fail (to != NULL);
2486 gnc_split_register_colorize_negative (gpointer gsettings, gchar* key,
2490 GNC_PREF_NEGATIVE_IN_RED);
2495 gnc_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);
2512 gnc_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);
2909 gnc_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);
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...