28 #include <glib/gi18n.h>
38 #include "gnc-component-manager.h"
42 #include "gnc-hooks.h"
43 #include "gnc-session.h"
44 #include "gnc-icons.h"
45 #include "gnc-ui-balances.h"
46 #include "dialog-utils.h"
47 #include "window-main-summarybar.h"
48 #include "assistant-utils.h"
50 #define SAMPLE_OWNER_VALUE "$1,000,000.00"
60 static void gnc_tree_view_owner_finalize (GObject *
object);
62 static void gtvo_update_column_names (
GncTreeView *view);
63 static void gtvo_currency_changed_cb (
void);
65 static gboolean gnc_tree_view_owner_filter_helper (GtkTreeModel *model,
70 static void gtvo_setup_column_renderer_edited_cb(
GncTreeViewOwner *owner_view,
71 GtkTreeViewColumn *column,
72 GtkCellRenderer *renderer,
73 GncTreeViewOwnerColumnTextEdited col_edited_cb);
82 GSourceFunc filter_destroy;
84 GtkTreeViewColumn *name_column;
85 GtkTreeViewColumn *id_column;
86 GtkTreeViewColumn *balance_report_column;
87 GtkTreeViewColumn *notes_column;
90 #define GNC_TREE_VIEW_OWNER_GET_PRIVATE(o) \
91 (G_TYPE_INSTANCE_GET_PRIVATE ((o), GNC_TYPE_TREE_VIEW_OWNER, GncTreeViewOwnerPrivate))
98 static GObjectClass *parent_class = NULL;
101 gnc_tree_view_owner_get_type (
void)
103 static GType gnc_tree_view_owner_type = 0;
105 if (gnc_tree_view_owner_type == 0)
107 static const GTypeInfo our_info =
112 (GClassInitFunc) gnc_tree_view_owner_class_init,
117 (GInstanceInitFunc) gnc_tree_view_owner_init
120 gnc_tree_view_owner_type = g_type_register_static (
121 GNC_TYPE_TREE_VIEW, GNC_TREE_VIEW_OWNER_NAME,
125 return gnc_tree_view_owner_type;
131 GObjectClass *o_class;
133 parent_class = g_type_class_peek_parent (klass);
136 o_class = G_OBJECT_CLASS (klass);
137 o_class->finalize = gnc_tree_view_owner_finalize;
141 gnc_hook_add_dangler(HOOK_CURRENCY_CHANGED,
142 (GFunc)gtvo_currency_changed_cb, NULL);
155 ovi->show_inactive = FALSE;
163 priv = GNC_TREE_VIEW_OWNER_GET_PRIVATE(view);
164 gnc_init_owner_view_info(&priv->ovi);
168 gnc_tree_view_owner_finalize (GObject *
object)
173 ENTER(
"view %p",
object);
174 g_return_if_fail (
object != NULL);
175 g_return_if_fail (GNC_IS_TREE_VIEW_OWNER (
object));
177 owner_view = GNC_TREE_VIEW_OWNER (
object);
179 priv = GNC_TREE_VIEW_OWNER_GET_PRIVATE(owner_view);
180 if (priv->filter_destroy)
182 priv->filter_destroy(priv->filter_data);
183 priv->filter_destroy = NULL;
185 priv->filter_fn = NULL;
187 if (G_OBJECT_CLASS (parent_class)->finalize)
188 (* G_OBJECT_CLASS (parent_class)->finalize) (
object);
197 gnc_tree_view_owner_active_toggled (GtkCellRendererToggle *cell,
198 const gchar *s_path_str,
207 tree_view = user_data;
208 s_path = gtk_tree_path_new_from_string (s_path_str);
212 active = !gtk_cell_renderer_toggle_get_active (cell);
213 gncOwnerSetActive (owner, active);
217 gtk_tree_path_free (s_path);
225 static GtkTreeModel *
226 sort_cb_setup_w_iters (GtkTreeModel *f_model,
227 GtkTreeIter *f_iter_a,
228 GtkTreeIter *f_iter_b,
236 model = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(f_model));
237 gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER(f_model),
240 gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER(f_model),
249 sort_cb_setup (GtkTreeModel *f_model,
250 GtkTreeIter *f_iter_a,
251 GtkTreeIter *f_iter_b,
255 GtkTreeIter iter_a, iter_b;
257 sort_cb_setup_w_iters (f_model, f_iter_a, f_iter_b,
258 &iter_a, &iter_b, owner_a, owner_b);
262 sort_by_string (GtkTreeModel *f_model,
263 GtkTreeIter *f_iter1,
264 GtkTreeIter *f_iter2,
268 GtkTreeIter iter1, iter2;
271 gint column = GPOINTER_TO_INT(user_data);
274 model = sort_cb_setup_w_iters(f_model, f_iter1, f_iter2, &iter1, &iter2, &owner1, &owner2);
277 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter1, column, &str1, -1);
278 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter2, column, &str2, -1);
289 sort_by_boolean (GtkTreeModel *f_model,
290 GtkTreeIter *f_iter1,
291 GtkTreeIter *f_iter2,
295 GtkTreeIter iter1, iter2;
297 gboolean *bool1, *bool2;
298 gint column = GPOINTER_TO_INT(user_data);
300 model = sort_cb_setup_w_iters(f_model, f_iter1, f_iter2, &iter1, &iter2, &owner1, &owner2);
303 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter1, column, &bool1, -1);
304 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter2, column, &bool2, -1);
320 sort_by_xxx_value (GtkTreeModel *f_model,
321 GtkTreeIter *f_iter_a,
322 GtkTreeIter *f_iter_b,
330 sort_cb_setup (f_model, f_iter_a, f_iter_b, (
const GncOwner**)&owner_a, (
const GncOwner**)&owner_b);
332 balance_a = gnc_ui_owner_get_balance_full(owner_a, NULL, NULL);
333 balance_b = gnc_ui_owner_get_balance_full(owner_b, NULL, NULL);
342 sort_by_balance_value (GtkTreeModel *f_model,
343 GtkTreeIter *f_iter_a,
344 GtkTreeIter *f_iter_b,
347 return sort_by_xxx_value (f_model, f_iter_a, f_iter_b, user_data);
365 GtkTreeModel *model, *f_model, *s_model;
366 const gchar *sample_type, *sample_currency;
371 view = g_object_new (GNC_TYPE_TREE_VIEW_OWNER,
372 "name",
"owner_tree", NULL);
374 priv = GNC_TREE_VIEW_OWNER_GET_PRIVATE(GNC_TREE_VIEW_OWNER (view));
380 f_model = gtk_tree_model_filter_new (model, NULL);
383 g_object_unref(G_OBJECT(model));
386 s_model = gtk_tree_model_sort_new_with_model(f_model);
387 g_object_unref(G_OBJECT(f_model));
388 gtk_tree_view_set_model (GTK_TREE_VIEW (view), s_model);
389 g_object_unref(G_OBJECT(s_model));
392 gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(view), FALSE);
399 NULL,
"GnuCash Inc.",
400 GNC_TREE_MODEL_OWNER_COL_NAME,
401 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
405 GNC_TREE_MODEL_OWNER_COL_TYPE,
406 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
411 GNC_TREE_MODEL_OWNER_COL_ID,
412 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
415 NULL, sample_currency,
416 GNC_TREE_MODEL_OWNER_COL_CURRENCY,
417 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
420 NULL,
"GnuCash Inc.",
421 GNC_TREE_MODEL_OWNER_COL_ADDRESS_NAME,
422 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
425 NULL,
"Free Software Foundation",
426 GNC_TREE_MODEL_OWNER_COL_ADDRESS_1,
427 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
430 NULL,
"51 Franklin Street, Fifth Floor",
431 GNC_TREE_MODEL_OWNER_COL_ADDRESS_2,
432 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
435 NULL,
"Boston, MA 02110-1301",
436 GNC_TREE_MODEL_OWNER_COL_ADDRESS_3,
437 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
441 GNC_TREE_MODEL_OWNER_COL_ADDRESS_4,
442 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
445 NULL,
"+1-617-542-5942",
446 GNC_TREE_MODEL_OWNER_COL_PHONE,
447 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
450 NULL,
"+1-617-542-2652",
451 GNC_TREE_MODEL_OWNER_COL_FAX,
452 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
456 GNC_TREE_MODEL_OWNER_COL_EMAIL,
457 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
461 GNC_TREE_MODEL_OWNER_COL_BALANCE,
462 GNC_TREE_MODEL_OWNER_COL_COLOR_BALANCE,
463 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
464 sort_by_balance_value);
466 priv->balance_report_column
469 GNC_TREE_MODEL_OWNER_COL_BALANCE_REPORT,
470 GNC_TREE_MODEL_OWNER_COL_COLOR_BALANCE,
471 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
472 sort_by_balance_value);
476 "Sample owner notes.",
477 GNC_TREE_MODEL_OWNER_COL_NOTES,
478 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
483 Q_(
"Column letter for 'Active'|A"),
484 GNC_OWNER_TREE_ACTIVE_COL,
485 GNC_TREE_MODEL_OWNER_COL_ACTIVE,
486 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
488 gnc_tree_view_owner_active_toggled);
491 gtvo_update_column_names(view);
495 gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (f_model),
496 gnc_tree_view_owner_filter_helper,
501 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(s_model),
502 GNC_TREE_MODEL_OWNER_COL_NAME,
505 gtk_widget_show(GTK_WIDGET(view));
507 return GTK_TREE_VIEW(view);
514 #define debug_path(fn, path) { \
515 gchar *path_string = gtk_tree_path_to_string(path); \
516 fn("tree path %s", path_string); \
517 g_free(path_string); \
525 GtkTreeModel *model, *f_model, *s_model;
526 GtkTreePath *path, *f_path, *s_path;
528 ENTER(
"view %p, owner %p (%s)", view, owner, gncOwnerGetName(owner));
537 s_model = gtk_tree_view_get_model(GTK_TREE_VIEW(view));
538 f_model = gtk_tree_model_sort_get_model(GTK_TREE_MODEL_SORT(s_model));
539 model = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(f_model));
548 f_path = gtk_tree_model_filter_convert_child_path_to_path (GTK_TREE_MODEL_FILTER (f_model), path);
549 gtk_tree_path_free(path);
552 LEAVE(
"no filter path");
557 s_path = gtk_tree_model_sort_convert_child_path_to_path (GTK_TREE_MODEL_SORT (s_model), f_path);
558 gtk_tree_path_free(f_path);
559 debug_path(
LEAVE, s_path);
568 GtkTreeModel *model, *f_model, *s_model;
569 GtkTreeIter iter, f_iter;
571 g_return_val_if_fail(GNC_IS_TREE_VIEW_OWNER(view), FALSE);
572 g_return_val_if_fail(owner != NULL, FALSE);
573 g_return_val_if_fail(s_iter != NULL, FALSE);
575 ENTER(
"view %p, owner %p (%s)", view, owner, gncOwnerGetName(owner));
578 s_model = gtk_tree_view_get_model(GTK_TREE_VIEW(view));
579 f_model = gtk_tree_model_sort_get_model(GTK_TREE_MODEL_SORT(s_model));
580 model = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(f_model));
582 GNC_TREE_MODEL_OWNER(model), owner, &iter))
584 LEAVE(
"model_get_iter_from_owner failed");
589 gtk_tree_model_filter_convert_child_iter_to_iter (
590 GTK_TREE_MODEL_FILTER(f_model), &f_iter, &iter);
591 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT(s_model),
603 gnc_tree_view_owner_filter_helper (GtkTreeModel *model,
611 g_return_val_if_fail (GNC_IS_TREE_MODEL_OWNER (model), FALSE);
612 g_return_val_if_fail (iter != NULL, FALSE);
615 GNC_TREE_MODEL_OWNER(model), iter);
617 priv = GNC_TREE_VIEW_OWNER_GET_PRIVATE(view);
619 return priv->filter_fn(owner, priv->filter_data);
638 ENTER(
"view %p, filter func %p, data %p, destroy %p",
639 view, func, data, destroy);
641 g_return_if_fail(GNC_IS_TREE_VIEW_OWNER(view));
643 priv = GNC_TREE_VIEW_OWNER_GET_PRIVATE(view);
644 if (priv->filter_destroy)
646 priv->filter_destroy(priv->filter_data);
648 priv->filter_destroy = destroy;
649 priv->filter_data = data;
650 priv->filter_fn = func;
662 GtkTreeModel *f_model, *s_model;
664 g_return_if_fail(GNC_IS_TREE_VIEW_OWNER(view));
666 s_model = gtk_tree_view_get_model(GTK_TREE_VIEW(view));
667 f_model = gtk_tree_model_sort_get_model(GTK_TREE_MODEL_SORT(s_model));
668 gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (f_model));
683 GtkTreeModel *model, *f_model, *s_model;
684 GtkTreePath *path, *f_path;
688 ENTER(
"view %p", view);
689 g_return_val_if_fail (GNC_IS_TREE_VIEW_OWNER (view), NULL);
690 g_return_val_if_fail (s_path != NULL, NULL);
692 s_model = gtk_tree_view_get_model(GTK_TREE_VIEW(view));
693 f_path = gtk_tree_model_sort_convert_path_to_child_path (
694 GTK_TREE_MODEL_SORT (s_model), s_path);
697 LEAVE(
"no filter path");
701 f_model = gtk_tree_model_sort_get_model(GTK_TREE_MODEL_SORT(s_model));
702 path = gtk_tree_model_filter_convert_path_to_child_path (
703 GTK_TREE_MODEL_FILTER (f_model), f_path);
704 gtk_tree_path_free(f_path);
711 model = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(f_model));
712 if (!gtk_tree_model_get_iter (model, &iter, path))
718 owner = iter.user_data;
719 gtk_tree_path_free(path);
720 LEAVE(
"owner %p (%s)", owner, gncOwnerGetName (owner));
729 GtkTreeModel *model, *f_model;
730 GtkTreeIter iter, f_iter;
733 g_return_val_if_fail (GTK_IS_TREE_MODEL_SORT(s_model), NULL);
734 g_return_val_if_fail (s_iter != NULL, NULL);
736 ENTER(
"model %p, iter %p", s_model, s_iter);
738 gtk_tree_model_sort_convert_iter_to_child_iter (GTK_TREE_MODEL_SORT(s_model),
741 f_model = gtk_tree_model_sort_get_model(GTK_TREE_MODEL_SORT(s_model));
742 gtk_tree_model_filter_convert_iter_to_child_iter (
743 GTK_TREE_MODEL_FILTER(f_model), &iter, &f_iter);
744 model = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(f_model));
746 GNC_TREE_MODEL_OWNER(model), &iter);
747 LEAVE(
"owner %p (%s)", owner, gncOwnerGetName (owner));
759 GtkTreeSelection *selection;
760 GtkTreeModel *f_model, *s_model;
761 GtkTreeIter iter, f_iter, s_iter;
763 GtkSelectionMode mode;
765 ENTER(
"view %p", view);
766 g_return_val_if_fail (GNC_IS_TREE_VIEW_OWNER (view), NULL);
768 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(view));
769 mode = gtk_tree_selection_get_mode(selection);
770 if ((mode != GTK_SELECTION_SINGLE) && (mode != GTK_SELECTION_BROWSE))
774 if (!gtk_tree_selection_get_selected (selection, &s_model, &s_iter))
776 LEAVE(
"no owner, get_selected failed");
780 gtk_tree_model_sort_convert_iter_to_child_iter (GTK_TREE_MODEL_SORT (s_model),
783 f_model = gtk_tree_model_sort_get_model(GTK_TREE_MODEL_SORT(s_model));
784 gtk_tree_model_filter_convert_iter_to_child_iter (
785 GTK_TREE_MODEL_FILTER (f_model), &iter, &f_iter);
787 owner = iter.user_data;
788 LEAVE(
"owner %p (%s)", owner, gncOwnerGetName (owner));
800 GtkTreeModel *model, *f_model, *s_model;
801 GtkTreePath *path, *f_path, *s_path;
802 GtkTreeSelection *selection;
804 ENTER(
"view %p, owner %p (%s)", view,
805 owner, gncOwnerGetName (owner));
806 g_return_if_fail (GNC_IS_TREE_VIEW_OWNER (view));
809 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
810 gtk_tree_selection_unselect_all (selection);
815 s_model = gtk_tree_view_get_model(GTK_TREE_VIEW(view));
816 f_model = gtk_tree_model_sort_get_model(GTK_TREE_MODEL_SORT(s_model));
817 model = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(f_model));
820 GNC_TREE_MODEL_OWNER(model), owner);
826 debug_path(
DEBUG, path);
828 f_path = gtk_tree_model_filter_convert_child_path_to_path (
829 GTK_TREE_MODEL_FILTER (f_model), path);
830 gtk_tree_path_free(path);
833 LEAVE(
"no filter path");
836 debug_path(
DEBUG, f_path);
838 s_path = gtk_tree_model_sort_convert_child_path_to_path (GTK_TREE_MODEL_SORT (s_model),
840 gtk_tree_path_free(f_path);
843 LEAVE(
"no sort path");
847 gtk_tree_selection_select_path (selection, s_path);
851 while (gtk_events_pending ())
852 gtk_main_iteration ();
853 gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW(view), s_path, NULL, FALSE, 0.0, 0.0);
854 debug_path(
LEAVE, s_path);
855 gtk_tree_path_free(s_path);
872 get_selected_owners_helper (GtkTreeModel *s_model,
878 GtkTreeModel *f_model;
879 GtkTreeIter iter, f_iter;
882 gtk_tree_model_sort_convert_iter_to_child_iter (GTK_TREE_MODEL_SORT (s_model),
885 f_model = gtk_tree_model_sort_get_model(GTK_TREE_MODEL_SORT(s_model));
886 gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (f_model),
888 owner = iter.user_data;
891 if (gtvsi->priv->filter_fn == NULL || gtvsi->priv->filter_fn(owner, gtvsi->priv->filter_data))
893 gtvsi->return_list = g_list_append(gtvsi->return_list, owner);
903 gtvo_update_column_name (GtkTreeViewColumn *column,
905 const gchar *mnemonic)
909 g_return_if_fail(column);
911 name = g_strdup_printf(fmt, mnemonic);
912 gtk_tree_view_column_set_title(column, name);
921 const gchar *mnemonic;
923 priv = GNC_TREE_VIEW_OWNER_GET_PRIVATE(view);
926 gtvo_update_column_name(priv->balance_report_column,
928 _(
"Balance (%s)"), mnemonic);
935 gtvo_currency_changed_cb (
void)
937 const GList *views, *ptr;
940 for (ptr = views; ptr; ptr = g_list_next(ptr))
942 gtvo_update_column_names (ptr->data);
950 owner_cell_kvp_data_func (GtkTreeViewColumn *tree_column,
951 GtkCellRenderer *cell,
952 GtkTreeModel *s_model,
959 g_return_if_fail (GTK_IS_TREE_MODEL_SORT (s_model));
961 frame = gncOwnerGetSlots(owner);
963 g_object_set (G_OBJECT (cell),
964 "text", kvp_frame_get_string(frame, (gchar *)key),
970 static void col_edited_helper(GtkCellRendererText *cell, gchar *path_string,
971 gchar *new_text, gpointer _s_model)
974 GtkTreeModel *s_model;
976 GncTreeViewOwnerColumnTextEdited col_edited_cb;
977 GtkTreeViewColumn *col;
979 col_edited_cb = g_object_get_data(G_OBJECT(cell),
980 "column_edited_callback");
981 col = GTK_TREE_VIEW_COLUMN(g_object_get_data(G_OBJECT(cell),
983 s_model = GTK_TREE_MODEL(_s_model);
985 if (!gtk_tree_model_get_iter_from_string(s_model, &s_iter, path_string))
989 col_edited_cb(owner, col, new_text);
992 static void col_source_helper(GtkTreeViewColumn *col, GtkCellRenderer *cell,
993 GtkTreeModel *s_model, GtkTreeIter *s_iter,
994 gpointer _col_source_cb)
998 GncTreeViewOwnerColumnSource col_source_cb;
1000 g_return_if_fail (GTK_IS_TREE_MODEL_SORT (s_model));
1001 col_source_cb = (GncTreeViewOwnerColumnSource) _col_source_cb;
1003 text = col_source_cb(owner, col, cell);
1004 g_object_set (G_OBJECT (cell),
"text", text,
"xalign", 1.0, NULL);
1014 GtkTreeViewColumn *column,
1015 GtkCellRenderer *renderer,
1016 GncTreeViewOwnerColumnTextEdited col_edited_cb)
1018 GtkTreeModel *s_model;
1020 if (col_edited_cb == NULL)
1022 g_object_set(G_OBJECT(renderer),
"editable", FALSE, NULL);
1023 g_object_set_data(G_OBJECT(renderer),
"column_edited_callback", col_edited_cb);
1024 s_model = gtk_tree_view_get_model(GTK_TREE_VIEW(owner_view));
1025 g_signal_handlers_disconnect_by_func(G_OBJECT(renderer), col_edited_cb, s_model);
1026 g_object_set_data(G_OBJECT(renderer),
"column_view", column);
1030 g_object_set(G_OBJECT(renderer),
"editable", TRUE, NULL);
1031 g_object_set_data(G_OBJECT(renderer),
"column_edited_callback",
1033 s_model = gtk_tree_view_get_model(GTK_TREE_VIEW(owner_view));
1034 g_signal_connect(G_OBJECT(renderer),
"edited",
1035 (GCallback) col_edited_helper, s_model);
1036 g_object_set_data(G_OBJECT(renderer),
"column_view", column);
1042 #define FILTER_TREE_VIEW "types_tree_view"
1062 ENTER(
"owner %p:%s", owner, gncOwnerGetName(owner));
1064 if (!fd->show_inactive && !gncOwnerGetActive (owner))
1066 LEAVE(
" hide: inactive");
1070 if (!fd->show_zero_total)
1075 LEAVE(
" hide: zero balance");
1093 g_return_if_fail(GTK_IS_TOGGLE_BUTTON(button));
1095 ENTER(
"button %p", button);
1096 fd->show_inactive = !gtk_toggle_button_get_active(button);
1098 LEAVE(
"show_inactive %d", fd->show_inactive);
1111 g_return_if_fail(GTK_IS_TOGGLE_BUTTON(button));
1113 ENTER(
"button %p", button);
1114 fd->show_zero_total = gtk_toggle_button_get_active(button);
1116 LEAVE(
"show_zero %d", fd->show_zero_total);
1135 g_return_if_fail(GTK_IS_DIALOG(dialog));
1137 ENTER(
"dialog %p, response %d", dialog, response);
1139 if (response != GTK_RESPONSE_OK)
1141 fd->show_inactive = fd->original_show_inactive;
1142 fd->show_zero_total = fd->original_show_zero_total;
1147 gptemp = (gpointer *)fd->dialog;
1148 g_atomic_pointer_compare_and_exchange(&gptemp,
1150 fd->dialog = gptemp;
1151 gtk_widget_destroy(dialog);
1158 GtkWidget *dialog, *button;
1159 GtkBuilder *builder;
1162 ENTER(
"(fd %p, page %p)", fd, page);
1166 gtk_window_present(GTK_WINDOW(fd->dialog));
1167 LEAVE(
"existing dialog");
1172 builder = gtk_builder_new();
1173 gnc_builder_add_from_file (builder,
"gnc-tree-view-owner.glade",
"Filter By");
1174 dialog = GTK_WIDGET(gtk_builder_get_object (builder,
"Filter By"));
1175 fd->dialog = dialog;
1176 gtk_window_set_transient_for(GTK_WINDOW(dialog),
1177 GTK_WINDOW(GNC_PLUGIN_PAGE(page)->window));
1179 title = g_strdup_printf(_(
"Filter %s by..."),
1181 gtk_window_set_title(GTK_WINDOW(dialog), title);
1185 fd->original_show_inactive = fd->show_inactive;
1186 fd->original_show_zero_total = fd->show_zero_total;
1189 button = GTK_WIDGET(gtk_builder_get_object (builder,
"show_inactive"));
1190 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(button),
1191 !fd->show_inactive);
1192 button = GTK_WIDGET(gtk_builder_get_object (builder,
"show_zero"));
1193 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(button),
1194 fd->show_zero_total);
1197 gtk_builder_connect_signals (builder, fd);
1198 g_object_unref(G_OBJECT(builder));
1201 gtk_widget_show_all (dialog);
1205 #define OWNER_SELECTED_LABEL "SelectedOwner"
1206 #define SHOW_INACTIVE_LABEL "ShowInactive"
1207 #define SHOW_ZERO_LABEL "ShowZeroTotal"
1212 const gchar *group_name;
1230 bar_t *bar = user_data;
1231 const gchar *owner_name;
1237 owner_name = gncOwnerGetName (owner);
1238 if (owner_name == NULL)
1241 g_key_file_set_string(bar->key_file, bar->group_name, OWNER_SELECTED_LABEL,
1248 GKeyFile *key_file,
const gchar *group_name)
1252 g_return_if_fail (key_file != NULL);
1253 g_return_if_fail (group_name != NULL);
1255 ENTER(
"view %p, key_file %p, group_name %s", view, key_file,
1258 g_key_file_set_boolean(key_file, group_name, SHOW_INACTIVE_LABEL,
1260 g_key_file_set_boolean(key_file, group_name, SHOW_ZERO_LABEL,
1261 fd->show_zero_total);
1263 bar.key_file = key_file;
1264 bar.group_name = group_name;
1265 tree_save_selected_row(view, &bar);
1279 GncOwnerType owner_type,
1280 const gchar *owner_guid_str)
1295 GKeyFile *key_file,
const gchar *group_name,
1296 GncOwnerType owner_type)
1298 GError *error = NULL;
1303 show = g_key_file_get_boolean(key_file, group_name, SHOW_INACTIVE_LABEL, &error);
1306 g_warning(
"error reading group %s key %s: %s",
1307 group_name, SHOW_INACTIVE_LABEL, error->message);
1308 g_error_free(error);
1312 fd->show_inactive = show;
1314 show = g_key_file_get_boolean(key_file, group_name, SHOW_ZERO_LABEL, &error);
1317 g_warning(
"error reading group %s key %s: %s",
1318 group_name, SHOW_ZERO_LABEL, error->message);
1319 g_error_free(error);
1323 fd->show_zero_total = show;
1326 value = g_key_file_get_string(key_file, group_name, OWNER_SELECTED_LABEL, NULL);
1329 tree_restore_selected_row(view, owner_type, value);
1340 GtkTreeViewColumn *column,
1341 GncTreeViewOwnerColumnTextEdited edited_cb)
1343 GList *renderers_orig, *renderers;
1344 GtkCellRenderer *renderer;
1348 for (renderers_orig = renderers = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(column));
1349 renderers && !GTK_IS_CELL_RENDERER_TEXT(renderers->data);
1350 renderers = renderers->next);
1351 renderer = GTK_CELL_RENDERER(renderers->data);
1352 g_list_free(renderers_orig);
1353 g_return_if_fail(renderer != NULL);
1354 gtvo_setup_column_renderer_edited_cb(GNC_TREE_VIEW_OWNER(view), column, renderer, edited_cb);
void gnc_tree_view_owner_set_selected_owner(GncTreeViewOwner *view, GncOwner *owner)
GtkTreeView * gnc_tree_view_owner_new(GncOwnerType owner_type)
Business Interface: Object OWNERs.
const GList * gnc_gobject_tracking_get_list(const gchar *name)
void gnc_tree_view_owner_set_filter(GncTreeViewOwner *view, gnc_tree_view_owner_filter_func func, gpointer data, GSourceFunc destroy)
const char * gnc_commodity_get_mnemonic(const gnc_commodity *cm)
void gnc_tree_view_owner_refilter(GncTreeViewOwner *view)
GtkTreeView implementation for gnucash owner tree.
GtkTreeViewColumn * gnc_tree_view_add_text_column(GncTreeView *view, const gchar *column_title, const gchar *pref_name, const gchar *stock_icon_name, const gchar *sizing_text, gint model_data_column, gint model_visibility_column, GtkTreeIterCompareFunc column_sort_fn)
GtkTreeModel implementation for gnucash owner tree.
int safe_utf8_collate(const char *da, const char *db)
common utilities for manipulating a GtkTreeView within gnucash
GncOwner * gnc_tree_view_owner_get_owner_from_iter(GtkTreeModel *s_model, GtkTreeIter *s_iter)
#define DEBUG(format, args...)
const gchar * gnc_plugin_page_get_page_name(GncPluginPage *page)
gboolean string_to_guid(const gchar *string, GncGUID *guid)
void gppot_filter_response_cb(GtkWidget *dialog, gint response, OwnerFilterDialog *fd)
gboolean gnc_numeric_zero_p(gnc_numeric a)
void gnc_tree_view_set_show_column_menu(GncTreeView *view, gboolean visible)
gint gnc_numeric_compare(gnc_numeric a, gnc_numeric b)
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)
#define ENTER(format, args...)
gnc_commodity * gnc_default_report_currency(void)
gnc_commodity * gnc_default_currency(void)
gboolean(* gnc_tree_view_owner_filter_func)(GncOwner *owner, gpointer data)
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)
QofBook * qof_session_get_book(const QofSession *session)
GtkTreeModel * gnc_tree_model_owner_new(GncOwnerType owner_type)
gnc_numeric gncOwnerGetBalanceInCurrency(const GncOwner *owner, const gnc_commodity *report_currency)
void gnc_tree_view_configure_columns(GncTreeView *view)
General utilities for dealing with accounting periods.
int gncOwnerCompare(const GncOwner *a, const GncOwner *b)
void gppot_filter_show_inactive_toggled_cb(GtkToggleButton *button, OwnerFilterDialog *fd)
const char * gnc_commodity_get_fullname(const gnc_commodity *cm)
QofIdTypeConst gncOwnerTypeToQofIdType(GncOwnerType t)
GtkTreePath * gnc_tree_model_owner_get_path_from_owner(GncTreeModelOwner *model, GncOwner *owner)
GncOwner * gnc_tree_model_owner_get_owner(GncTreeModelOwner *model, GtkTreeIter *iter)
All type declarations for the whole Gnucash engine.
gboolean gnc_tree_model_owner_get_iter_from_owner(GncTreeModelOwner *model, GncOwner *owner, GtkTreeIter *iter)
#define LEAVE(format, args...)
void gppot_filter_show_zero_toggled_cb(GtkToggleButton *button, OwnerFilterDialog *fd)
GncOwner * gnc_tree_view_owner_get_selected_owner(GncTreeViewOwner *view)
GncOwner * gnc_tree_view_owner_get_owner_from_path(GncTreeViewOwner *view, GtkTreePath *s_path)
gboolean gnc_plugin_page_owner_tree_filter_owners(GncOwner *owner, gpointer user_data)
GncOwner * gncOwnerNew(void)
Commodity handling public routines.
const gchar * QofLogModule