33 #include <glib/gi18n.h> 42 #include "gnc-warnings.h" 43 #include "dialog-utils.h" 45 #define STATE_SECTION_REG_PREFIX "Register" 46 #define STATE_SECTION_GEN_JOURNAL "General Journal" 48 static QofLogModule log_module = GNC_MOD_GUI;
53 static GtkWidget* add_summary_label (GtkWidget *summarybar,
54 const char *label_str);
56 static void gnc_split_reg2_determine_read_only (GNCSplitReg2 *gsr, gboolean show_dialog);
58 static void gnc_split_reg2_determine_account_pr (GNCSplitReg2 *gsr);
61 static GtkWidget *gnc_split_reg2_get_parent (GNCLedgerDisplay2 *ledger);
63 static void gsr2_create_table (GNCSplitReg2 *gsr);
64 static void gsr2_setup_table (GNCSplitReg2 *gsr);
66 static void gsr2_setup_status_widgets (GNCSplitReg2 *gsr);
68 static void gsr2_update_summary_label (GtkWidget *label,
69 xaccGetBalanceFn getter,
78 static void gnc_split_reg2_ld_destroy (GNCLedgerDisplay2 *ledger);
80 static Transaction* gsr2_create_balancing_transaction (QofBook *book,
Account *account,
81 time64 statement_date, gnc_numeric balancing_amount);
83 static void gsr2_emit_simple_signal (GNCSplitReg2 *gsr,
const char *sigName);
85 static void gsr2_scroll_value_changed_cb (GtkAdjustment *adj, gpointer user_data);
86 static gboolean gsr2_scroll_button_event_cb (GtkWidget *widget, GdkEventButton *event, gpointer user_data);
89 void gnc_split_reg2_style_ledger_cb (GtkWidget *w, gpointer data);
90 void gnc_split_reg2_style_auto_ledger_cb (GtkWidget *w, gpointer data);
91 void gnc_split_reg2_style_journal_cb (GtkWidget *w, gpointer data);
92 void gnc_split_reg2_double_line_cb (GtkWidget *w, gpointer data);
94 void gnc_split_reg2_destroy_cb (GtkWidget *widget, gpointer data);
96 static void gnc_split_reg2_class_init (GNCSplitReg2Class *klass);
97 static void gnc_split_reg2_init (GNCSplitReg2 *gsr);
98 static void gnc_split_reg2_init2 (GNCSplitReg2 *gsr);
100 static void gnc_split_reg2_sort_changed_cb (GtkTreeSortable *sortable, gpointer user_data);
106 static GType gnc_split_reg2_type = 0;
108 if (!gnc_split_reg2_type)
110 GTypeInfo type_info =
112 sizeof(GNCSplitReg2Class),
115 (GClassInitFunc)gnc_split_reg2_class_init,
118 sizeof(GNCSplitReg2),
120 (GInstanceInitFunc)gnc_split_reg2_init,
123 gnc_split_reg2_type = g_type_register_static (GTK_TYPE_BOX,
128 return gnc_split_reg2_type;
138 static guint gnc_split_reg2_signals[LAST_SIGNAL] = { 0 };
141 gnc_split_reg2_class_init (GNCSplitReg2Class *klass)
143 GObjectClass *object_class;
145 object_class = (GObjectClass*) klass;
147 gnc_split_reg2_signals[HELP_CHANGED] =
148 g_signal_new(
"help-changed",
149 G_TYPE_FROM_CLASS (object_class),
151 G_STRUCT_OFFSET (GNCSplitReg2Class, help_changed),
153 g_cclosure_marshal_VOID__VOID,
157 klass->help_changed = NULL;
167 GNCSplitReg2 *gsrToRet;
169 ENTER(
"ld=%p, parent=%p, numberOfLines=%d, read_only=%s",
170 ld, parent, numberOfLines, read_only ?
"TRUE" :
"FALSE");
174 gsrToRet->numRows = numberOfLines;
175 gsrToRet->read_only = read_only;
177 gsrToRet->ledger = ld;
178 gsrToRet->window = GTK_WIDGET (parent);
180 gnc_split_reg2_init2 (gsrToRet);
182 LEAVE(
"%p", gsrToRet);
183 return GTK_WIDGET (gsrToRet);
187 gnc_split_reg2_init (GNCSplitReg2 *gsr)
189 gtk_orientable_set_orientation (GTK_ORIENTABLE(gsr), GTK_ORIENTATION_VERTICAL);
192 gsr->read_only = FALSE;
194 g_signal_connect (gsr,
"destroy",
195 G_CALLBACK (gnc_split_reg2_destroy_cb), gsr );
199 gnc_split_reg2_init2 (GNCSplitReg2 *gsr)
203 gnc_split_reg2_determine_read_only (gsr, TRUE);
205 gnc_split_reg2_determine_account_pr (gsr);
207 gsr2_setup_status_widgets (gsr);
210 gsr2_create_table (gsr);
211 gsr2_setup_table (gsr);
217 gsr2_setup_table (GNCSplitReg2 *gsr)
221 ENTER(
"gsr=%p", gsr);
231 gsr2_create_table (GNCSplitReg2 *gsr)
235 GtkTreeModel *s_model;
236 GtkWidget *scrolled_window;
237 GtkTreeViewColumn *col;
238 GNCLedgerDisplay2Type ledger_type;
240 gdouble num_of_trans;
242 gchar *state_section;
250 ENTER(
"create table gsr=%p", gsr);
254 gnc_split_reg2_ld_destroy,
255 gnc_split_reg2_get_parent);
258 view = gnc_tree_view_split_reg_new_with_model (model);
259 g_object_unref (G_OBJECT (model));
262 ledger_type = gnc_ledger_display2_type (gsr->ledger);
263 if (ledger_type == LD2_GL && model->
type == GENERAL_JOURNAL2)
264 state_section = g_strdup (STATE_SECTION_GEN_JOURNAL);
265 else if (ledger_type == LD2_SUBACCOUNT)
269 state_section = g_strconcat (STATE_SECTION_REG_PREFIX,
" ", guidstr,
" w/subaccounts", NULL);
275 state_section = g_strconcat (STATE_SECTION_REG_PREFIX,
" ", guidstr, NULL);
277 g_object_set (G_OBJECT (view),
"state-section", state_section,
278 "show-column-menu", FALSE, NULL);
281 hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
282 gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE);
283 gtk_widget_show (hbox);
285 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
286 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
287 GTK_POLICY_AUTOMATIC,
288 GTK_POLICY_AUTOMATIC);
290 gtk_widget_show (scrolled_window);
292 gtk_box_pack_start (GTK_BOX (gsr), hbox, TRUE, TRUE, 0);
298 gsr->scroll_bar = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, GTK_ADJUSTMENT (gsr->scroll_adj));
299 gtk_widget_show (gsr->scroll_bar);
301 gtk_box_pack_start (GTK_BOX (hbox), gsr->scroll_bar, FALSE, FALSE, 2);
302 gtk_box_pack_start (GTK_BOX (hbox), scrolled_window, TRUE, TRUE, 0);
310 model->
sort_depth = g_key_file_get_integer (state_file, state_section,
"sort_depth", NULL);
311 g_free(state_section);
313 s_model = gtk_tree_view_get_model(GTK_TREE_VIEW(view));
319 if (gtk_tree_sortable_get_sort_column_id (GTK_TREE_SORTABLE (s_model), &sort_col, &type))
328 if (ledger_type == LD2_GL && model->
type == GENERAL_JOURNAL2)
339 g_object_set (G_OBJECT(col),
341 "sizing", GTK_TREE_VIEW_COLUMN_FIXED,
345 gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (view), TRUE);
346 gtk_widget_show (GTK_WIDGET (view));
348 gtk_container_add (GTK_CONTAINER (scrolled_window), GTK_WIDGET (view));
349 gtk_widget_show (GTK_WIDGET (gsr));
352 gnc_tree_view_split_reg_set_read_only (view, gsr->read_only);
355 gnc_ledger_display2_set_split_view_refresh (gsr->ledger, TRUE);
358 g_signal_connect_after (model,
"refresh_status_bar",
359 G_CALLBACK (gsr2_redraw_all_cb), gsr);
362 g_signal_connect (model,
"scroll_sync",
363 G_CALLBACK (gsr2_scroll_sync_cb), gsr);
366 g_signal_connect (view,
"help_signal",
367 G_CALLBACK (gsr2_emit_help_changed), gsr);
369 gsr2_scroll_value_changed_cb (GTK_ADJUSTMENT (gsr->scroll_adj), gsr);
372 g_signal_connect (gsr->scroll_adj,
"value-changed",
373 G_CALLBACK (gsr2_scroll_value_changed_cb), gsr);
376 g_signal_connect (gsr->scroll_bar,
"button-release-event",
377 G_CALLBACK (gsr2_scroll_button_event_cb), gsr);
380 g_signal_connect (GTK_TREE_SORTABLE (s_model),
"sort-column-changed",
381 G_CALLBACK (gnc_split_reg2_sort_changed_cb), gsr);
388 gsr2_setup_status_widgets (GNCSplitReg2 *gsr)
391 gboolean use_double_line;
401 gnc_split_reg2_destroy_cb (GtkWidget *widget, gpointer data)
419 view = gnc_ledger_display2_get_split_view_register (gsr->ledger);
421 gnc_tree_control_split_reg_jump_to (view, NULL, split, FALSE);
439 view = gnc_ledger_display2_get_split_view_register (gsr->ledger);
441 gnc_tree_control_split_reg_jump_to (view, NULL, split, TRUE);
453 if (gsr->window == NULL)
456 gtk_window_present (GTK_WINDOW (gsr->window));
466 gsr2_update_summary_label (GtkWidget *label,
467 xaccGetBalanceFn getter,
470 gnc_commodity *cmdty,
480 amount = (*getter)( leader );
491 strcat(
string,
" / " );
493 gnc_convert_to_euro( cmdty, amount ),
494 gnc_commodity_print_info( gnc_get_euro(), TRUE ) );
497 gnc_set_label_color( label, amount );
498 gtk_label_set_text( GTK_LABEL(label),
string );
505 GNCSplitReg2 *gsr = user_data;
506 gnc_commodity * commodity;
508 gnc_numeric amount = gnc_numeric_zero();
513 if ( gsr->summarybar == NULL )
521 if (commodity != NULL)
522 euro = (gnc_is_euro_currency( commodity ) &&
527 print_info = gnc_account_print_info( leader, TRUE );
528 reverse = gnc_reverse_balance( leader );
530 gsr2_update_summary_label( gsr->balance_label,
531 xaccAccountGetPresentBalance,
532 leader, print_info, commodity, reverse, euro );
533 gsr2_update_summary_label( gsr->cleared_label,
535 leader, print_info, commodity, reverse, euro );
536 gsr2_update_summary_label( gsr->reconciled_label,
538 leader, print_info, commodity, reverse, euro );
539 gsr2_update_summary_label( gsr->future_label,
541 leader, print_info, commodity, reverse, euro );
542 gsr2_update_summary_label( gsr->projectedminimum_label,
543 xaccAccountGetProjectedMinimumBalance,
544 leader, print_info, commodity, reverse, euro );
547 if (gsr->shares_label != NULL)
550 print_info = gnc_account_print_info( leader, TRUE );
555 gnc_set_label_color( gsr->shares_label, amount );
556 gtk_label_set_text( GTK_LABEL(gsr->shares_label),
string );
560 if (gsr->value_label != NULL)
564 print_info = gnc_commodity_print_info (currency, TRUE);
566 gnc_set_label_color (gsr->value_label, amount);
567 gtk_label_set_text (GTK_LABEL (gsr->value_label),
string);
574 gnc_split_reg2_ld_destroy (GNCLedgerDisplay2 *ledger)
583 gnc_split_reg2_balancing_entry (GNCSplitReg2 *gsr,
Account *account,
584 time64 statement_date, gnc_numeric balancing_amount)
587 Transaction *transaction;
590 view = gnc_ledger_display2_get_split_view_register (gsr->ledger);
593 transaction = gsr2_create_balancing_transaction (gnc_get_current_book(),
594 account, statement_date, balancing_amount);
597 split = xaccTransFindSplitByAccount (transaction, account);
601 g_warning(
"gsr2_create_balancing_transaction failed");
602 gnc_tree_control_split_reg_jump_to_blank (view);
607 gnc_tree_control_split_reg_jump_to (view, NULL, split, FALSE);
612 gsr2_create_balancing_transaction (QofBook *book,
Account *account,
613 time64 statement_date, gnc_numeric balancing_amount)
657 gnc_split_reg2_sort_changed_cb (GtkTreeSortable *sortable, gpointer user_data)
659 GNCSplitReg2 *gsr = user_data;
665 const gchar *state_section;
668 gtk_tree_sortable_get_sort_column_id (sortable, &sortcol, &type);
669 ENTER(
"sortcol is %d", sortcol);
671 view = gnc_ledger_display2_get_split_view_register (gsr->ledger);
674 sort_depth = gnc_tree_view_reg_get_selected_row_depth (view);
683 g_key_file_set_integer (state_file, state_section,
"sort_depth", model->
sort_depth);
697 if (style == model->
style)
703 gnc_tree_view_split_reg_set_format (gnc_ledger_display2_get_split_view_register (gsr->ledger));
707 gnc_split_reg2_style_ledger_cb (GtkWidget *w, gpointer data)
709 GNCSplitReg2 *gsr = data;
711 if (!gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (w)))
718 gnc_split_reg2_style_auto_ledger_cb (GtkWidget *w, gpointer data)
720 GNCSplitReg2 *gsr = data;
722 if (!gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (w)))
729 gnc_split_reg2_style_journal_cb (GtkWidget *w, gpointer data)
731 GNCSplitReg2 *gsr = data;
733 if (!gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (w)))
740 gnc_split_reg2_double_line_cb (GtkWidget *w, gpointer data)
742 GNCSplitReg2 *gsr = data;
744 gboolean use_double_line;
746 use_double_line = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (w));
753 gnc_tree_view_split_reg_set_format (gnc_ledger_display2_get_split_view_register (gsr->ledger));
758 add_summary_label (GtkWidget *summarybar,
const char *label_str)
763 hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
764 gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE);
765 gtk_box_pack_start (GTK_BOX (summarybar), hbox, FALSE, FALSE, 5);
767 label = gtk_label_new (label_str);
768 gnc_label_set_alignment (label, 1.0, 0.5);
769 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
771 label = gtk_label_new (
"");
772 gnc_label_set_alignment (label, 1.0, 0.5);
773 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
781 GtkWidget *summarybar;
783 gsr->cleared_label = NULL;
784 gsr->balance_label = NULL;
785 gsr->reconciled_label = NULL;
786 gsr->future_label = NULL;
787 gsr->projectedminimum_label = NULL;
788 gsr->shares_label = NULL;
789 gsr->value_label = NULL;
791 if (gnc_ledger_display2_type (gsr->ledger) >= LD2_SUBACCOUNT)
793 gsr->summarybar = NULL;
797 summarybar = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4);
798 gtk_box_set_homogeneous (GTK_BOX (summarybar), FALSE);
802 gsr->balance_label = add_summary_label (summarybar, _(
"Present:"));
803 gsr->future_label = add_summary_label (summarybar, _(
"Future:"));
804 gsr->cleared_label = add_summary_label (summarybar, _(
"Cleared:"));
805 gsr->reconciled_label = add_summary_label (summarybar, _(
"Reconciled:"));
806 gsr->projectedminimum_label = add_summary_label (summarybar, _(
"Projected Minimum:"));
810 gsr->shares_label = add_summary_label (summarybar, _(
"Shares:"));
811 gsr->value_label = add_summary_label (summarybar, _(
"Current Value:"));
814 gsr->summarybar = summarybar;
817 gsr2_redraw_all_cb (NULL, gsr);
818 return gsr->summarybar;
829 gnc_split_reg2_get_placeholder (GNCSplitReg2 *gsr)
833 gboolean single_account;
836 return PLACEHOLDER_NONE;
842 case GENERAL_JOURNAL2:
844 case PORTFOLIO_LEDGER2:
846 single_account = FALSE;
849 single_account = TRUE;
856 return PLACEHOLDER_NONE;
860 return PLACEHOLDER_THIS;
861 return PLACEHOLDER_NONE;
881 gsr2_determine_account_pr_dialog (gpointer argp)
886 const char *title = _(
"Account Payable / Receivable Register");
887 const char *message =
888 _(
"The register displayed is for Account Payable or Account Receivable. " 889 "Changing the entries may cause harm, please use the business " 890 "options to change the entries.");
892 dialog = gtk_message_dialog_new (GTK_WINDOW (args->gsr->window),
893 GTK_DIALOG_DESTROY_WITH_PARENT,
897 gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
900 gnc_dialog_run (GTK_DIALOG (dialog), GNC_PREF_WARN_REG_IS_ACCT_PAY_REC);
901 gtk_widget_destroy (dialog);
909 gnc_split_reg2_determine_account_pr (GNCSplitReg2 *gsr)
916 if (model->
type != PAYABLE_REGISTER2 && model->
type != RECEIVABLE_REGISTER2)
923 g_timeout_add (250, gsr2_determine_account_pr_dialog, args);
934 gtk_callback_bug_workaround (gpointer argp)
937 const gchar *read_only_this = _(
"This account register is read-only.");
938 const gchar *read_only_acc = _(
"The '%s' account register is read-only.");
939 gchar *read_only = NULL;
941 GNCLedgerDisplay2Type ledger_type = gnc_ledger_display2_type (args->gsr->ledger);
943 const gchar *acc_name = NULL;
950 if (ledger_type == LD2_SINGLE)
951 read_only = g_strdup_printf (read_only_acc, acc_name);
954 gchar *tmp = g_strconcat (acc_name,
"+", NULL);
955 read_only = g_strdup_printf (read_only_acc, tmp);
960 read_only = g_strdup (read_only_this);
962 dialog = gtk_message_dialog_new (GTK_WINDOW(args->gsr->window),
963 GTK_DIALOG_DESTROY_WITH_PARENT,
967 gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
969 gnc_dialog_run (GTK_DIALOG (dialog), GNC_PREF_WARN_REG_IS_READ_ONLY);
970 gtk_widget_destroy (dialog);
981 gnc_split_reg2_determine_read_only (GNCSplitReg2 *gsr, gboolean show_dialog)
988 gsr->read_only = TRUE;
995 switch (gnc_split_reg2_get_placeholder (gsr))
997 case PLACEHOLDER_NONE:
1002 case PLACEHOLDER_THIS:
1003 args->string = _(
"This account may not be edited. If you want " 1004 "to edit transactions in this register, please " 1005 "open the account options and turn off the " 1006 "placeholder checkbox.");
1010 args->string = _(
"One of the sub-accounts selected may not be " 1011 "edited. If you want to edit transactions in " 1012 "this register, please open the sub-account " 1013 "options and turn off the placeholder checkbox. " 1014 "You may also open an individual account instead " 1015 "of a set of accounts.");
1018 gsr->read_only = TRUE;
1022 g_timeout_add (250, gtk_callback_bug_workaround, args);
1028 gnc_split_reg2_get_parent (GNCLedgerDisplay2 *ledger)
1031 GNC_SPLIT_REG2 (gnc_ledger_display2_get_user_data (ledger));
1042 gsr2_emit_simple_signal ((GNCSplitReg2*)user_data,
"help-changed" );
1049 GNCSplitReg2 *gsr = user_data;
1050 gint trans_position;
1054 gtk_adjustment_set_value (gsr->scroll_adj, trans_position);
1060 gsr2_scroll_value_changed_cb (GtkAdjustment *adj, gpointer user_data)
1062 GNCSplitReg2 *gsr = user_data;
1065 gint trans_position;
1069 trans_position = gtk_adjustment_get_value (adj);
1071 text = gnc_tree_model_split_reg_get_tooltip (model, trans_position);
1073 g_object_set (gtk_widget_get_settings (gsr->scroll_bar),
"gtk-tooltip-timeout", 2, NULL);
1075 gtk_widget_set_tooltip_text (gsr->scroll_bar, text);
1082 gsr2_scroll_button_event_cb (GtkWidget *widget, GdkEventButton *event, gpointer user_data)
1084 GNCSplitReg2 *gsr = user_data;
1086 gint trans_position;
1090 trans_position = gtk_adjustment_get_value (gsr->scroll_adj);
1092 gnc_tree_model_split_reg_set_current_trans_by_position (model, trans_position);
1095 g_object_set (gtk_widget_get_settings (gsr->scroll_bar),
"gtk-tooltip-timeout", 500, NULL);
1097 g_signal_emit_by_name (model,
"refresh_trans");
1104 gsr2_emit_simple_signal (GNCSplitReg2 *gsr,
const char *sigName)
1106 g_signal_emit_by_name( gsr, sigName, NULL );
1115 return gnc_ledger_display2_get_split_view_register (gsr->ledger);
1121 if (!gsr)
return NULL;
1122 return gsr->summarybar;
1131 gsr->read_only = FALSE;
1132 gnc_split_reg2_determine_read_only (gsr, FALSE);
1133 return gsr->read_only;
1137 gnc_split_reg2_set_moved_cb (GNCSplitReg2 *gsr, GFunc cb, gpointer cb_data )
1139 gnc_tree_view_split_reg_set_uiupdate_cb (gnc_ledger_display2_get_split_view_register (gsr->ledger), cb, cb_data);
void xaccSplitSetValue(Split *split, gnc_numeric val)
The xaccSplitSetValue() method sets the value of this split in the transaction's commodity.
void gnc_tree_model_split_reg_config(GncTreeModelSplitReg *model, SplitRegisterType2 newtype, SplitRegisterStyle2 newstyle, gboolean use_double_line)
Set style and type for register.
gint number_of_trans_in_full_tlist
The total number of transactions in full_tlist.
gint position_of_trans_in_full_tlist
The position of current transaction in full_tlist.
Functions to load, save and get gui state.
void gnc_tree_view_expand_columns(GncTreeView *view, gchar *first_column_name,...)
This function set the columns that will be allocated the free space in the view.
#define xaccTransAppendSplit(t, s)
Add a split to the transaction.
Transaction * xaccMallocTransaction(QofBook *book)
The xaccMallocTransaction() will malloc memory and initialize it.
void xaccTransSetDatePostedSecsNormalized(Transaction *trans, time64 time)
This function sets the posted date of the transaction, specified by a time64 (see ctime(3))...
gboolean use_double_line
FIXME ? As above, whether to use two lines per transaction.
gboolean gnc_split_reg2_get_read_only(GNCSplitReg2 *gsr)
Callers can use this to determine if they need to reflect some "read-only" status in the window which...
const char * gnc_commodity_get_mnemonic(const gnc_commodity *cm)
Retrieve the mnemonic for the specified commodity.
void gnc_ledger_display2_set_user_data(GNCLedgerDisplay2 *ld, gpointer user_data)
get and set the user data associated with the ledger
gboolean xaccAccountIsPriced(const Account *acc)
Returns true if the account is a stock, mutual fund or currency, otherwise false. ...
void gnc_ledger_display2_refresh(GNCLedgerDisplay2 *ld)
redisplay/redraw only the indicated window.
gnc_numeric gnc_numeric_neg(gnc_numeric a)
Returns a newly created gnc_numeric that is the negative of the given gnc_numeric value...
gint sort_col
This is the column the sort direction is based on.
void gnc_ledger_display2_set_split_view_register(GNCLedgerDisplay2 *ledger_display, GncTreeViewSplitReg *view)
Set and Get the tree view used by the ledger display.
gboolean gnc_ledger_display2_default_double_line(GNCLedgerDisplay2 *gld)
Returns a boolean of whether this display should be single or double lined mode by default...
GtkWidget * gnc_split_reg2_new(GNCLedgerDisplay2 *ld, GtkWindow *parent, gint numberOfLines, gboolean read_only)
Creates and returns a GNCSplitReg.
void xaccTransSetDescription(Transaction *trans, const char *desc)
Sets the transaction Description.
GncTreeViewSplitReg * gnc_split_reg2_get_register(GNCSplitReg2 *gsr)
Returns the GncTreeView Split Register in effect for this GNCSplitReg.
SplitRegisterType2 type
FIXME ? This may be the wrong place for these, may be the view ?
GtkWidget * gnc_split_reg2_get_summarybar(GNCSplitReg2 *gsr)
Can return NULL if the indicated subwidget was not created.
GtkSortType sort_direction
This is the direction of sort.
gboolean gnc_numeric_zero_p(gnc_numeric a)
Returns 1 if the given gnc_numeric is 0 (zero), else returns 0.
void gnc_tree_view_set_show_column_menu(GncTreeView *view, gboolean visible)
This function is called to set the "show-column-menu" property on this view.
gchar * guid_to_string_buff(const GncGUID *guid, gchar *str)
The guid_to_string_buff() routine puts a null-terminated string encoding of the id into the memory po...
GType gnc_split_reg2_get_type(void)
GTK-related; gets an identifier for the class of GNCSplitRegs.
GtkTreeViewColumn * gnc_tree_view_find_column_by_name(GncTreeView *view, const gchar *wanted)
Find a tree column given the "pref name" used with saved state.
#define ENTER(format, args...)
Print a function entry debugging message.
GKeyFile * gnc_state_get_current(void)
Returns a pointer to the most recently loaded state.
gnc_numeric xaccAccountGetClearedBalance(const Account *acc)
Get the current balance of the account, only including cleared transactions.
void xaccTransSetCurrency(Transaction *trans, gnc_commodity *curr)
Set a new currency on a transaction.
gnc_commodity * gnc_default_currency(void)
Return the default currency set by the user.
#define xaccAccountGetGUID(X)
void xaccSplitSetAmount(Split *split, gnc_numeric amt)
The xaccSplitSetAmount() method sets the amount in the account's commodity that the split should have...
void gnc_split_reg2_raise(GNCSplitReg2 *gsr)
Raise an existing register window to the front.
Account * gnc_ledger_display2_leader(GNCLedgerDisplay2 *ld)
Implementations.
#define GUID_ENCODING_LENGTH
Number of characters needed to encode a guid as a string not including the null terminator.
GNCPlaceholderType xaccAccountGetDescendantPlaceholder(const Account *acc)
Returns PLACEHOLDER_NONE if account is NULL or neither account nor any descendant of account is a pla...
void gnc_tree_view_configure_columns(GncTreeView *view)
Make all the correct columns visible, respecting their default visibility setting, their "always" visibility setting, and the last saved state if available.
SplitRegisterStyle2 style
FIXME ? This may be the wrong place for these, may be the view ?
gint sort_depth
This is the row the sort direction is based on.
GncTreeModelSplitReg * gnc_ledger_display2_get_split_model_register(GNCLedgerDisplay2 *ld)
return the split register associated with a ledger display
void xaccTransCommitEdit(Transaction *trans)
The xaccTransCommitEdit() method indicates that the changes to the transaction and its splits are com...
void xaccTransBeginEdit(Transaction *trans)
The xaccTransBeginEdit() method must be called before any changes are made to a transaction or any of...
gnc_numeric xaccAccountGetReconciledBalance(const Account *acc)
Get the current balance of the account, only including reconciled transactions.
gnc_numeric xaccAccountGetBalance(const Account *acc)
Get the current balance of the account, which may include future splits.
int xaccSPrintAmount(char *bufp, gnc_numeric val, GNCPrintAmountInfo info)
Make a string representation of a gnc_numeric.
Split * xaccMallocSplit(QofBook *book)
Constructor.
SplitRegisterStyle2
Register styles.
const gchar * gnc_tree_view_get_state_section(GncTreeView *view)
Get the name of the state section this tree view is associated with.
GNCPlaceholderType
DOCUMENT ME!
gnc_commodity * gnc_account_or_default_currency(const Account *account, gboolean *currency_from_account_found)
Returns a gnc_commodity that is a currency, suitable for being a Transaction's currency.
gboolean qof_book_is_readonly(const QofBook *book)
Return whether the book is read only.
void gnc_split_reg2_jump_to_split_amount(GNCSplitReg2 *gsr, Split *split)
Move the cursor to the split in the non-blank amount column.
void gnc_ledger_display2_set_handlers(GNCLedgerDisplay2 *ld, GNCLedgerDisplay2Destroy destroy, GNCLedgerDisplay2GetParent get_parent)
set the handlers used by the ledger display
void xaccAccountBeginEdit(Account *acc)
The xaccAccountBeginEdit() subroutine is the first phase of a two-phase-commit wrapper for account up...
gnc_commodity * xaccAccountGetCommodity(const Account *acc)
Get the account's commodity.
void gnc_split_reg2_change_style(GNCSplitReg2 *gsr, SplitRegisterStyle2 style)
Gets/sets the style of the GNCSplitReg.
#define xaccAccountInsertSplit(acc, s)
The xaccAccountInsertSplit() method will insert the indicated split into the indicated account...
gboolean xaccAccountGetPlaceholder(const Account *acc)
Get the "placeholder" flag for an account.
GtkWidget * gnc_split_reg2_create_summary_bar(GNCSplitReg2 *gsr)
Create and returns a summarybar for this GNCSplitReg.
#define LEAVE(format, args...)
Print a function exit debugging message.
The instance data structure for an account tree model.
gint64 time64
Many systems, including Microsoft Windows and BSD-derived Unixes like Darwin, are retaining the int-3...
Public declarations for GncLedgerDisplay2 class.
const char * xaccAccountGetName(const Account *acc)
Get the account's name.
The type used to store guids in C.
void xaccAccountCommitEdit(Account *acc)
ThexaccAccountCommitEdit() subroutine is the second phase of a two-phase-commit wrapper for account u...
void gnc_split_reg2_jump_to_split(GNCSplitReg2 *gsr, Split *split)
Jump to split.