28 #include <glib/gi18n.h> 39 #include "gnc-component-manager.h" 44 #include "gnc-hooks.h" 45 #include "gnc-session.h" 46 #include "gnc-icons.h" 47 #include "gnc-ui-balances.h" 48 #include "dialog-utils.h" 49 #include "window-main-summarybar.h" 51 #define SAMPLE_ACCOUNT_VALUE "$1,000,000.00" 52 #define GNC_PREF_ACCOUNT_COLOR "show-account-color" 57 static QofLogModule log_module = GNC_MOD_GUI;
62 static void gnc_tree_view_account_finalize (GObject *
object);
63 static gboolean gnc_tree_view_search_compare (GtkTreeModel *model, gint column,
64 const gchar *key, GtkTreeIter *iter, gpointer search_data);
66 static void gtva_update_column_names (
GncTreeView *view);
67 static void gtva_currency_changed_cb (
void);
69 static gboolean gnc_tree_view_account_filter_helper (GtkTreeModel *model,
74 GtkTreeViewColumn *column,
75 GtkCellRenderer *renderer,
76 GncTreeViewAccountColumnTextEdited col_edited_cb);
78 static void tax_info_data_func (GtkTreeViewColumn *col,
79 GtkCellRenderer *renderer,
84 static void acc_color_data_func (GtkTreeViewColumn *col,
85 GtkCellRenderer *renderer,
90 static void gnc_tree_view_account_color_update (gpointer gsettings,
91 gchar *key, gpointer user_data);
100 GSourceFunc filter_destroy;
102 GtkTreeViewColumn *name_column;
103 GtkTreeViewColumn *code_column;
104 GtkTreeViewColumn *desc_column;
105 GtkTreeViewColumn *present_report_column;
106 GtkTreeViewColumn *balance_report_column;
107 GtkTreeViewColumn *cleared_report_column;
108 GtkTreeViewColumn *reconciled_report_column;
109 GtkTreeViewColumn *future_min_report_column;
110 GtkTreeViewColumn *total_report_column;
111 GtkTreeViewColumn *notes_column;
113 gboolean show_account_color;
117 #define GNC_TREE_VIEW_ACCOUNT_GET_PRIVATE(o) \ 118 ((GncTreeViewAccountPrivate*)gnc_tree_view_account_get_instance_private((GncTreeViewAccount*)o)) 125 static GObjectClass *parent_class = NULL;
127 G_DEFINE_TYPE_WITH_PRIVATE(
GncTreeViewAccount, gnc_tree_view_account, GNC_TYPE_TREE_VIEW)
132 GObjectClass *o_class;
134 parent_class = g_type_class_peek_parent (klass);
137 o_class = G_OBJECT_CLASS (klass);
138 o_class->finalize = gnc_tree_view_account_finalize;
140 gnc_hook_add_dangler(HOOK_CURRENCY_CHANGED,
141 (GFunc)gtva_currency_changed_cb, NULL, NULL);
152 gnc_init_account_view_info(AccountViewInfo *avi)
157 avi->include_type[i] = TRUE;
158 avi->show_hidden = FALSE;
166 priv = GNC_TREE_VIEW_ACCOUNT_GET_PRIVATE(view);
169 GNC_PREF_ACCOUNT_COLOR,
170 gnc_tree_view_account_color_update,
173 gnc_init_account_view_info(&priv->avi);
177 gnc_tree_view_account_finalize (GObject *
object)
182 ENTER(
"view %p",
object);
183 g_return_if_fail (
object != NULL);
184 g_return_if_fail (GNC_IS_TREE_VIEW_ACCOUNT (
object));
186 account_view = GNC_TREE_VIEW_ACCOUNT (
object);
188 priv = GNC_TREE_VIEW_ACCOUNT_GET_PRIVATE(account_view);
191 GNC_PREF_ACCOUNT_COLOR,
192 gnc_tree_view_account_color_update,
194 if (priv->filter_destroy)
196 priv->filter_destroy(priv->filter_data);
197 priv->filter_destroy = NULL;
199 priv->filter_fn = NULL;
201 if (G_OBJECT_CLASS (parent_class)->finalize)
202 (* G_OBJECT_CLASS (parent_class)->finalize) (
object);
211 gnc_tree_view_account_hidden_toggled (GtkCellRendererToggle *cell,
212 const gchar *s_path_str,
221 tree_view = user_data;
222 s_path = gtk_tree_path_new_from_string (s_path_str);
226 hidden = !gtk_cell_renderer_toggle_get_active (cell);
231 gtk_tree_path_free (s_path);
236 gnc_tree_view_account_placeholder_toggled (GtkCellRendererToggle *cell,
237 const gchar *s_path_str,
243 gboolean placeholder;
246 tree_view = user_data;
247 s_path = gtk_tree_path_new_from_string (s_path_str);
251 placeholder = !gtk_cell_renderer_toggle_get_active (cell);
256 gtk_tree_path_free (s_path);
264 static GtkTreeModel *
265 sort_cb_setup_w_iters (GtkTreeModel *f_model,
266 GtkTreeIter *f_iter_a,
267 GtkTreeIter *f_iter_b,
275 model = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(f_model));
276 gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER(f_model),
279 gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER(f_model),
288 sort_cb_setup (GtkTreeModel *f_model,
289 GtkTreeIter *f_iter_a,
290 GtkTreeIter *f_iter_b,
294 GtkTreeIter iter_a, iter_b;
296 sort_cb_setup_w_iters (f_model, f_iter_a, f_iter_b,
297 &iter_a, &iter_b, account_a, account_b);
301 sort_by_last_reconcile_date (GtkTreeModel *f_model,
302 GtkTreeIter *f_iter1,
303 GtkTreeIter *f_iter2,
306 const Account *account1, *account2;
307 time64 account1_date, account2_date;
309 sort_cb_setup (f_model, f_iter1, f_iter2, &account1, &account2);
317 if (account1_date < account2_date)
319 else if (account1_date > account2_date)
326 sort_by_string (GtkTreeModel *f_model,
327 GtkTreeIter *f_iter1,
328 GtkTreeIter *f_iter2,
332 GtkTreeIter iter1, iter2;
333 const Account *account1, *account2;
335 gint column = GPOINTER_TO_INT(user_data);
338 model = sort_cb_setup_w_iters(f_model, f_iter1, f_iter2, &iter1, &iter2, &account1, &account2);
341 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter1, column, &str1, -1);
342 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter2, column, &str2, -1);
353 sort_by_code (GtkTreeModel *f_model,
354 GtkTreeIter *f_iter_a,
355 GtkTreeIter *f_iter_b,
358 const Account *account_a, *account_b;
360 sort_cb_setup (f_model, f_iter_a, f_iter_b, &account_a, &account_b);
367 sort_by_xxx_value (xaccGetBalanceInCurrencyFn fn,
369 GtkTreeModel *f_model,
370 GtkTreeIter *f_iter_a,
371 GtkTreeIter *f_iter_b,
374 const Account *account_a, *account_b;
376 gnc_numeric balance_a, balance_b;
380 sort_cb_setup (f_model, f_iter_a, f_iter_b, &account_a, &account_b);
383 balance_a = gnc_ui_account_get_balance_full(fn, account_a, recurse, NULL, cur);
384 balance_b = gnc_ui_account_get_balance_full(fn, account_b, recurse, NULL, cur);
393 sort_by_present_value (GtkTreeModel *f_model,
394 GtkTreeIter *f_iter_a,
395 GtkTreeIter *f_iter_b,
398 return sort_by_xxx_value (xaccAccountGetPresentBalanceInCurrency, TRUE,
399 f_model, f_iter_a, f_iter_b, user_data);
403 sort_by_balance_value (GtkTreeModel *f_model,
404 GtkTreeIter *f_iter_a,
405 GtkTreeIter *f_iter_b,
408 return sort_by_xxx_value (xaccAccountGetBalanceInCurrency, TRUE,
409 f_model, f_iter_a, f_iter_b, user_data);
413 sort_by_cleared_value (GtkTreeModel *f_model,
414 GtkTreeIter *f_iter_a,
415 GtkTreeIter *f_iter_b,
418 return sort_by_xxx_value (xaccAccountGetClearedBalanceInCurrency, TRUE,
419 f_model, f_iter_a, f_iter_b, user_data);
423 sort_by_reconciled_value (GtkTreeModel *f_model,
424 GtkTreeIter *f_iter_a,
425 GtkTreeIter *f_iter_b,
428 return sort_by_xxx_value (xaccAccountGetReconciledBalanceInCurrency, TRUE,
429 f_model, f_iter_a, f_iter_b, user_data);
433 sort_by_future_min_value (GtkTreeModel *f_model,
434 GtkTreeIter *f_iter_a,
435 GtkTreeIter *f_iter_b,
438 return sort_by_xxx_value (xaccAccountGetProjectedMinimumBalanceInCurrency, TRUE,
439 f_model, f_iter_a, f_iter_b, user_data);
443 sort_by_total_value (GtkTreeModel *f_model,
444 GtkTreeIter *f_iter_a,
445 GtkTreeIter *f_iter_b,
448 return sort_by_xxx_value (xaccAccountGetBalanceInCurrency, TRUE,
449 f_model, f_iter_a, f_iter_b, user_data);
453 sort_by_hidden (GtkTreeModel *f_model,
454 GtkTreeIter *f_iter_a,
455 GtkTreeIter *f_iter_b,
458 const Account *account_a, *account_b;
459 gboolean flag_a, flag_b;
462 sort_cb_setup (f_model, f_iter_a, f_iter_b, &account_a, &account_b);
470 else if (flag_a < flag_b)
476 sort_by_placeholder (GtkTreeModel *f_model,
477 GtkTreeIter *f_iter_a,
478 GtkTreeIter *f_iter_b,
481 const Account *account_a, *account_b;
482 gboolean flag_a, flag_b;
485 sort_cb_setup (f_model, f_iter_a, f_iter_b, &account_a, &account_b);
493 else if (flag_a < flag_b)
499 sort_by_opening_balance (GtkTreeModel *f_model,
500 GtkTreeIter *f_iter_a,
501 GtkTreeIter *f_iter_b,
504 const Account *account_a, *account_b;
505 gboolean flag_a, flag_b;
508 sort_cb_setup (f_model, f_iter_a, f_iter_b, &account_a, &account_b);
516 else if (flag_a < flag_b)
522 sort_by_xxx_period_value (GtkTreeModel *f_model,
523 GtkTreeIter *f_iter_a,
524 GtkTreeIter *f_iter_b,
532 sort_cb_setup (f_model, f_iter_a, f_iter_b,
535 t1 = gnc_accounting_period_fiscal_start();
536 t2 = gnc_accounting_period_fiscal_end();
538 b1 = xaccAccountGetBalanceChangeForPeriod(acct1, t1, t2, recurse);
539 b2 = xaccAccountGetBalanceChangeForPeriod(acct2, t1, t2, recurse);
548 sort_by_balance_period_value (GtkTreeModel *f_model,
549 GtkTreeIter *f_iter_a,
550 GtkTreeIter *f_iter_b,
553 return sort_by_xxx_period_value (f_model, f_iter_a, f_iter_b, FALSE);
557 sort_by_total_period_value (GtkTreeModel *f_model,
558 GtkTreeIter *f_iter_a,
559 GtkTreeIter *f_iter_b,
562 return sort_by_xxx_period_value (f_model, f_iter_a, f_iter_b, TRUE);
578 tax_info_data_func (GtkTreeViewColumn *col,
579 GtkCellRenderer *renderer,
584 gchar *tax_info = NULL;
587 gtk_tree_model_get(model,
589 GNC_TREE_MODEL_ACCOUNT_COL_TAX_INFO,
593 path = gtk_tree_model_get_path(model, iter);
594 if (gtk_tree_view_row_expanded(GTK_TREE_VIEW(view), path))
595 g_object_set(renderer,
"text",
596 (tax_info == NULL ?
"" : tax_info), NULL);
599 gchar *tax_info_sub_acct = NULL;
601 gtk_tree_model_get(model,
603 GNC_TREE_MODEL_ACCOUNT_COL_TAX_INFO_SUB_ACCT,
606 if ((g_strcmp0 (tax_info_sub_acct,
"") == 0) ||
607 (tax_info_sub_acct == NULL))
608 g_object_set(renderer,
"text",
609 (tax_info == NULL ?
"" : tax_info), NULL);
612 if ((g_strcmp0 (tax_info,
"") == 0) ||
614 g_object_set(renderer,
"text",
615 (tax_info_sub_acct == NULL ?
"" : tax_info_sub_acct),
619 gchar *combined_tax_info;
620 combined_tax_info = g_strdup_printf (
"%s; %s",
621 (tax_info == NULL ?
"" : tax_info),
622 (tax_info_sub_acct == NULL ?
"" :
624 g_object_set(renderer,
"text", combined_tax_info, NULL);
625 g_free(combined_tax_info);
628 g_free(tax_info_sub_acct);
631 gtk_tree_path_free(path);
644 update_cell_renderers (GList *renderers, gchar *account_color)
646 GtkCellRenderer *cell;
650 for (node = renderers; node; node = node->next)
653 g_object_set (cell,
"cell-background", account_color, NULL);
665 acc_color_data_func (GtkTreeViewColumn *col,
666 GtkCellRenderer *renderer,
672 gchar *acc_color = NULL, *acc_cond_color = NULL;
678 gtk_tree_model_get(model,
680 GNC_TREE_MODEL_ACCOUNT_COL_COLOR_ACCOUNT,
685 if ((item) && (*item !=
'\0'))
686 acc_color = g_strstrip(g_strdup(item));
690 if (acc_color && (!gdk_rgba_parse(&color, acc_color)))
698 priv = GNC_TREE_VIEW_ACCOUNT_GET_PRIVATE(view);
699 if (priv->show_account_color)
700 acc_cond_color = acc_color;
702 column_name = g_object_get_data(G_OBJECT(col), PREF_NAME);
703 renderers = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (col));
706 if (g_strcmp0(column_name,
"account-color") == 0)
707 update_cell_renderers (renderers, acc_color);
709 update_cell_renderers (renderers, acc_cond_color);
711 g_list_free (renderers);
721 gnc_tree_view_account_color_update (gpointer gsettings, gchar *key, gpointer user_data)
726 g_return_if_fail(GNC_IS_TREE_VIEW_ACCOUNT(user_data));
728 priv = GNC_TREE_VIEW_ACCOUNT_GET_PRIVATE(view);
729 if (g_strcmp0 (key, GNC_PREF_ACCOUNT_COLOR) == 0)
744 gtk_tree_view_column_set_cell_data_func (col, renderer, acc_color_data_func,
745 GTK_TREE_VIEW(view), NULL);
762 GtkTreeModel *model, *f_model, *s_model;
763 GtkTreePath *virtual_root_path = NULL;
764 const gchar *sample_type, *sample_commodity;
766 GtkTreeViewColumn *tax_info_column, *acc_color_column;
767 GtkCellRenderer *renderer;
768 GList *col_list = NULL, *node = NULL;
772 view = g_object_new (GNC_TYPE_TREE_VIEW_ACCOUNT,
773 "name",
"gnc-id-account-tree", NULL);
775 priv = GNC_TREE_VIEW_ACCOUNT_GET_PRIVATE(GNC_TREE_VIEW_ACCOUNT (view));
778 priv->show_account_color =
gnc_prefs_get_bool(GNC_PREFS_GROUP_GENERAL, GNC_PREF_ACCOUNT_COLOR);
785 virtual_root_path = gtk_tree_path_new_first ();
786 f_model = gtk_tree_model_filter_new (model, virtual_root_path);
789 g_object_unref(G_OBJECT(model));
790 if (virtual_root_path)
791 gtk_tree_path_free(virtual_root_path);
794 s_model = gtk_tree_model_sort_new_with_model(f_model);
795 g_object_unref(G_OBJECT(f_model));
796 gtk_tree_view_set_model (GTK_TREE_VIEW (view), s_model);
797 g_object_unref(G_OBJECT(s_model));
800 gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(view), FALSE);
807 GNC_ICON_ACCOUNT,
"Expenses:Entertainment",
808 GNC_TREE_MODEL_ACCOUNT_COL_NAME,
809 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
813 GNC_TREE_MODEL_ACCOUNT_COL_TYPE,
814 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
819 GNC_TREE_MODEL_ACCOUNT_COL_COMMODITY,
820 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
825 GNC_TREE_MODEL_ACCOUNT_COL_CODE,
826 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
830 "Sample account description.",
831 GNC_TREE_MODEL_ACCOUNT_COL_DESCRIPTION,
832 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
836 GNC_TREE_MODEL_ACCOUNT_COL_LASTNUM,
837 GNC_TREE_VIEW_COLUMN_COLOR_NONE,
838 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
842 SAMPLE_ACCOUNT_VALUE,
843 GNC_TREE_MODEL_ACCOUNT_COL_PRESENT,
844 GNC_TREE_MODEL_ACCOUNT_COL_COLOR_PRESENT,
845 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
846 sort_by_present_value);
847 priv->present_report_column
849 SAMPLE_ACCOUNT_VALUE,
850 GNC_TREE_MODEL_ACCOUNT_COL_PRESENT_REPORT,
851 GNC_TREE_MODEL_ACCOUNT_COL_COLOR_PRESENT,
852 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
853 sort_by_present_value);
856 SAMPLE_ACCOUNT_VALUE,
857 GNC_TREE_MODEL_ACCOUNT_COL_BALANCE,
858 GNC_TREE_MODEL_ACCOUNT_COL_COLOR_BALANCE,
859 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
860 sort_by_balance_value);
861 priv->balance_report_column
863 SAMPLE_ACCOUNT_VALUE,
864 GNC_TREE_MODEL_ACCOUNT_COL_BALANCE_REPORT,
865 GNC_TREE_MODEL_ACCOUNT_COL_COLOR_BALANCE,
866 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
867 sort_by_balance_value);
870 SAMPLE_ACCOUNT_VALUE,
871 GNC_TREE_MODEL_ACCOUNT_COL_BALANCE_PERIOD,
872 GNC_TREE_MODEL_ACCOUNT_COL_COLOR_BALANCE_PERIOD,
873 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
874 sort_by_balance_period_value);
877 SAMPLE_ACCOUNT_VALUE,
878 GNC_TREE_MODEL_ACCOUNT_COL_CLEARED,
879 GNC_TREE_MODEL_ACCOUNT_COL_COLOR_CLEARED,
880 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
881 sort_by_cleared_value);
882 priv->cleared_report_column
884 SAMPLE_ACCOUNT_VALUE,
885 GNC_TREE_MODEL_ACCOUNT_COL_CLEARED_REPORT,
886 GNC_TREE_MODEL_ACCOUNT_COL_COLOR_CLEARED,
887 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
888 sort_by_cleared_value);
891 SAMPLE_ACCOUNT_VALUE,
892 GNC_TREE_MODEL_ACCOUNT_COL_RECONCILED,
893 GNC_TREE_MODEL_ACCOUNT_COL_COLOR_RECONCILED,
894 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
895 sort_by_reconciled_value);
896 priv->reconciled_report_column
898 SAMPLE_ACCOUNT_VALUE,
899 GNC_TREE_MODEL_ACCOUNT_COL_RECONCILED_REPORT,
900 GNC_TREE_MODEL_ACCOUNT_COL_COLOR_RECONCILED,
901 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
902 sort_by_reconciled_value);
905 "Last Reconcile Date",
906 GNC_TREE_MODEL_ACCOUNT_COL_RECONCILED_DATE,
907 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
908 sort_by_last_reconcile_date);
911 SAMPLE_ACCOUNT_VALUE,
912 GNC_TREE_MODEL_ACCOUNT_COL_FUTURE_MIN,
913 GNC_TREE_MODEL_ACCOUNT_COL_COLOR_FUTURE_MIN,
914 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
915 sort_by_future_min_value);
916 priv->future_min_report_column
918 SAMPLE_ACCOUNT_VALUE,
919 GNC_TREE_MODEL_ACCOUNT_COL_FUTURE_MIN_REPORT,
920 GNC_TREE_MODEL_ACCOUNT_COL_COLOR_FUTURE_MIN,
921 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
922 sort_by_future_min_value);
925 SAMPLE_ACCOUNT_VALUE,
926 GNC_TREE_MODEL_ACCOUNT_COL_TOTAL,
927 GNC_TREE_MODEL_ACCOUNT_COL_COLOR_TOTAL,
928 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
929 sort_by_total_value);
930 priv->total_report_column
932 SAMPLE_ACCOUNT_VALUE,
933 GNC_TREE_MODEL_ACCOUNT_COL_TOTAL_REPORT,
934 GNC_TREE_MODEL_ACCOUNT_COL_COLOR_TOTAL,
935 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
936 sort_by_total_value);
939 SAMPLE_ACCOUNT_VALUE,
940 GNC_TREE_MODEL_ACCOUNT_COL_TOTAL_PERIOD,
941 GNC_TREE_MODEL_ACCOUNT_COL_COLOR_TOTAL_PERIOD,
942 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
943 sort_by_total_period_value);
949 GNC_TREE_VIEW_COLUMN_DATA_NONE,
950 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
954 g_object_set_data_full(G_OBJECT(acc_color_column), REAL_TITLE,
955 g_strdup(_(
"Account Color")), g_free);
958 gtk_widget_set_tooltip_text (gtk_tree_view_column_get_button (acc_color_column), _(
"Account Color"));
962 "Sample account notes.",
963 GNC_TREE_MODEL_ACCOUNT_COL_NOTES,
964 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
970 GNC_TREE_MODEL_ACCOUNT_COL_TAX_INFO,
971 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
975 gtk_tree_view_column_set_cell_data_func(tax_info_column,
982 C_(
"Column header for 'Hidden'",
"H"),
984 GNC_TREE_MODEL_ACCOUNT_COL_HIDDEN,
985 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
987 gnc_tree_view_account_hidden_toggled);
990 C_(
"Column header for 'Placeholder'",
"P"),
992 GNC_TREE_MODEL_ACCOUNT_COL_PLACEHOLDER,
993 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
995 gnc_tree_view_account_placeholder_toggled);
998 C_(
"Column header for 'Opening Balance'",
"O"),
1000 GNC_TREE_MODEL_ACCOUNT_COL_OPENING_BALANCE,
1001 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
1002 sort_by_opening_balance,
1006 col_list = gtk_tree_view_get_columns(GTK_TREE_VIEW(view));
1007 for (node = col_list; node; node = node->next)
1010 gtk_tree_view_column_set_cell_data_func(node->data,
1012 acc_color_data_func,
1013 GTK_TREE_VIEW(view),
1016 g_list_free (col_list);
1019 gtva_update_column_names(view);
1023 gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (f_model),
1024 gnc_tree_view_account_filter_helper,
1029 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(s_model),
1030 GNC_TREE_MODEL_ACCOUNT_COL_NAME,
1031 GTK_SORT_ASCENDING);
1034 gtk_tree_view_set_search_equal_func (GTK_TREE_VIEW(view), gnc_tree_view_search_compare, NULL, NULL);
1036 gtk_widget_show(GTK_WIDGET(view));
1038 return GTK_TREE_VIEW(view);
1052 root = gnc_book_get_root_account (gnc_get_current_book ());
1060 #define debug_path(fn, path) { \ 1061 gchar *path_string = gtk_tree_path_to_string(path); \ 1062 fn("tree path %s", path_string); \ 1063 g_free(path_string); \ 1066 static GtkTreePath *
1070 GtkTreeModel *model, *f_model, *s_model;
1071 GtkTreePath *path, *f_path, *s_path;
1075 if (account == NULL)
1077 LEAVE(
"no account");
1082 s_model = gtk_tree_view_get_model(GTK_TREE_VIEW(view));
1083 f_model = gtk_tree_model_sort_get_model(GTK_TREE_MODEL_SORT(s_model));
1084 model = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(f_model));
1093 f_path = gtk_tree_model_filter_convert_child_path_to_path (GTK_TREE_MODEL_FILTER (f_model), path);
1094 gtk_tree_path_free(path);
1097 LEAVE(
"no filter path");
1102 s_path = gtk_tree_model_sort_convert_child_path_to_path (GTK_TREE_MODEL_SORT (s_model), f_path);
1103 gtk_tree_path_free(f_path);
1104 debug_path(
LEAVE, s_path);
1111 GtkTreeIter *s_iter)
1113 GtkTreeModel *model, *f_model, *s_model;
1114 GtkTreeIter iter, f_iter;
1116 g_return_val_if_fail(GNC_IS_TREE_VIEW_ACCOUNT(view), FALSE);
1117 g_return_val_if_fail(account != NULL, FALSE);
1118 g_return_val_if_fail(s_iter != NULL, FALSE);
1123 s_model = gtk_tree_view_get_model(GTK_TREE_VIEW(view));
1124 f_model = gtk_tree_model_sort_get_model(GTK_TREE_MODEL_SORT(s_model));
1125 model = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(f_model));
1127 GNC_TREE_MODEL_ACCOUNT(model), account, &iter))
1129 LEAVE(
"model_get_iter_from_account failed");
1134 gtk_tree_model_filter_convert_child_iter_to_iter (
1135 GTK_TREE_MODEL_FILTER(f_model), &f_iter, &iter);
1136 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT(s_model),
1146 GtkTreeModel *s_model;
1152 if (account == NULL)
1154 LEAVE(
"no account");
1158 if (!gnc_tree_view_account_get_iter_from_account (view, account, &s_iter))
1160 LEAVE(
"view_get_iter_from_account failed");
1165 s_model = gtk_tree_view_get_model(GTK_TREE_VIEW(view));
1166 num_children = gtk_tree_model_iter_n_children(s_model, &s_iter);
1167 LEAVE(
"%d children", num_children);
1168 return num_children;
1174 GtkTreeModel *model, *f_model, *s_model;
1176 s_model = gtk_tree_view_get_model (GTK_TREE_VIEW(view));
1177 f_model = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT(s_model));
1178 model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER(f_model));
1193 AccountViewInfo *avi)
1197 g_return_if_fail(GNC_IS_TREE_VIEW_ACCOUNT(account_view));
1198 g_return_if_fail(avi != NULL);
1200 priv = GNC_TREE_VIEW_ACCOUNT_GET_PRIVATE(account_view);
1221 AccountViewInfo *avi)
1227 ENTER(
"%p", account_view);
1228 g_return_if_fail(GNC_IS_TREE_VIEW_ACCOUNT(account_view));
1229 g_return_if_fail(avi != NULL);
1231 priv = GNC_TREE_VIEW_ACCOUNT_GET_PRIVATE(account_view);
1236 sel_bits |= avi->include_type[i] ? (1 << i) : 0;
1240 account_view, gnc_tree_view_account_filter_by_view_info,
1247 gnc_tree_view_account_filter_helper (GtkTreeModel *model,
1255 g_return_val_if_fail (GNC_IS_TREE_MODEL_ACCOUNT (model), FALSE);
1256 g_return_val_if_fail (iter != NULL, FALSE);
1259 GNC_TREE_MODEL_ACCOUNT(model), iter);
1261 priv = GNC_TREE_VIEW_ACCOUNT_GET_PRIVATE(view);
1262 if (priv->filter_fn)
1263 return priv->filter_fn(account, priv->filter_data);
1278 GSourceFunc destroy)
1282 ENTER(
"view %p, filter func %p, data %p, destroy %p",
1283 view, func, data, destroy);
1285 g_return_if_fail(GNC_IS_TREE_VIEW_ACCOUNT(view));
1287 priv = GNC_TREE_VIEW_ACCOUNT_GET_PRIVATE(view);
1288 if (priv->filter_destroy)
1290 priv->filter_destroy(priv->filter_data);
1292 priv->filter_destroy = destroy;
1293 priv->filter_data = data;
1294 priv->filter_fn = func;
1306 GtkTreeModel *f_model, *s_model;
1308 g_return_if_fail(GNC_IS_TREE_VIEW_ACCOUNT(view));
1310 s_model = gtk_tree_view_get_model(GTK_TREE_VIEW(view));
1311 f_model = gtk_tree_model_sort_get_model(GTK_TREE_MODEL_SORT(s_model));
1312 gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (f_model));
1316 gnc_tree_view_account_filter_by_view_info(
Account* acct, gpointer data)
1319 AccountViewInfo* avi = (AccountViewInfo*)data;
1321 g_return_val_if_fail(GNC_IS_ACCOUNT(acct), FALSE);
1324 if (!avi->include_type[acct_type])
return FALSE;
1339 GtkTreePath *s_path)
1341 GtkTreeModel *model, *f_model, *s_model;
1342 GtkTreePath *path, *f_path;
1346 ENTER(
"view %p", view);
1347 g_return_val_if_fail (GNC_IS_TREE_VIEW_ACCOUNT (view), NULL);
1348 g_return_val_if_fail (s_path != NULL, NULL);
1350 s_model = gtk_tree_view_get_model(GTK_TREE_VIEW(view));
1351 f_path = gtk_tree_model_sort_convert_path_to_child_path (
1352 GTK_TREE_MODEL_SORT (s_model), s_path);
1355 LEAVE(
"no filter path");
1359 f_model = gtk_tree_model_sort_get_model(GTK_TREE_MODEL_SORT(s_model));
1360 path = gtk_tree_model_filter_convert_path_to_child_path (
1361 GTK_TREE_MODEL_FILTER (f_model), f_path);
1362 gtk_tree_path_free(f_path);
1369 model = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(f_model));
1370 if (!gtk_tree_model_get_iter (model, &iter, path))
1376 account = iter.user_data;
1377 gtk_tree_path_free(path);
1385 GtkTreeIter *s_iter)
1387 GtkTreeModel *model, *f_model;
1388 GtkTreeIter iter, f_iter;
1391 g_return_val_if_fail (GTK_IS_TREE_MODEL_SORT(s_model), NULL);
1392 g_return_val_if_fail (s_iter != NULL, NULL);
1394 ENTER(
"model %p, iter %p", s_model, s_iter);
1396 gtk_tree_model_sort_convert_iter_to_child_iter (GTK_TREE_MODEL_SORT(s_model),
1399 f_model = gtk_tree_model_sort_get_model(GTK_TREE_MODEL_SORT(s_model));
1400 gtk_tree_model_filter_convert_iter_to_child_iter (
1401 GTK_TREE_MODEL_FILTER(f_model), &iter, &f_iter);
1402 model = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(f_model));
1404 GNC_TREE_MODEL_ACCOUNT(model), &iter);
1417 GtkTreeSelection *selection;
1418 GtkTreeModel *f_model, *s_model;
1419 GtkTreeIter iter, f_iter, s_iter;
1421 GtkSelectionMode mode;
1423 ENTER(
"view %p", view);
1424 g_return_val_if_fail (GNC_IS_TREE_VIEW_ACCOUNT (view), NULL);
1426 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(view));
1427 mode = gtk_tree_selection_get_mode(selection);
1428 if ((mode != GTK_SELECTION_SINGLE) && (mode != GTK_SELECTION_BROWSE))
1432 if (!gtk_tree_selection_get_selected (selection, &s_model, &s_iter))
1434 LEAVE(
"no account, get_selected failed");
1438 gtk_tree_model_sort_convert_iter_to_child_iter (GTK_TREE_MODEL_SORT (s_model),
1441 f_model = gtk_tree_model_sort_get_model(GTK_TREE_MODEL_SORT(s_model));
1442 gtk_tree_model_filter_convert_iter_to_child_iter (
1443 GTK_TREE_MODEL_FILTER (f_model), &iter, &f_iter);
1445 account = iter.user_data;
1458 GtkTreeModel *model, *f_model, *s_model;
1459 GtkTreePath *path, *f_path, *s_path, *parent_path;
1460 GtkTreeSelection *selection;
1462 ENTER(
"view %p, account %p (%s)", view,
1464 g_return_if_fail (GNC_IS_TREE_VIEW_ACCOUNT (view));
1467 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
1468 gtk_tree_selection_unselect_all (selection);
1470 if (account == NULL)
1473 s_model = gtk_tree_view_get_model(GTK_TREE_VIEW(view));
1474 f_model = gtk_tree_model_sort_get_model(GTK_TREE_MODEL_SORT(s_model));
1475 model = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(f_model));
1478 GNC_TREE_MODEL_ACCOUNT(model), account);
1484 debug_path(
DEBUG, path);
1486 f_path = gtk_tree_model_filter_convert_child_path_to_path (
1487 GTK_TREE_MODEL_FILTER (f_model), path);
1488 gtk_tree_path_free(path);
1491 LEAVE(
"no filter path");
1494 debug_path(
DEBUG, f_path);
1496 s_path = gtk_tree_model_sort_convert_child_path_to_path (GTK_TREE_MODEL_SORT (s_model),
1498 gtk_tree_path_free(f_path);
1501 LEAVE(
"no sort path");
1506 parent_path = gtk_tree_path_copy (s_path);
1507 if (gtk_tree_path_up (parent_path))
1512 gtk_tree_view_expand_to_path(GTK_TREE_VIEW(view), parent_path);
1514 gtk_tree_path_free(parent_path);
1516 gtk_tree_selection_select_path (selection, s_path);
1520 while (gtk_events_pending ())
1521 gtk_main_iteration ();
1522 gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW(view), s_path, NULL, FALSE, 0.0, 0.0);
1523 debug_path(
LEAVE, s_path);
1524 gtk_tree_path_free(s_path);
1540 get_selected_accounts_helper (GtkTreeModel *s_model,
1541 GtkTreePath *s_path,
1542 GtkTreeIter *s_iter,
1546 GtkTreeModel *f_model;
1547 GtkTreeIter iter, f_iter;
1550 gtk_tree_model_sort_convert_iter_to_child_iter (GTK_TREE_MODEL_SORT (s_model),
1553 f_model = gtk_tree_model_sort_get_model(GTK_TREE_MODEL_SORT(s_model));
1554 gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (f_model),
1556 account = iter.user_data;
1559 if (gtvsi->priv->filter_fn == NULL || gtvsi->priv->filter_fn(account, gtvsi->priv->filter_data))
1561 gtvsi->return_list = g_list_prepend (gtvsi->return_list, account);
1575 GtkTreeSelection *selection;
1578 g_return_val_if_fail (GNC_IS_TREE_VIEW_ACCOUNT (view), NULL);
1580 info.return_list = NULL;
1581 info.priv = GNC_TREE_VIEW_ACCOUNT_GET_PRIVATE(view);
1582 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(view));
1583 gtk_tree_selection_selected_foreach(selection, get_selected_accounts_helper, &info);
1584 info.return_list = g_list_reverse (info.return_list);
1585 return info.return_list;
1594 GList *account_list,
1597 GtkTreeModel *model, *f_model, *s_model;
1598 GtkTreePath *path, *f_path, *s_path, *parent_path;
1599 GtkTreeSelection *selection;
1603 g_return_if_fail (GNC_IS_TREE_VIEW_ACCOUNT (view));
1605 s_model = gtk_tree_view_get_model(GTK_TREE_VIEW(view));
1606 f_model = gtk_tree_model_sort_get_model(GTK_TREE_MODEL_SORT(s_model));
1607 model = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(f_model));
1610 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
1611 gtk_tree_selection_unselect_all (selection);
1612 gtk_tree_view_collapse_all (GTK_TREE_VIEW(view));
1615 for (element = account_list; element; )
1617 account = element->data;
1618 element = g_list_next(element);
1620 if (account == NULL)
1639 f_path = gtk_tree_model_filter_convert_child_path_to_path (GTK_TREE_MODEL_FILTER (f_model),
1641 gtk_tree_path_free(path);
1645 s_path = gtk_tree_model_sort_convert_child_path_to_path (GTK_TREE_MODEL_SORT (s_model),
1647 gtk_tree_path_free(f_path);
1652 parent_path = gtk_tree_path_copy (s_path);
1653 if (gtk_tree_path_up (parent_path))
1658 gtk_tree_view_expand_to_path(GTK_TREE_VIEW(view), parent_path);
1660 gtk_tree_path_free(parent_path);
1662 gtk_tree_selection_select_path (selection, s_path);
1663 if (show_last && (element == NULL))
1664 gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW(view), s_path, NULL, FALSE, 0.0, 0.0);
1665 gtk_tree_path_free(s_path);
1676 GtkTreeModel *s_model;
1677 GtkTreeSelection *selection;
1678 GtkTreePath *sp_account, *sp_start, *sp_end;
1679 GtkTreeIter si_account, si_start, si_end;
1680 gboolean have_start, have_end = FALSE;
1685 g_return_if_fail (GNC_IS_TREE_VIEW_ACCOUNT (view));
1687 if (account == NULL)
1689 LEAVE(
"no account");
1693 if (!gnc_tree_view_account_get_iter_from_account (view, account, &si_account))
1695 LEAVE(
"view_get_iter_from_account failed");
1700 s_model = gtk_tree_view_get_model(GTK_TREE_VIEW(view));
1701 num_children = gtk_tree_model_iter_n_children(s_model, &si_account);
1702 if (num_children == 0)
1704 LEAVE(
"no children");
1709 sp_account = gtk_tree_model_get_path (s_model, &si_account);
1710 gtk_tree_view_expand_row (GTK_TREE_VIEW(view), sp_account, TRUE);
1713 have_start = gtk_tree_model_iter_nth_child(s_model, &si_start, &si_account, 0);
1714 si_end = si_account;
1715 while (num_children)
1717 GtkTreeIter tmp_iter = si_end;
1718 have_end = gtk_tree_model_iter_nth_child(s_model, &si_end, &tmp_iter,
1721 num_children = gtk_tree_model_iter_n_children(s_model, &si_end);
1726 if (have_start && have_end)
1728 sp_start = gtk_tree_model_get_path (s_model, &si_start);
1729 sp_end = gtk_tree_model_get_path (s_model, &si_end);
1732 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
1733 gtk_tree_selection_select_range (selection, sp_start, sp_end);
1736 gtk_tree_path_free(sp_start);
1737 gtk_tree_path_free(sp_end);
1739 gtk_tree_path_free(sp_account);
1750 g_return_if_fail(view != NULL);
1751 g_return_if_fail(GNC_IS_TREE_VIEW_ACCOUNT(view));
1752 ENTER(
"view %p, account %p", view, account);
1754 path = gnc_tree_view_account_get_path_from_account(view, account);
1757 gtk_tree_view_expand_to_path(GTK_TREE_VIEW(view), path);
1758 gtk_tree_path_free(path);
1770 GtkTreePath *s_path;
1773 ENTER(
"view %p", view);
1774 g_return_val_if_fail (GNC_IS_TREE_VIEW_ACCOUNT (view), NULL);
1776 gtk_tree_view_get_cursor (GTK_TREE_VIEW(view), &s_path, NULL);
1779 LEAVE(
"no account");
1784 gtk_tree_path_free(s_path);
1795 gtva_update_column_name (GtkTreeViewColumn *column,
1797 const gchar *mnemonic)
1801 g_return_if_fail(column);
1803 name = g_strdup_printf(fmt, mnemonic);
1804 gtk_tree_view_column_set_title(column, name);
1813 const gchar *mnemonic;
1815 priv = GNC_TREE_VIEW_ACCOUNT_GET_PRIVATE(view);
1818 gtva_update_column_name(priv->present_report_column,
1820 _(
"Present (%s)"), mnemonic);
1821 gtva_update_column_name(priv->balance_report_column,
1823 _(
"Balance (%s)"), mnemonic);
1824 gtva_update_column_name(priv->cleared_report_column,
1826 _(
"Cleared (%s)"), mnemonic);
1827 gtva_update_column_name(priv->reconciled_report_column,
1829 _(
"Reconciled (%s)"), mnemonic);
1830 gtva_update_column_name(priv->future_min_report_column,
1832 _(
"Future Minimum (%s)"), mnemonic);
1833 gtva_update_column_name(priv->total_report_column,
1835 _(
"Total (%s)"), mnemonic);
1842 gtva_currency_changed_cb (
void)
1844 const GList *views, *ptr;
1847 for (ptr = views; ptr; ptr = g_list_next(ptr))
1849 gtva_update_column_names (ptr->data);
1856 account_cell_property_data_func (GtkTreeViewColumn *tree_column,
1857 GtkCellRenderer *cell,
1858 GtkTreeModel *s_model,
1859 GtkTreeIter *s_iter,
1864 gchar *
string = NULL;
1866 g_return_if_fail (GTK_IS_TREE_MODEL_SORT (s_model));
1870 string = g_strdup (
"");
1872 g_object_set (G_OBJECT (cell),
"text",
string,
"xalign", 0.0, NULL);
1875 view = g_object_get_data(G_OBJECT(tree_column),
"tree-view");
1877 if (GNC_IS_TREE_VIEW_ACCOUNT (view))
1878 acc_color_data_func (tree_column, cell, s_model, s_iter, view);
1884 const gchar *column_title,
1885 const gchar *propname)
1887 GtkCellRenderer *renderer;
1888 GtkTreeViewColumn *column;
1890 g_return_val_if_fail (GNC_IS_TREE_VIEW_ACCOUNT (view), NULL);
1891 g_return_val_if_fail (propname != NULL, NULL);
1894 propname, NULL,
"Sample text",
1900 g_object_set (G_OBJECT (renderer),
"xalign", 1.0, NULL);
1903 g_object_set_data(G_OBJECT(column),
"tree-view", (gpointer)view);
1905 gtk_tree_view_column_set_cell_data_func (column, renderer,
1906 account_cell_property_data_func,
1907 g_strdup(propname), g_free);
1911 static void col_edited_helper(GtkCellRendererText *cell, gchar *path_string,
1912 gchar *new_text, gpointer _s_model)
1915 GtkTreeModel *s_model;
1917 GncTreeViewAccountColumnTextEdited col_edited_cb;
1918 GtkTreeViewColumn *col;
1920 col_edited_cb = g_object_get_data(G_OBJECT(cell),
1921 "column_edited_callback");
1922 col = GTK_TREE_VIEW_COLUMN(g_object_get_data(G_OBJECT(cell),
1924 s_model = GTK_TREE_MODEL(_s_model);
1926 if (!gtk_tree_model_get_iter_from_string(s_model, &s_iter, path_string))
1930 col_edited_cb(account, col, new_text);
1933 static void col_source_helper(GtkTreeViewColumn *col, GtkCellRenderer *cell,
1934 GtkTreeModel *s_model, GtkTreeIter *s_iter,
1935 gpointer _col_source_cb)
1939 GncTreeViewAccountColumnSource col_source_cb;
1941 g_return_if_fail (GTK_IS_TREE_MODEL_SORT (s_model));
1942 col_source_cb = (GncTreeViewAccountColumnSource) _col_source_cb;
1944 text = col_source_cb(account, col, cell);
1945 g_object_set (G_OBJECT (cell),
"text", text,
"xalign", 1.0, NULL);
1955 GtkTreeViewColumn *column,
1956 GtkCellRenderer *renderer,
1957 GncTreeViewAccountColumnTextEdited col_edited_cb)
1959 GtkTreeModel *s_model;
1961 if (col_edited_cb == NULL)
1963 g_object_set(G_OBJECT(renderer),
"editable", FALSE, NULL);
1964 g_object_set_data(G_OBJECT(renderer),
"column_edited_callback", col_edited_cb);
1965 s_model = gtk_tree_view_get_model(GTK_TREE_VIEW(account_view));
1966 g_signal_handlers_disconnect_by_func(G_OBJECT(renderer), col_edited_cb, s_model);
1967 g_object_set_data(G_OBJECT(renderer),
"column_view", column);
1971 g_object_set(G_OBJECT(renderer),
"editable", TRUE, NULL);
1972 g_object_set_data(G_OBJECT(renderer),
"column_edited_callback",
1974 s_model = gtk_tree_view_get_model(GTK_TREE_VIEW(account_view));
1975 g_signal_connect(G_OBJECT(renderer),
"edited",
1976 (GCallback) col_edited_helper, s_model);
1977 g_object_set_data(G_OBJECT(renderer),
"column_view", column);
1983 const gchar *column_title,
1984 GncTreeViewAccountColumnSource
1986 GncTreeViewAccountColumnTextEdited
1989 GtkCellRenderer *renderer;
1991 g_return_val_if_fail(GNC_IS_TREE_VIEW_ACCOUNT(account_view), NULL);
1993 renderer = gtk_cell_renderer_text_new();
1995 return gnc_tree_view_account_add_custom_column_renderer(
1996 account_view, column_title, col_source_cb, col_edited_cb, renderer);
2001 const gchar *column_title,
2002 GncTreeViewAccountColumnSource
2004 GncTreeViewAccountColumnTextEdited
2006 GtkCellRenderer *renderer)
2008 GtkTreeViewColumn *column;
2010 g_return_val_if_fail (GNC_IS_TREE_VIEW_ACCOUNT (account_view), NULL);
2012 g_object_set (G_OBJECT (renderer),
"xalign", 1.0, NULL);
2014 column = gtk_tree_view_column_new_with_attributes (column_title,
2018 gtva_setup_column_renderer_edited_cb(account_view, column,
2019 renderer, col_edited_cb);
2021 gtk_tree_view_column_set_cell_data_func (column, renderer,
2023 col_source_cb, NULL);
2030 #define FILTER_TREE_VIEW "types_tree_view" 2054 if (g_hash_table_size (fd->filter_override) > 0)
2057 test_acc = g_hash_table_lookup (fd->filter_override, account);
2058 if (test_acc != NULL)
2060 LEAVE(
" filter: override");
2067 LEAVE(
" hide: hidden");
2071 if (!fd->show_zero_total)
2073 total = xaccAccountGetBalanceInCurrency (account, NULL, TRUE);
2076 LEAVE(
" hide: zero balance");
2081 if (!fd->show_unused)
2083 if (gnc_account_and_descendants_empty(account))
2085 LEAVE(
" hide: unused");
2091 result = (fd->visible_types & (1 << acct_type)) ? TRUE : FALSE;
2092 LEAVE(
" %s", result ?
"show" :
"hide");
2107 g_return_if_fail(GTK_IS_TOGGLE_BUTTON(button));
2109 ENTER(
"button %p", button);
2110 fd->show_hidden = gtk_toggle_button_get_active(button);
2112 LEAVE(
"show_hidden %d", fd->show_hidden);
2126 g_return_if_fail(GTK_IS_TOGGLE_BUTTON(button));
2128 ENTER(
"button %p", button);
2129 fd->show_zero_total = gtk_toggle_button_get_active(button);
2131 LEAVE(
"show_zero %d", fd->show_zero_total);
2145 g_return_if_fail(GTK_IS_TOGGLE_BUTTON(button));
2147 ENTER(
"button %p", button);
2148 fd->show_unused = gtk_toggle_button_get_active(button);
2150 LEAVE(
"show_unused %d", fd->show_unused);
2165 g_return_if_fail(GTK_IS_BUTTON(button));
2167 ENTER(
"button %p", button);
2168 fd->visible_types = 0;
2169 gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(fd->model));
2171 LEAVE(
"types 0x%x", fd->visible_types);
2184 g_return_if_fail(GTK_IS_BUTTON(button));
2186 ENTER(
"button %p", button);
2187 fd->visible_types = -1;
2188 gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(fd->model));
2190 LEAVE(
"types 0x%x", fd->visible_types);
2204 ENTER(
"button %p", button);
2221 gppat_filter_visible_set_func (GtkTreeViewColumn *column,
2222 GtkCellRenderer *renderer,
2223 GtkTreeModel *model,
2231 gtk_tree_model_get(model, iter, GNC_TREE_MODEL_ACCOUNT_TYPES_COL_TYPE, &type, -1);
2233 active = (fd->visible_types & (1 << type)) ? TRUE : FALSE;
2234 g_object_set (G_OBJECT (renderer),
"active", active, NULL);
2243 gppat_filter_visible_toggled_cb (GtkCellRendererToggle *renderer,
2247 GtkTreeModel *model = fd->model;
2252 ENTER(
"toggled %p", path_str);
2253 path = gtk_tree_path_new_from_string(path_str);
2255 if (gtk_tree_model_get_iter(model, &iter, path))
2257 gtk_tree_model_get(model, &iter, GNC_TREE_MODEL_ACCOUNT_TYPES_COL_TYPE, &type, -1);
2258 fd->visible_types ^= (1 << type);
2261 gtk_tree_path_free(path);
2262 LEAVE(
"types 0x%x", fd->visible_types);
2282 g_return_if_fail(GTK_IS_DIALOG(dialog));
2284 ENTER(
"dialog %p, response %d", dialog, response);
2286 if (response != GTK_RESPONSE_OK)
2288 fd->visible_types = fd->original_visible_types;
2289 fd->show_hidden = fd->original_show_hidden;
2290 fd->show_zero_total = fd->original_show_zero_total;
2291 fd->show_unused = fd->original_show_unused;
2296 gptemp = (gpointer)fd->dialog;
2297 g_atomic_pointer_compare_and_exchange(&gptemp,
2298 (gpointer)dialog, NULL);
2299 fd->dialog = gptemp;
2300 gtk_widget_destroy(dialog);
2301 LEAVE(
"types 0x%x", fd->visible_types);
2307 GtkWidget *dialog, *button;
2309 GtkCellRenderer *renderer;
2310 GtkBuilder *builder;
2313 ENTER(
"(fd %p, page %p)", fd, page);
2317 gtk_window_present(GTK_WINDOW(fd->dialog));
2318 LEAVE(
"existing dialog");
2323 builder = gtk_builder_new();
2324 gnc_builder_add_from_file (builder,
"dialog-account.glade",
"account_filter_by_dialog");
2325 dialog = GTK_WIDGET(gtk_builder_get_object (builder,
"account_filter_by_dialog"));
2326 fd->dialog = dialog;
2327 gtk_window_set_transient_for(GTK_WINDOW(dialog),
2328 GTK_WINDOW(GNC_PLUGIN_PAGE(page)->window));
2330 title = g_strdup_printf(_(
"Filter %s by..."),
2332 gtk_window_set_title(GTK_WINDOW(dialog), title);
2336 fd->original_visible_types = fd->visible_types;
2337 fd->original_show_hidden = fd->show_hidden;
2338 fd->original_show_zero_total = fd->show_zero_total;
2339 fd->original_show_unused = fd->show_unused;
2342 button = GTK_WIDGET(gtk_builder_get_object (builder,
"show_hidden"));
2343 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),
2345 button = GTK_WIDGET(gtk_builder_get_object (builder,
"show_zero"));
2346 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),
2347 fd->show_zero_total);
2348 button = GTK_WIDGET(gtk_builder_get_object (builder,
"show_unused"));
2349 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),
2353 view = GTK_TREE_VIEW(gtk_builder_get_object (builder, FILTER_TREE_VIEW));
2355 fd->model = gnc_tree_model_account_types_filter_using_mask
2357 gtk_tree_view_set_model(view, fd->model);
2358 g_object_unref (fd->model);
2360 renderer = gtk_cell_renderer_toggle_new();
2362 g_signal_connect(renderer,
"toggled",
2363 G_CALLBACK(gppat_filter_visible_toggled_cb), fd);
2365 gtk_tree_view_insert_column_with_data_func (view, -1, NULL, renderer,
2366 gppat_filter_visible_set_func, fd, NULL);
2368 gtk_tree_view_insert_column_with_attributes (view,
2369 -1, _(
"Account Types"), gtk_cell_renderer_text_new(),
2370 "text", GNC_TREE_MODEL_ACCOUNT_TYPES_COL_NAME, NULL);
2373 gtk_builder_connect_signals(builder, fd);
2374 g_object_unref(G_OBJECT(builder));
2377 gtk_widget_show_all(dialog);
2382 #define ACCT_COUNT "NumberOfOpenAccounts" 2383 #define ACCT_OPEN "OpenAccount%d" 2384 #define ACCT_SELECTED "SelectedAccount" 2385 #define SHOW_HIDDEN "ShowHidden" 2386 #define SHOW_ZERO "ShowZeroTotal" 2387 #define SHOW_UNUSED "ShowUnused" 2388 #define ACCT_TYPES "AccountTypes" 2392 #define SHOW_HIDDEN_ACCOUNTS "Show_Hidden" 2393 #define SHOW_ZERO_TOTALS "Show_ZeroTotal" 2394 #define SHOW_UNUSED_ACCOUNTS "Show_Unused" 2395 #define ACCOUNT_TYPES "Account_Types" 2401 const gchar *group_name;
2422 bar_t *bar = user_data;
2424 gchar *account_name;
2427 if (account == NULL)
2431 if (account_name == NULL)
2434 key = g_strdup_printf(ACCT_OPEN, ++bar->count);
2435 g_key_file_set_string(bar->key_file, bar->group_name, key, account_name);
2437 g_free(account_name);
2456 bar_t *bar = user_data;
2457 gchar *account_name;
2460 if (account == NULL)
2464 if (account_name == NULL)
2467 g_key_file_set_string(bar->key_file, bar->group_name, ACCT_SELECTED,
2469 g_free(account_name);
2475 GKeyFile *key_file,
const gchar *group_name)
2479 g_return_if_fail (key_file != NULL);
2480 g_return_if_fail (group_name != NULL);
2482 ENTER(
"view %p, key_file %p, group_name %s", view, key_file,
2485 g_key_file_set_integer(key_file, group_name, ACCT_TYPES,
2487 g_key_file_set_boolean(key_file, group_name, SHOW_HIDDEN,
2489 g_key_file_set_boolean(key_file, group_name, SHOW_ZERO,
2490 fd->show_zero_total);
2491 g_key_file_set_boolean(key_file, group_name, SHOW_UNUSED,
2494 bar.key_file = key_file;
2495 bar.group_name = group_name;
2497 tree_save_selected_row(view, &bar);
2498 gtk_tree_view_map_expanded_rows(
2499 GTK_TREE_VIEW(view), (GtkTreeViewMappingFunc) tree_save_expanded_row,
2501 g_key_file_set_integer(key_file, group_name, ACCT_COUNT, bar.count);
2510 const gchar *group_name)
2512 g_return_if_fail (key_file != NULL);
2513 g_return_if_fail (group_name != NULL);
2515 ENTER(
"view %p, key_file %p, group_name %s", view, key_file,
2518 g_key_file_set_integer (key_file, group_name, ACCOUNT_TYPES,
2520 g_key_file_set_boolean (key_file, group_name, SHOW_HIDDEN_ACCOUNTS,
2522 g_key_file_set_boolean (key_file, group_name, SHOW_ZERO_TOTALS,
2523 fd->show_zero_total);
2524 g_key_file_set_boolean (key_file, group_name, SHOW_UNUSED_ACCOUNTS,
2538 const gchar *account_name)
2544 g_return_if_fail(book);
2561 const gchar *account_name)
2567 g_return_if_fail(book);
2577 GKeyFile *key_file,
const gchar *group_name)
2579 GError *error = NULL;
2585 show = g_key_file_get_boolean(key_file, group_name, SHOW_HIDDEN, &error);
2588 g_warning(
"error reading group %s key %s: %s",
2589 group_name, SHOW_HIDDEN, error->message);
2590 g_error_free(error);
2594 fd->show_hidden = show;
2596 show = g_key_file_get_boolean(key_file, group_name, SHOW_ZERO, &error);
2599 g_warning(
"error reading group %s key %s: %s",
2600 group_name, SHOW_ZERO, error->message);
2601 g_error_free(error);
2605 fd->show_zero_total = show;
2607 show = g_key_file_get_boolean(key_file, group_name, SHOW_UNUSED, &error);
2610 g_warning(
"error reading group %s key %s: %s",
2611 group_name, SHOW_UNUSED, error->message);
2612 g_error_free(error);
2616 fd->show_unused = show;
2618 i = g_key_file_get_integer(key_file, group_name, ACCT_TYPES, &error);
2621 g_warning(
"error reading group %s key %s: %s",
2622 group_name, ACCT_TYPES, error->message);
2623 g_error_free(error);
2627 fd->visible_types = i;
2630 count = g_key_file_get_integer(key_file, group_name, ACCT_COUNT, &error);
2633 for (i = 1; i <= count; i++)
2635 key = g_strdup_printf(ACCT_OPEN, i);
2636 value = g_key_file_get_string(key_file, group_name, key, &error);
2639 g_warning(
"error reading group %s key %s: %s",
2640 group_name, key, error->message);
2641 g_error_free(error);
2646 tree_restore_expanded_row(view, value);
2654 g_warning(
"error reading group %s key %s: %s",
2655 group_name, ACCT_COUNT, error->message);
2656 g_error_free(error);
2660 value = g_key_file_get_string(key_file, group_name, ACCT_SELECTED, NULL);
2663 tree_restore_selected_row(view, value);
2675 const gchar *group_name)
2677 GError *error = NULL;
2681 g_return_if_fail (key_file != NULL);
2682 g_return_if_fail (group_name != NULL);
2687 show = g_key_file_get_boolean (key_file, group_name, SHOW_HIDDEN_ACCOUNTS, &error);
2690 g_error_free (error);
2694 fd->show_hidden = show;
2696 show = g_key_file_get_boolean(key_file, group_name, SHOW_ZERO_TOTALS, &error);
2699 g_error_free (error);
2703 fd->show_zero_total = show;
2705 show = g_key_file_get_boolean(key_file, group_name, SHOW_UNUSED_ACCOUNTS, &error);
2708 g_error_free (error);
2712 fd->show_unused = show;
2714 i = g_key_file_get_integer(key_file, group_name, ACCOUNT_TYPES, &error);
2717 g_error_free (error);
2721 fd->visible_types = i;
2726 gnc_tree_view_account_name_edited_cb(
Account *account, GtkTreeViewColumn *col,
const gchar *new_name)
2734 if (existing != NULL && existing != account)
2736 PERR(
"account with the same name [%s] already exists.", new_name);
2744 gnc_tree_view_account_code_edited_cb(
Account *account, GtkTreeViewColumn *col,
const gchar *new_code)
2752 gnc_tree_view_account_description_edited_cb(
Account *account, GtkTreeViewColumn *col,
const gchar *new_desc)
2760 gnc_tree_view_account_notes_edited_cb(
Account *account, GtkTreeViewColumn *col,
const gchar *new_notes)
2769 GtkTreeViewColumn *column,
2770 GncTreeViewAccountColumnTextEdited edited_cb)
2772 GList *renderers_orig, *renderers;
2773 GtkCellRenderer *renderer = NULL;
2777 for (renderers_orig = renderers = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(column));
2778 renderers && !GTK_IS_CELL_RENDERER_TEXT(renderers->data);
2779 renderers = renderers->next);
2781 renderer = GTK_CELL_RENDERER(renderers->data);
2782 g_list_free(renderers_orig);
2783 g_return_if_fail(renderer != NULL);
2784 gtva_setup_column_renderer_edited_cb(GNC_TREE_VIEW_ACCOUNT(view), column, renderer, edited_cb);
2789 GncTreeViewAccountColumnTextEdited edited_cb)
2792 priv = GNC_TREE_VIEW_ACCOUNT_GET_PRIVATE(view);
2793 gtva_set_column_editor(view, priv->name_column, edited_cb);
2798 GncTreeViewAccountColumnTextEdited edited_cb)
2801 priv = GNC_TREE_VIEW_ACCOUNT_GET_PRIVATE(view);
2802 gtva_set_column_editor(view, priv->code_column, edited_cb);
2807 GncTreeViewAccountColumnTextEdited edited_cb)
2810 priv = GNC_TREE_VIEW_ACCOUNT_GET_PRIVATE(view);
2811 gtva_set_column_editor(view, priv->desc_column, edited_cb);
2816 GncTreeViewAccountColumnTextEdited edited_cb)
2819 priv = GNC_TREE_VIEW_ACCOUNT_GET_PRIVATE(view);
2820 gtva_set_column_editor(view, priv->notes_column, edited_cb);
2824 gboolean gnc_tree_view_search_compare (GtkTreeModel *model, gint column,
2825 const gchar *key, GtkTreeIter *iter, gpointer search_data)
2827 gchar *normalized_key;
2828 gchar *case_normalized_key = NULL;
2829 gboolean match = FALSE;
2831 normalized_key = g_utf8_normalize (key, -1, G_NORMALIZE_NFC);
2833 case_normalized_key = g_utf8_casefold (normalized_key, -1);
2834 if (case_normalized_key)
2840 gchar *normalized_string;
2841 gchar *case_normalized_string = NULL;
2847 gtk_tree_model_get(model,iter,GNC_TREE_MODEL_ACCOUNT_COL_NAME,&str,-1);
2850 gtk_tree_model_get(model,iter,GNC_TREE_MODEL_ACCOUNT_COL_CODE,&str,-1);
2853 gtk_tree_model_get(model,iter,GNC_TREE_MODEL_ACCOUNT_COL_DESCRIPTION,&str,-1);
2860 normalized_string = g_utf8_normalize (str, -1, G_NORMALIZE_NFC);
2861 if (normalized_string)
2862 case_normalized_string = g_utf8_casefold (normalized_string, -1);
2863 if (case_normalized_string&&NULL!=strstr(case_normalized_string,case_normalized_key))
2867 g_free (normalized_string);
2868 g_free (case_normalized_string);
2875 g_free (normalized_key);
2876 g_free (case_normalized_key);
2883 GFunc editing_started_cb, gpointer editing_cb_data)
2886 editing_started_cb, editing_cb_data);
2890 GFunc editing_finished_cb, gpointer editing_cb_data)
2893 editing_finished_cb, editing_cb_data);
Account * gnc_account_get_parent(const Account *acc)
This routine returns a pointer to the parent of the specified account.
void gnc_tree_view_account_get_view_info(GncTreeViewAccount *account_view, AccountViewInfo *avi)
Given pointers to an account tree and old style filter block, this function will copy the current con...
GtkTreeViewColumn * gnc_tree_view_account_add_property_column(GncTreeViewAccount *view, const gchar *column_title, const gchar *propname)
Add a new column to the set of columns in an account tree view.
void qof_instance_get(const QofInstance *inst, const gchar *first_prop,...)
Wrapper for g_object_get.
The instance data structure for a content plugin.
const GList * gnc_gobject_tracking_get_list(const gchar *name)
Get a list of all known objects of a specified type.
const char * gnc_commodity_get_mnemonic(const gnc_commodity *cm)
Retrieve the mnemonic for the specified commodity.
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.
GList * gnc_tree_view_account_get_selected_accounts(GncTreeViewAccount *view)
This function returns a list of the accounts associated with the selected items in the account tree v...
Account * gnc_tree_view_account_get_cursor_account(GncTreeViewAccount *view)
This function returns the account in the account tree view at the current location of the cursor...
void xaccAccountSetNotes(Account *acc, const char *str)
Set the account's notes.
void gnc_tree_view_account_set_editing_finished_cb(GncTreeViewAccount *view, GFunc editing_finished_cb, gpointer editing_cb_data)
Setup the callback for when the user finishes editing the account tree so actions can be enabled like...
int safe_utf8_collate(const char *da, const char *db)
Collate two UTF-8 strings.
GNCAccountType xaccAccountGetType(const Account *acc)
Returns the account's account type.
void gnc_tree_view_set_editing_started_cb(GncTreeView *view, GFunc editing_started_cb, gpointer editing_cb_data)
Setup a callback for when the user starts editing so appropriate actions can be taken like disable th...
void gppat_filter_response_cb(GtkWidget *dialog, gint response, AccountFilterDialog *fd)
The Filter dialog was closed.
const char * xaccAccountGetCode(const Account *acc)
Get the account's accounting code.
common utilities for manipulating a GtkTreeView within gnucash
#define DEBUG(format, args...)
Print a debugging message.
const gchar * gnc_plugin_page_get_page_name(GncPluginPage *page)
Retrieve the name of this page.
Account * gnc_tree_model_account_get_account(GncTreeModelAccount *model, GtkTreeIter *iter)
Convert a model/iter pair to a gnucash account.
void xaccAccountSetCode(Account *acc, const char *str)
Set the account's accounting code.
void gppat_filter_select_all_cb(GtkWidget *button, AccountFilterDialog *fd)
The "select all account types" button in the Filter dialog was clicked.
gboolean gnc_numeric_zero_p(gnc_numeric a)
Returns 1 if the given gnc_numeric is 0 (zero), else returns 0.
stop here; the following types just aren't ready for prime time
void gnc_tree_view_account_expand_to_account(GncTreeViewAccount *view, Account *account)
This function forces the account tree expand whatever levels are necessary to make the specified acco...
void gnc_tree_view_account_column_add_color(GncTreeViewAccount *view, GtkTreeViewColumn *col)
Add the account color background data function to the GncTreeViewAccount column to show or not the co...
void gnc_tree_view_account_set_view_info(GncTreeViewAccount *account_view, AccountViewInfo *avi)
Given pointers to an account tree and old style filter block, this function will applies the settings...
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.
int gnc_numeric_compare(gnc_numeric a, gnc_numeric b)
Returns 1 if a>b, -1 if b>a, 0 if a == b.
void gppat_filter_clear_all_cb(GtkWidget *button, AccountFilterDialog *fd)
The "clear all account types" button in the Filter dialog was clicked.
void gnc_tree_view_account_set_editing_started_cb(GncTreeViewAccount *view, GFunc editing_started_cb, gpointer editing_cb_data)
Setup the callback for when the user starts editing the account tree so actions can be disabled like ...
#define PERR(format, args...)
Log a serious error.
GtkTreeViewColumn * gnc_tree_view_add_numeric_column(GncTreeView *view, const gchar *column_title, const gchar *pref_name, const gchar *sizing_text, gint model_data_column, gint model_color_column, gint model_visibility_column, GtkTreeIterCompareFunc column_sort_fn)
This function adds a new numeric column to a GncTreeView base view.
#define ENTER(format, args...)
Print a function entry debugging message.
gboolean gnc_tree_model_account_get_iter_from_account(GncTreeModelAccount *model, Account *account, GtkTreeIter *iter)
Convert a model/account pair into a gtk_tree_model_iter.
gnc_commodity * gnc_default_report_currency(void)
Return the default currency for use in reports, as set by the user.
void gnc_tree_view_account_set_selected_accounts(GncTreeViewAccount *view, GList *account_list, gboolean show_last)
This function selects a set of accounts in the account tree view.
gnc_commodity * gnc_default_currency(void)
Return the default currency set by the user.
void gppat_filter_show_hidden_toggled_cb(GtkToggleButton *button, AccountFilterDialog *fd)
The "show hidden" button in the Filter dialog changed state.
gboolean xaccAccountIsHidden(const Account *acc)
Should this account be "hidden".
Account * gnc_account_lookup_by_name(const Account *parent, const char *name)
The gnc_account_lookup_by_name() subroutine fetches the account by name from the descendants of the s...
int xaccAccountOrder(const Account *aa, const Account *ab)
The xaccAccountOrder() subroutine defines a sorting order on accounts.
gint gnc_tree_view_append_column(GncTreeView *view, GtkTreeViewColumn *column)
Add a column to a view based upon a GncTreeView.
GtkTreeModel implementation for gnucash account tree.
GtkTreeViewColumn * gnc_tree_view_add_toggle_column(GncTreeView *view, const gchar *column_title, const gchar *column_short_title, const gchar *pref_name, gint model_data_column, gint model_visibility_column, GtkTreeIterCompareFunc column_sort_fn, renderer_toggled toggle_edited_cb)
This function adds a new toggle column to a GncTreeView base view.
void gnc_tree_view_set_editing_finished_cb(GncTreeView *view, GFunc editing_finished_cb, gpointer editing_cb_data)
Setup a callback for when the user finishes editing so appropriate actions can be taken like enable t...
void gnc_tree_view_account_set_filter(GncTreeViewAccount *view, gnc_tree_view_account_filter_func func, gpointer data, GSourceFunc destroy)
This function attaches a filter function to the given account tree.
GtkCellRenderer * gnc_tree_view_column_get_renderer(GtkTreeViewColumn *column)
Return the "main" cell renderer from a GtkTreeViewColumn added to a GncTreeView my one of the conveni...
QofBook * qof_session_get_book(const QofSession *session)
Returns the QofBook of this session.
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...
GtkTreeViewColumn * gnc_tree_view_add_text_view_column(GncTreeView *view, const gchar *column_title, const gchar *pref_name, const gchar *icon_name, const gchar *sizing_text, gint model_data_column, gint model_visibility_column, GtkTreeIterCompareFunc column_sort_fn)
This function adds a new text view column to a GncTreeView base view.
void gnc_tree_model_account_clear_cache(GncTreeModelAccount *model)
Clear the tree model account cached values.
Account handling public routines.
void gnc_tree_view_account_select_subaccounts(GncTreeViewAccount *view, Account *account)
This function selects all sub-accounts of an account in the account tree view.
void xaccAccountSetPlaceholder(Account *acc, gboolean val)
Set the "placeholder" flag for an account.
void gnc_tree_view_account_refilter(GncTreeViewAccount *view)
This function forces the account tree filter to be evaluated.
GtkTreeView implementation for gnucash account tree.
GtkTreeModel * gnc_tree_model_account_new(Account *root)
Create a new GtkTreeModel for manipulating gnucash accounts.
GtkTreeViewColumn * gnc_tree_view_account_add_custom_column(GncTreeViewAccount *account_view, const gchar *column_title, GncTreeViewAccountColumnSource col_source_cb, GncTreeViewAccountColumnTextEdited col_edited_cb)
Add a new custom column to the set of columns in an account tree view.
GtkTreeView * gnc_tree_view_account_new_with_root(Account *root, gboolean show_root)
Create a new account tree view.
const char * xaccAccountGetDescription(const Account *acc)
Get the account's description.
GtkTreeView * gnc_tree_view_account_new(gboolean show_root)
Create a new account tree view.
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.
General utilities for dealing with accounting periods.
gboolean gnc_plugin_page_account_tree_filter_accounts(Account *account, gpointer user_data)
This function tells the account tree view whether or not to filter out a particular account...
void gnc_tree_view_account_clear_model_cache(GncTreeViewAccount *view)
This function clears the tree model account cache so the values will be updated/refreshed.
Account * gnc_tree_view_account_get_account_from_iter(GtkTreeModel *s_model, GtkTreeIter *s_iter)
This function returns the account associated with the specified iter.
const char * gnc_commodity_get_fullname(const gnc_commodity *cm)
Retrieve the full name for the specified commodity.
Account * gnc_account_lookup_by_full_name(const Account *any_acc, const gchar *name)
The gnc_account_lookup_full_name() subroutine works like gnc_account_lookup_by_name, but uses fully-qualified names using the given separator.
Account * gnc_tree_view_account_get_account_from_path(GncTreeViewAccount *view, GtkTreePath *s_path)
This function returns the account associated with the specified path.
All type declarations for the whole Gnucash engine.
gboolean xaccAccountGetReconcileLastDate(const Account *acc, time64 *last_date)
DOCUMENT ME!
GNCAccountType
The account types are used to determine how the transaction data in the account is displayed...
gboolean xaccAccountGetHidden(const Account *acc)
Get the "hidden" flag for an account.
GtkTreeModel implementation to display account types in a GtkTreeView.
Generic api to store and retrieve preferences.
gboolean xaccAccountGetIsOpeningBalance(const Account *acc)
Get the "opening-balance" flag for an account.
void gnc_tree_view_account_set_selected_account(GncTreeViewAccount *view, Account *account)
This function selects an account in the account tree view.
void gppat_filter_show_unused_toggled_cb(GtkToggleButton *button, AccountFilterDialog *fd)
The "show unused" button in the Filter dialog changed state.
void xaccAccountSetHidden(Account *acc, gboolean val)
Set the "hidden" flag for an account.
gint gnc_tree_view_account_count_children(GncTreeViewAccount *view, Account *account)
This function determines if an account in the account tree view has any visible children.
GtkTreePath * gnc_tree_model_account_get_path_from_account(GncTreeModelAccount *model, Account *account)
Convert a model/account pair into a gtk_tree_model_path.
GtkTreeViewColumn * gnc_tree_view_add_text_column(GncTreeView *view, const gchar *column_title, const gchar *pref_name, const gchar *icon_name, const gchar *sizing_text, gint model_data_column, gint model_visibility_column, GtkTreeIterCompareFunc column_sort_fn)
This function adds a new text column to a GncTreeView base view.
gboolean xaccAccountGetPlaceholder(const Account *acc)
Get the "placeholder" flag for an account.
gboolean gnc_prefs_get_bool(const gchar *group, const gchar *pref_name)
Get a boolean value from the preferences backend.
Account * gnc_tree_view_account_get_selected_account(GncTreeViewAccount *view)
This function returns the account associated with the selected item in the account tree view...
gboolean(* gnc_tree_view_account_filter_func)(Account *account, gpointer data)
This is the description of a filter function used by the account tree.
#define LEAVE(format, args...)
Print a function exit debugging message.
gint64 time64
Many systems, including Microsoft Windows and BSD-derived Unixes like Darwin, are retaining the int-3...
void xaccAccountSetDescription(Account *acc, const char *str)
Set the account's description.
const char * xaccAccountGetName(const Account *acc)
Get the account's name.
const char * xaccAccountGetTypeStr(GNCAccountType type)
The xaccAccountGetTypeStr() routine returns a string suitable for use in the GUI/Interface.
void xaccAccountSetName(Account *acc, const char *str)
Set the account's name.
The hidden root account of an account tree.
Commodity handling public routines.
The Credit card account is used to denote credit (e.g.
void gppat_filter_select_default_cb(GtkWidget *button, AccountFilterDialog *fd)
The "select default account types" button in the Filter dialog was clicked.
void gnc_prefs_remove_cb_by_func(const gchar *group, const gchar *pref_name, gpointer func, gpointer user_data)
Remove a function that was registered for a callback when the given preference changed.
const char * xaccAccountGetNotes(const Account *acc)
Get the account's notes.
void gppat_filter_show_zero_toggled_cb(GtkToggleButton *button, AccountFilterDialog *fd)
The "show zero totals" button in the Filter dialog changed state.