1 /* HomeBank -- Free, easy, personal accounting for everyone.
2 * Copyright (C) 1995-2019 Maxime DOYEN
4 * This file is part of HomeBank.
6 * HomeBank is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * HomeBank is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
23 #include "ui-filter.h"
24 #include "ui-account.h"
26 #include "ui-category.h"
27 #include "gtk-dateentry.h"
30 /****************************************************************************/
32 /****************************************************************************/
41 /* our global datas */
42 extern struct HomeBank
*GLOBALS
;
45 extern gchar
*CYA_FLT_TYPE
[];
46 extern gchar
*CYA_FLT_STATUS
[];
47 extern gchar
*CYA_FLT_RANGE
[];
48 extern gchar
*CYA_SELECT
[];
49 extern char *paymode_label_names
[];
50 extern gchar
*nainex_label_names
[];
53 /* = = = = = = = = = = = = = = = = = = = = */
56 static void ui_flt_hub_category_expand_all(GtkWidget
*widget
, gpointer user_data
)
58 struct ui_flt_manage_data
*data
;
60 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
61 DB( g_print("\n(ui_flt_hub_category) expand all (data=%p)\n", data
) );
63 gtk_tree_view_expand_all(GTK_TREE_VIEW(data
->LV_cat
));
68 static void ui_flt_hub_category_collapse_all(GtkWidget
*widget
, gpointer user_data
)
70 struct ui_flt_manage_data
*data
;
72 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
73 DB( g_print("\n(ui_flt_hub_category) collapse all (data=%p)\n", data
) );
75 gtk_tree_view_collapse_all(GTK_TREE_VIEW(data
->LV_cat
));
80 static void ui_flt_panel_category_get(struct ui_flt_manage_data
*data
)
84 DB( g_print("(ui_flt_panel_category) get\n") );
86 if(data
->filter
!=NULL
)
89 //GtkTreeSelection *selection;
90 GtkTreeIter iter
, child
;
97 DB( g_print(" category\n") );
99 model
= gtk_tree_view_get_model(GTK_TREE_VIEW(data
->LV_cat
));
100 //selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_cat));
101 i
=0; valid
= gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model
), &iter
);
106 gtk_tree_model_get (model
, &iter
,
107 LST_DEFCAT_TOGGLE
, &toggled
,
108 LST_DEFCAT_DATAS
, &catitem
,
111 //data->filter->cat[i] = gtk_tree_selection_iter_is_selected(selection, &iter);
112 //data->filter->cat[i] = toggled;
113 catitem
->flt_select
= toggled
;
115 n_child
= gtk_tree_model_iter_n_children (GTK_TREE_MODEL(model
), &iter
);
116 gtk_tree_model_iter_children (GTK_TREE_MODEL(model
), &child
, &iter
);
121 gtk_tree_model_get (model
, &child
,
122 LST_DEFCAT_TOGGLE
, &toggled
,
123 LST_DEFCAT_DATAS
, &catitem
,
127 //data->filter->cat[i] = toggled;
128 //data->filter->cat[i] = gtk_tree_selection_iter_is_selected(selection, &child);
129 catitem
->flt_select
= toggled
;
132 gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &child
);
135 /* Make iter point to the next row in the list store */
136 i
++; valid
= gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &iter
);
143 static void ui_flt_panel_category_set(struct ui_flt_manage_data
*data
)
146 DB( g_print("(ui_flt_panel_category) set\n") );
148 if(data
->filter
!= NULL
)
151 //GtkTreeSelection *selection;
152 GtkTreeIter iter
, child
;
160 DB( g_print(" category\n") );
162 model
= gtk_tree_view_get_model(GTK_TREE_VIEW(data
->LV_cat
));
163 //selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_cat));
164 i
=0; valid
= gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model
), &iter
);
169 gtk_tree_model_get (model
, &iter
,
170 LST_DEFCAT_DATAS
, &catitem
,
173 if(catitem
->flt_select
== TRUE
)
174 gtk_tree_store_set (GTK_TREE_STORE (model
), &iter
, LST_DEFCAT_TOGGLE
, TRUE
, -1);
176 n_child
= gtk_tree_model_iter_n_children (GTK_TREE_MODEL(model
), &iter
);
177 gtk_tree_model_iter_children (GTK_TREE_MODEL(model
), &child
, &iter
);
182 gtk_tree_model_get (model
, &child
,
183 LST_DEFCAT_DATAS
, &catitem
,
186 if(catitem
->flt_select
== TRUE
)
187 gtk_tree_store_set (GTK_TREE_STORE (model
), &child
, LST_DEFCAT_TOGGLE
, TRUE
, -1);
190 gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &child
);
193 /* Make iter point to the next row in the list store */
194 i
++; valid
= gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &iter
);
203 static void ui_flt_manage_cat_select(GtkWidget
*widget
, gpointer user_data
)
205 struct ui_flt_manage_data
*data
;
206 gint select
= GPOINTER_TO_INT(user_data
);
208 GtkTreeIter iter
, child
;
213 DB( g_print("(ui_flt_manage) pay select\n") );
215 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
217 model
= gtk_tree_view_get_model(GTK_TREE_VIEW(data
->LV_cat
));
218 valid
= gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model
), &iter
);
224 gtk_tree_store_set (GTK_TREE_STORE (model
), &iter
, LST_DEFCAT_TOGGLE
, TRUE
, -1);
227 gtk_tree_store_set (GTK_TREE_STORE (model
), &iter
, LST_DEFCAT_TOGGLE
, FALSE
, -1);
230 gtk_tree_model_get (model
, &iter
, LST_DEFCAT_TOGGLE
, &toggle
, -1);
232 gtk_tree_store_set (GTK_TREE_STORE (model
), &iter
, LST_DEFCAT_TOGGLE
, toggle
, -1);
236 n_child
= gtk_tree_model_iter_n_children (GTK_TREE_MODEL(model
), &iter
);
237 gtk_tree_model_iter_children (GTK_TREE_MODEL(model
), &child
, &iter
);
244 gtk_tree_store_set (GTK_TREE_STORE (model
), &child
, LST_DEFCAT_TOGGLE
, TRUE
, -1);
247 gtk_tree_store_set (GTK_TREE_STORE (model
), &child
, LST_DEFCAT_TOGGLE
, FALSE
, -1);
250 gtk_tree_model_get (model
, &child
, LST_DEFCAT_TOGGLE
, &toggle
, -1);
252 gtk_tree_store_set (GTK_TREE_STORE (model
), &child
, LST_DEFCAT_TOGGLE
, toggle
, -1);
257 gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &child
);
260 valid
= gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &iter
);
268 ui_flt_panel_category_activate_link (GtkWidget
*label
,
272 DB( g_print(" comboboxlink '%s' \n", uri
) );
274 if (g_strcmp0 (uri
, "all") == 0)
276 ui_flt_manage_cat_select(label
, GINT_TO_POINTER(BUTTON_ALL
) );
279 if (g_strcmp0 (uri
, "non") == 0)
281 ui_flt_manage_cat_select(label
, GINT_TO_POINTER(BUTTON_NONE
) );
284 if (g_strcmp0 (uri
, "inv") == 0)
286 ui_flt_manage_cat_select(label
, GINT_TO_POINTER(BUTTON_INVERT
) );
294 ui_flt_panel_category_new (struct ui_flt_manage_data
*data
)
296 GtkWidget
*hubbox
, *scrollwin
, *hbox
, *vbox
, *widget
, *label
, *tbar
;
297 GtkToolItem
*toolitem
;
299 hubbox
= gtk_box_new(GTK_ORIENTATION_VERTICAL
, SPACING_SMALL
);
301 label
= make_label (_("Categories"), 0, 0);
302 gimp_label_set_attributes (GTK_LABEL (label
), PANGO_ATTR_SCALE
, PANGO_SCALE_LARGE
, -1);
303 gtk_box_pack_start (GTK_BOX (hubbox
), label
, FALSE
, FALSE
, 0);
305 hbox
= gtk_box_new(GTK_ORIENTATION_HORIZONTAL
, SPACING_MEDIUM
);
306 gtk_box_pack_start (GTK_BOX (hubbox
), hbox
, FALSE
, FALSE
, 0);
308 label
= make_label (_("Select:"), 0, 0.5);
309 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
311 label
= make_clicklabel("all", _("All"));
312 data
->BT_cat
[BUTTON_ALL
] = label
;
313 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
314 g_signal_connect (label
, "activate-link", G_CALLBACK (ui_flt_panel_category_activate_link
), NULL
);
316 label
= make_clicklabel("non", _("None"));
317 data
->BT_cat
[BUTTON_NONE
] = label
;
318 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
319 g_signal_connect (label
, "activate-link", G_CALLBACK (ui_flt_panel_category_activate_link
), NULL
);
321 label
= make_clicklabel("inv", _("Invert"));
322 data
->BT_cat
[BUTTON_INVERT
] = label
;
323 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
324 g_signal_connect (label
, "activate-link", G_CALLBACK (ui_flt_panel_category_activate_link
), NULL
);
327 vbox
= gtk_box_new (GTK_ORIENTATION_VERTICAL
, 0);
328 gtk_box_pack_start (GTK_BOX (hubbox
), vbox
, TRUE
, TRUE
, 0);
330 scrollwin
= gtk_scrolled_window_new(NULL
,NULL
);
331 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin
), GTK_SHADOW_ETCHED_IN
);
332 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin
), GTK_POLICY_NEVER
, GTK_POLICY_AUTOMATIC
);
333 //gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(scrollwin), HB_MINHEIGHT_LIST);
334 data
->LV_cat
= (GtkWidget
*)ui_cat_listview_new(TRUE
, FALSE
);
335 gtk_container_add(GTK_CONTAINER(scrollwin
), data
->LV_cat
);
336 gtk_widget_set_hexpand (scrollwin
, TRUE
);
337 gtk_widget_set_vexpand (scrollwin
, TRUE
);
338 gtk_box_pack_start (GTK_BOX (vbox
), scrollwin
, TRUE
, TRUE
, 0);
341 tbar
= gtk_toolbar_new();
342 gtk_toolbar_set_icon_size (GTK_TOOLBAR(tbar
), GTK_ICON_SIZE_MENU
);
343 gtk_toolbar_set_style(GTK_TOOLBAR(tbar
), GTK_TOOLBAR_ICONS
);
344 gtk_style_context_add_class (gtk_widget_get_style_context (tbar
), GTK_STYLE_CLASS_INLINE_TOOLBAR
);
345 gtk_box_pack_start (GTK_BOX (vbox
), tbar
, FALSE
, FALSE
, 0);
347 toolitem
= gtk_separator_tool_item_new ();
348 gtk_tool_item_set_expand (toolitem
, TRUE
);
349 gtk_separator_tool_item_set_draw(GTK_SEPARATOR_TOOL_ITEM(toolitem
), FALSE
);
350 gtk_toolbar_insert(GTK_TOOLBAR(tbar
), GTK_TOOL_ITEM(toolitem
), -1);
352 hbox
= gtk_box_new (GTK_ORIENTATION_HORIZONTAL
, 0);
353 toolitem
= gtk_tool_item_new();
354 gtk_container_add (GTK_CONTAINER(toolitem
), hbox
);
355 gtk_toolbar_insert(GTK_TOOLBAR(tbar
), GTK_TOOL_ITEM(toolitem
), -1);
357 widget
= make_image_button(ICONNAME_HB_BUTTON_EXPAND
, _("Expand all"));
358 data
->BT_expand
= widget
;
359 gtk_box_pack_start (GTK_BOX (hbox
), widget
, FALSE
, FALSE
, 0);
361 widget
= make_image_button(ICONNAME_HB_BUTTON_COLLAPSE
, _("Collapse all"));
362 data
->BT_collapse
= widget
;
363 gtk_box_pack_start (GTK_BOX (hbox
), widget
, FALSE
, FALSE
, 0);
365 g_signal_connect (G_OBJECT (data
->BT_expand
), "clicked", G_CALLBACK (ui_flt_hub_category_expand_all
), NULL
);
366 g_signal_connect (G_OBJECT (data
->BT_collapse
), "clicked", G_CALLBACK (ui_flt_hub_category_collapse_all
), NULL
);
373 /* = = = = = = = = = = = = = = = = */
376 static void ui_flt_manage_pay_select(GtkWidget
*widget
, gpointer user_data
)
378 struct ui_flt_manage_data
*data
;
379 gint select
= GPOINTER_TO_INT(user_data
);
385 DB( g_print("(ui_flt_manage) pay select\n") );
387 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
389 model
= gtk_tree_view_get_model(GTK_TREE_VIEW(data
->LV_pay
));
390 valid
= gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model
), &iter
);
396 gtk_list_store_set (GTK_LIST_STORE (model
), &iter
, LST_DEFPAY_TOGGLE
, TRUE
, -1);
399 gtk_list_store_set (GTK_LIST_STORE (model
), &iter
, LST_DEFPAY_TOGGLE
, FALSE
, -1);
402 gtk_tree_model_get (model
, &iter
, LST_DEFPAY_TOGGLE
, &toggle
, -1);
404 gtk_list_store_set (GTK_LIST_STORE (model
), &iter
, LST_DEFPAY_TOGGLE
, toggle
, -1);
407 valid
= gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &iter
);
414 ui_flt_panel_payee_activate_link (GtkWidget
*label
,
418 DB( g_print(" comboboxlink '%s' \n", uri
) );
420 if (g_strcmp0 (uri
, "all") == 0)
422 ui_flt_manage_pay_select(label
, GINT_TO_POINTER(BUTTON_ALL
) );
425 if (g_strcmp0 (uri
, "non") == 0)
427 ui_flt_manage_pay_select(label
, GINT_TO_POINTER(BUTTON_NONE
) );
430 if (g_strcmp0 (uri
, "inv") == 0)
432 ui_flt_manage_pay_select(label
, GINT_TO_POINTER(BUTTON_INVERT
) );
440 ui_flt_panel_payee_new (struct ui_flt_manage_data
*data
)
442 GtkWidget
*scrollwin
, *hbox
, *vbox
, *label
;
444 vbox
= gtk_box_new(GTK_ORIENTATION_VERTICAL
, SPACING_SMALL
);
446 label
= make_label (_("Payees"), 0, 0);
447 gimp_label_set_attributes (GTK_LABEL (label
), PANGO_ATTR_SCALE
, PANGO_SCALE_LARGE
, -1);
448 gtk_box_pack_start (GTK_BOX (vbox
), label
, FALSE
, FALSE
, 0);
450 hbox
= gtk_box_new(GTK_ORIENTATION_HORIZONTAL
, SPACING_MEDIUM
);
451 gtk_box_pack_start (GTK_BOX (vbox
), hbox
, FALSE
, FALSE
, 0);
453 label
= make_label (_("Select:"), 0, 0.5);
454 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
456 label
= make_clicklabel("all", _("All"));
457 data
->BT_pay
[BUTTON_ALL
] = label
;
458 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
459 g_signal_connect (label
, "activate-link", G_CALLBACK (ui_flt_panel_payee_activate_link
), NULL
);
461 label
= make_clicklabel("non", _("None"));
462 data
->BT_pay
[BUTTON_NONE
] = label
;
463 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
464 g_signal_connect (label
, "activate-link", G_CALLBACK (ui_flt_panel_payee_activate_link
), NULL
);
466 label
= make_clicklabel("inv", _("Invert"));
467 data
->BT_pay
[BUTTON_INVERT
] = label
;
468 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
469 g_signal_connect (label
, "activate-link", G_CALLBACK (ui_flt_panel_payee_activate_link
), NULL
);
471 scrollwin
= gtk_scrolled_window_new(NULL
,NULL
);
472 gtk_box_pack_start (GTK_BOX (vbox
), scrollwin
, TRUE
, TRUE
, 0);
474 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin
), GTK_POLICY_NEVER
, GTK_POLICY_AUTOMATIC
);
475 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin
), GTK_SHADOW_ETCHED_IN
);
476 //gtk_container_set_border_width (GTK_CONTAINER(scrollwin), SPACING_SMALL);
478 data
->LV_pay
= (GtkWidget
*)ui_pay_listview_new(TRUE
, FALSE
);
479 gtk_container_add(GTK_CONTAINER(scrollwin
), data
->LV_pay
);
490 /* = = = = = = = = = = = = = = = = */
492 static void ui_flt_manage_acc_select(GtkWidget
*widget
, gpointer user_data
)
494 struct ui_flt_manage_data
*data
;
495 gint select
= GPOINTER_TO_INT(user_data
);
501 DB( g_print("(ui_flt_manage) acc select\n") );
503 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
505 model
= gtk_tree_view_get_model(GTK_TREE_VIEW(data
->LV_acc
));
506 valid
= gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model
), &iter
);
512 gtk_list_store_set (GTK_LIST_STORE (model
), &iter
, LST_DEFACC_TOGGLE
, TRUE
, -1);
515 gtk_list_store_set (GTK_LIST_STORE (model
), &iter
, LST_DEFACC_TOGGLE
, FALSE
, -1);
518 gtk_tree_model_get (model
, &iter
, LST_DEFACC_TOGGLE
, &toggle
, -1);
520 gtk_list_store_set (GTK_LIST_STORE (model
), &iter
, LST_DEFACC_TOGGLE
, toggle
, -1);
523 valid
= gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &iter
);
529 ui_flt_panel_account_activate_link (GtkWidget
*label
,
533 DB( g_print(" comboboxlink '%s' \n", uri
) );
535 if (g_strcmp0 (uri
, "all") == 0)
537 ui_flt_manage_acc_select(label
, GINT_TO_POINTER(BUTTON_ALL
) );
540 if (g_strcmp0 (uri
, "non") == 0)
542 ui_flt_manage_acc_select(label
, GINT_TO_POINTER(BUTTON_NONE
) );
545 if (g_strcmp0 (uri
, "inv") == 0)
547 ui_flt_manage_acc_select(label
, GINT_TO_POINTER(BUTTON_INVERT
) );
554 ui_flt_panel_account_new (struct ui_flt_manage_data
*data
)
556 GtkWidget
*scrollwin
, *hbox
, *vbox
, *label
;
558 vbox
= gtk_box_new(GTK_ORIENTATION_VERTICAL
, SPACING_SMALL
);
560 label
= make_label (_("Accounts"), 0, 0);
561 gimp_label_set_attributes (GTK_LABEL (label
), PANGO_ATTR_SCALE
, PANGO_SCALE_LARGE
, -1);
562 gtk_box_pack_start (GTK_BOX (vbox
), label
, FALSE
, FALSE
, 0);
564 hbox
= gtk_box_new(GTK_ORIENTATION_HORIZONTAL
, SPACING_MEDIUM
);
565 gtk_box_pack_start (GTK_BOX (vbox
), hbox
, FALSE
, FALSE
, 0);
567 label
= make_label (_("Select:"), 0, 0.5);
568 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
570 label
= make_clicklabel("all", _("All"));
571 data
->BT_acc
[BUTTON_ALL
] = label
;
572 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
573 g_signal_connect (label
, "activate-link", G_CALLBACK (ui_flt_panel_account_activate_link
), NULL
);
575 label
= make_clicklabel("non", _("None"));
576 data
->BT_acc
[BUTTON_NONE
] = label
;
577 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
578 g_signal_connect (label
, "activate-link", G_CALLBACK (ui_flt_panel_account_activate_link
), NULL
);
580 label
= make_clicklabel("inv", _("Invert"));
581 data
->BT_acc
[BUTTON_INVERT
] = label
;
582 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
583 g_signal_connect (label
, "activate-link", G_CALLBACK (ui_flt_panel_account_activate_link
), NULL
);
585 scrollwin
= gtk_scrolled_window_new(NULL
,NULL
);
586 gtk_box_pack_start (GTK_BOX (vbox
), scrollwin
, TRUE
, TRUE
, 0);
588 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin
), GTK_POLICY_NEVER
, GTK_POLICY_AUTOMATIC
);
589 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin
), GTK_SHADOW_ETCHED_IN
);
590 //gtk_container_set_border_width (GTK_CONTAINER(scrollwin), SPACING_SMALL);
592 data
->LV_acc
= (GtkWidget
*)ui_acc_listview_new(TRUE
);
593 gtk_container_add(GTK_CONTAINER(scrollwin
), data
->LV_acc
);
598 /* = = = = = = = = = = = = = = = = */
609 static void ui_flt_manage_option_update(GtkWidget
*widget
, gpointer user_data
)
611 struct ui_flt_manage_data
*data
;
615 DB( g_print("(ui_flt_manage) update\n") );
617 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
620 active
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->CY_option
[FILTER_STATUS
]));
621 sensitive
= active
== 0 ? FALSE
: TRUE
;
622 gtk_widget_set_sensitive(data
->CM_reconciled
, sensitive
);
623 gtk_widget_set_sensitive(data
->CM_cleared
, sensitive
);
626 active
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->CY_option
[FILTER_DATE
]));
627 sensitive
= active
== 0 ? FALSE
: TRUE
;
628 gtk_widget_set_sensitive(data
->PO_mindate
, sensitive
);
629 gtk_widget_set_sensitive(data
->PO_maxdate
, sensitive
);
630 gtk_widget_set_sensitive(data
->CY_month
, sensitive
);
631 gtk_widget_set_sensitive(data
->NB_year
, sensitive
);
634 active
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->CY_option
[FILTER_AMOUNT
]));
635 sensitive
= active
== 0 ? FALSE
: TRUE
;
636 gtk_widget_set_sensitive(data
->ST_minamount
, sensitive
);
637 gtk_widget_set_sensitive(data
->ST_maxamount
, sensitive
);
640 active
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->CY_option
[FILTER_TEXT
]));
641 sensitive
= active
== 0 ? FALSE
: TRUE
;
642 gtk_widget_set_sensitive(data
->CM_exact
, sensitive
);
643 gtk_widget_set_sensitive(data
->ST_memo
, sensitive
);
644 gtk_widget_set_sensitive(data
->ST_info
, sensitive
);
645 gtk_widget_set_sensitive(data
->ST_tag
, sensitive
);
648 active
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->CY_option
[FILTER_PAYMODE
]));
649 sensitive
= active
== 0 ? FALSE
: TRUE
;
650 for(i
=0;i
<NUM_PAYMODE_MAX
;i
++)
652 gtk_widget_set_sensitive(data
->CM_paymode
[i
], sensitive
);
656 if(data
->show_account
== TRUE
)
658 active
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->CY_option
[FILTER_ACCOUNT
]));
659 sensitive
= active
== 0 ? FALSE
: TRUE
;
660 gtk_widget_set_sensitive(data
->LV_acc
, sensitive
);
661 for(i
=0;i
<MAX_BUTTON
;i
++)
663 gtk_widget_set_sensitive(data
->BT_acc
[i
], sensitive
);
670 active
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->CY_option
[FILTER_PAYEE
]));
671 sensitive
= active
== 0 ? FALSE
: TRUE
;
672 gtk_widget_set_sensitive(data
->LV_pay
, sensitive
);
673 for(i
=0;i
<MAX_BUTTON
;i
++)
675 gtk_widget_set_sensitive(data
->BT_pay
[i
], sensitive
);
679 active
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->CY_option
[FILTER_CATEGORY
]));
680 sensitive
= active
== 0 ? FALSE
: TRUE
;
681 gtk_widget_set_sensitive(data
->LV_cat
, sensitive
);
682 for(i
=0;i
<MAX_BUTTON
;i
++)
684 gtk_widget_set_sensitive(data
->BT_cat
[i
], sensitive
);
695 static void ui_flt_manage_get(struct ui_flt_manage_data
*data
)
700 DB( g_print("(ui_flt_manage) get\n") );
702 if(data
->filter
!=NULL
)
705 //GtkTreeSelection *selection;
711 for(i
=0;i
<FILTER_MAX
;i
++)
713 if(data
->show_account
== FALSE
&& i
== FILTER_ACCOUNT
)
716 data
->filter
->option
[i
] = gtk_combo_box_get_active(GTK_COMBO_BOX(data
->CY_option
[i
]));
720 DB( g_print(" date\n") );
721 data
->filter
->mindate
= gtk_date_entry_get_date(GTK_DATE_ENTRY(data
->PO_mindate
));
722 data
->filter
->maxdate
= gtk_date_entry_get_date(GTK_DATE_ENTRY(data
->PO_maxdate
));
725 DB( g_print(" status\n") );
726 data
->filter
->reconciled
= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->CM_reconciled
));
727 data
->filter
->cleared
= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->CM_cleared
));
729 data
->filter
->forceadd
= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->CM_forceadd
));
730 data
->filter
->forcechg
= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->CM_forcechg
));
731 data
->filter
->forceremind
= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->CM_forceremind
));
734 DB( g_print(" paymode\n") );
735 for(i
=0;i
<NUM_PAYMODE_MAX
;i
++)
736 data
->filter
->paymode
[i
] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->CM_paymode
[i
]));
739 data
->filter
->minamount
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->ST_minamount
));
740 data
->filter
->maxamount
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->ST_maxamount
));
743 data
->filter
->exact
= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->CM_exact
));
744 //free any previous string
745 if( data
->filter
->memo
)
747 g_free(data
->filter
->memo
);
748 data
->filter
->memo
= NULL
;
750 txt
= (gchar
*)gtk_entry_get_text(GTK_ENTRY(data
->ST_memo
));
752 if (txt
&& *txt
) // ignore if entry is empty
754 data
->filter
->memo
= g_strdup(txt
);
758 //free any previous string
759 if( data
->filter
->info
)
761 g_free(data
->filter
->info
);
762 data
->filter
->info
= NULL
;
764 txt
= (gchar
*)gtk_entry_get_text(GTK_ENTRY(data
->ST_info
));
765 // ignore if entry is empty
768 data
->filter
->info
= g_strdup(txt
);
772 //free any previous string
773 if( data
->filter
->tag
)
775 g_free(data
->filter
->tag
);
776 data
->filter
->tag
= NULL
;
778 txt
= (gchar
*)gtk_entry_get_text(GTK_ENTRY(data
->ST_tag
));
779 // ignore if entry is empty
782 data
->filter
->tag
= g_strdup(txt
);
787 if(data
->show_account
== TRUE
)
789 DB( g_print(" account\n") );
791 model
= gtk_tree_view_get_model(GTK_TREE_VIEW(data
->LV_acc
));
792 //selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_acc));
793 i
=0; valid
= gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model
), &iter
);
798 gtk_tree_model_get (model
, &iter
,
799 LST_DEFACC_TOGGLE
, &toggled
,
800 LST_DEFACC_DATAS
, &accitem
,
803 //data->filter->acc[i] = gtk_tree_selection_iter_is_selected(selection, &iter);
804 accitem
->flt_select
= toggled
;
806 /* Make iter point to the next row in the list store */
807 i
++; valid
= gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &iter
);
812 DB( g_print(" payee\n") );
814 model
= gtk_tree_view_get_model(GTK_TREE_VIEW(data
->LV_pay
));
815 //selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_pay));
816 i
=0; valid
= gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model
), &iter
);
821 gtk_tree_model_get (model
, &iter
,
822 LST_DEFPAY_TOGGLE
, &toggled
,
823 LST_DEFPAY_DATAS
, &payitem
,
826 //data->filter->pay[i] = gtk_tree_selection_iter_is_selected(selection, &iter);
827 payitem
->flt_select
= toggled
;
829 /* Make iter point to the next row in the list store */
830 i
++; valid
= gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &iter
);
834 DB( g_print(" category\n") );
836 ui_flt_panel_category_get(data
);
839 g_strlcpy(data
->filter
->last_tab
, gtk_stack_get_visible_child_name(GTK_STACK(data
->stack
)), 8);
840 DB( g_print(" page is '%s'\n", data
->filter
->last_tab
) );
850 static void ui_flt_manage_set(struct ui_flt_manage_data
*data
)
853 DB( g_print("(ui_flt_manage) set\n") );
855 if(data
->filter
!= NULL
)
858 //GtkTreeSelection *selection;
865 DB( g_print(" options\n") );
867 for(i
=0;i
<FILTER_MAX
;i
++)
869 if(data
->show_account
== FALSE
&& i
== FILTER_ACCOUNT
)
872 gtk_combo_box_set_active(GTK_COMBO_BOX(data
->CY_option
[i
]), data
->filter
->option
[i
]);
875 //DB( g_print(" setdate %d to %x\n", data->filter->mindate, data->PO_mindate) );
876 //DB( g_print(" setdate %d to %x\n", 0, data->PO_mindate) );
878 DB( g_print(" date\n") );
879 gtk_date_entry_set_date(GTK_DATE_ENTRY(data
->PO_mindate
), data
->filter
->mindate
);
880 gtk_date_entry_set_date(GTK_DATE_ENTRY(data
->PO_maxdate
), data
->filter
->maxdate
);
881 date
= g_date_new_julian(data
->filter
->maxdate
);
882 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data
->NB_year
), g_date_get_year(date
));
886 DB( g_print(" status\n") );
887 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data
->CM_reconciled
), data
->filter
->reconciled
);
890 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data
->CM_forceadd
), data
->filter
->forceadd
);
891 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data
->CM_forcechg
), data
->filter
->forcechg
);
892 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data
->CM_forceremind
), data
->filter
->forceremind
);
895 DB( g_print(" paymode\n") );
897 for(i
=0;i
<NUM_PAYMODE_MAX
;i
++)
898 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data
->CM_paymode
[i
]), data
->filter
->paymode
[i
]);
901 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data
->ST_minamount
), data
->filter
->minamount
);
902 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data
->ST_maxamount
), data
->filter
->maxamount
);
905 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data
->CM_exact
), data
->filter
->exact
);
906 gtk_entry_set_text(GTK_ENTRY(data
->ST_info
), (data
->filter
->info
!= NULL
) ? data
->filter
->info
: "");
907 gtk_entry_set_text(GTK_ENTRY(data
->ST_memo
), (data
->filter
->memo
!= NULL
) ? data
->filter
->memo
: "");
908 gtk_entry_set_text(GTK_ENTRY(data
->ST_tag
), (data
->filter
->tag
!= NULL
) ? data
->filter
->tag
: "");
911 if(data
->show_account
== TRUE
)
913 DB( g_print(" account\n") );
915 model
= gtk_tree_view_get_model(GTK_TREE_VIEW(data
->LV_acc
));
916 //selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_acc));
917 i
=0; valid
= gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model
), &iter
);
922 gtk_tree_model_get (model
, &iter
,
923 LST_DEFACC_DATAS
, &accitem
,
926 if(accitem
->flt_select
== TRUE
)
927 //gtk_tree_selection_select_iter(selection, &iter);
928 gtk_list_store_set (GTK_LIST_STORE (model
), &iter
,
929 LST_DEFACC_TOGGLE
, TRUE
, -1);
931 /* Make iter point to the next row in the list store */
932 i
++; valid
= gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &iter
);
937 DB( g_print(" payee\n") );
939 model
= gtk_tree_view_get_model(GTK_TREE_VIEW(data
->LV_pay
));
940 //selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_pay));
941 i
=0; valid
= gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model
), &iter
);
946 gtk_tree_model_get (model
, &iter
,
947 LST_DEFPAY_DATAS
, &payitem
,
950 if(payitem
->flt_select
== TRUE
)
951 gtk_list_store_set (GTK_LIST_STORE (model
), &iter
, LST_DEFPAY_TOGGLE
, TRUE
, -1);
953 /* Make iter point to the next row in the list store */
954 i
++; valid
= gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &iter
);
958 DB( g_print(" category\n") );
960 ui_flt_panel_category_set(data
);
969 static void ui_flt_manage_clear(GtkWidget
*widget
, gpointer user_data
)
971 struct ui_flt_manage_data
*data
;
973 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(GTK_WIDGET(widget
), GTK_TYPE_WINDOW
)), "inst_data");
975 DB( g_print("(ui_flt_manage) clear\n") );
977 filter_reset(data
->filter
);
979 ui_flt_manage_set(data
);
987 static void ui_flt_manage_setup(struct ui_flt_manage_data
*data
)
990 DB( g_print("(ui_flt_manage) setup\n") );
992 if(data
->show_account
== TRUE
&& data
->LV_acc
!= NULL
)
994 //gtk_tree_selection_set_mode(GTK_TREE_SELECTION(gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_acc))), GTK_SELECTION_MULTIPLE);
996 ui_acc_listview_populate(data
->LV_acc
, ACC_LST_INSERT_REPORT
);
997 //populate_view_acc(data->LV_acc, GLOBALS->acc_list, FALSE);
1002 //gtk_tree_selection_set_mode(GTK_TREE_SELECTION(gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_pay))), GTK_SELECTION_MULTIPLE);
1004 ui_pay_listview_populate(data
->LV_pay
, NULL
);
1005 //populate_view_pay(data->LV_pay, GLOBALS->pay_list, FALSE);
1010 //gtk_tree_selection_set_mode(GTK_TREE_SELECTION(gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_cat))), GTK_SELECTION_MULTIPLE);
1012 //populate_view_cat(data->LV_cat, GLOBALS->cat_list, FALSE);
1013 ui_cat_listview_populate(data
->LV_cat
, CAT_TYPE_ALL
);
1014 gtk_tree_view_expand_all (GTK_TREE_VIEW(data
->LV_cat
));
1023 static GtkWidget
*ui_flt_manage_page_category (struct ui_flt_manage_data
*data
)
1025 GtkWidget
*container
, *panel
, *hbox
, *label
;
1027 container
= gtk_box_new(GTK_ORIENTATION_VERTICAL
, SPACING_SMALL
);
1028 gtk_container_set_border_width (GTK_CONTAINER (container
), SPACING_MEDIUM
);
1030 hbox
= gtk_box_new(GTK_ORIENTATION_HORIZONTAL
, SPACING_SMALL
);
1031 gtk_box_pack_start (GTK_BOX (container
), hbox
, FALSE
, FALSE
, 0);
1033 label
= make_label_widget(_("_Option:"));
1034 gtk_box_pack_start (GTK_BOX (hbox
), label
, TRUE
, TRUE
, 0);
1035 data
->CY_option
[FILTER_CATEGORY
] = make_nainex(label
);
1036 gtk_box_pack_start (GTK_BOX (hbox
), data
->CY_option
[FILTER_CATEGORY
], TRUE
, TRUE
, 0);
1038 panel
= ui_flt_panel_category_new(data
);
1039 gtk_box_pack_start (GTK_BOX (container
), panel
, TRUE
, TRUE
, 0);
1045 static GtkWidget
*ui_flt_manage_page_payee (struct ui_flt_manage_data
*data
)
1047 GtkWidget
*container
, *panel
, *hbox
, *label
;
1049 container
= gtk_box_new(GTK_ORIENTATION_VERTICAL
, SPACING_SMALL
);
1050 gtk_container_set_border_width (GTK_CONTAINER (container
), SPACING_MEDIUM
);
1052 hbox
= gtk_box_new(GTK_ORIENTATION_HORIZONTAL
, SPACING_SMALL
);
1053 gtk_box_pack_start (GTK_BOX (container
), hbox
, FALSE
, FALSE
, 0);
1055 label
= make_label_widget(_("_Option:"));
1056 gtk_box_pack_start (GTK_BOX (hbox
), label
, TRUE
, TRUE
, 0);
1057 data
->CY_option
[FILTER_PAYEE
] = make_nainex(label
);
1058 gtk_box_pack_start (GTK_BOX (hbox
), data
->CY_option
[FILTER_PAYEE
], TRUE
, TRUE
, 0);
1060 panel
= ui_flt_panel_payee_new(data
);
1061 gtk_box_pack_start (GTK_BOX (container
), panel
, TRUE
, TRUE
, 0);
1069 static GtkWidget
*ui_flt_manage_page_account (struct ui_flt_manage_data
*data
)
1071 GtkWidget
*container
, *panel
, *hbox
, *label
;
1073 container
= gtk_box_new(GTK_ORIENTATION_VERTICAL
, SPACING_SMALL
);
1074 gtk_container_set_border_width (GTK_CONTAINER (container
), SPACING_MEDIUM
);
1076 hbox
= gtk_box_new(GTK_ORIENTATION_HORIZONTAL
, SPACING_SMALL
);
1077 gtk_box_pack_start (GTK_BOX (container
), hbox
, FALSE
, FALSE
, 0);
1079 label
= make_label_widget(_("_Option:"));
1080 gtk_box_pack_start (GTK_BOX (hbox
), label
, TRUE
, TRUE
, 0);
1081 data
->CY_option
[FILTER_ACCOUNT
] = make_nainex(label
);
1082 gtk_box_pack_start (GTK_BOX (hbox
), data
->CY_option
[FILTER_ACCOUNT
], TRUE
, TRUE
, 0);
1084 panel
= ui_flt_panel_account_new(data
);
1085 gtk_box_pack_start (GTK_BOX (container
), panel
, TRUE
, TRUE
, 0);
1091 static void get_period_minmax(guint month
, guint year
, guint32
*mindate
, guint32
*maxdate
)
1095 date
= g_date_new();
1098 // mindate is month 1, year :: maxdate is last day of month, year
1099 g_date_set_dmy(date
, 1, month
, year
);
1100 *mindate
= g_date_get_julian(date
);
1101 g_date_add_days(date
, g_date_get_days_in_month(month
, year
));
1102 *maxdate
= g_date_get_julian(date
)-1;
1106 g_date_set_dmy(date
, 1, 1, year
);
1107 *mindate
= g_date_get_julian(date
);
1108 g_date_set_dmy(date
, 31, 12, year
);
1109 *maxdate
= g_date_get_julian(date
);
1116 static void ui_flt_manage_period_change(GtkWidget
*widget
, gpointer user_data
)
1118 struct ui_flt_manage_data
*data
;
1121 DB( g_print("(ui_flt_manage) period change\n") );
1123 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
1126 month
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->CY_month
));
1127 year
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->NB_year
));
1129 DB( g_print(" month=%d, year=%d\n", month
, year
) );
1133 get_period_minmax(month
-1, year
, &data
->filter
->mindate
, &data
->filter
->maxdate
);
1135 get_period_minmax(0, year
, &data
->filter
->mindate
, &data
->filter
->maxdate
);
1137 gtk_date_entry_set_date(GTK_DATE_ENTRY(data
->PO_mindate
), data
->filter
->mindate
);
1138 gtk_date_entry_set_date(GTK_DATE_ENTRY(data
->PO_maxdate
), data
->filter
->maxdate
);
1142 static GtkWidget
*ui_flt_manage_part_date(struct ui_flt_manage_data
*data
)
1144 GtkWidget
*table
, *label
;
1147 table
= gtk_grid_new ();
1148 gtk_grid_set_row_spacing (GTK_GRID (table
), SPACING_SMALL
);
1149 gtk_grid_set_column_spacing (GTK_GRID (table
), SPACING_MEDIUM
);
1150 gtk_container_set_border_width(GTK_CONTAINER(table
), SPACING_MEDIUM
);
1153 label
= make_label_widget(_("_Option:"));
1154 //----------------------------------------- l, r, t, b
1155 gtk_grid_attach (GTK_GRID (table
), label
, 1, row
, 1, 1);
1156 data
->CY_option
[FILTER_DATE
] = make_nainex(label
);
1157 gtk_grid_attach (GTK_GRID (table
), data
->CY_option
[FILTER_DATE
], 2, row
, 1, 1);
1160 label
= make_label (_("Dates"), 0, 0);
1161 gimp_label_set_attributes (GTK_LABEL (label
), PANGO_ATTR_SCALE
, PANGO_SCALE_LARGE
, -1);
1162 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 3, 1);
1165 label
= make_label_widget(_("_From:"));
1166 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 1, 1);
1167 data
->PO_mindate
= gtk_date_entry_new();
1168 gtk_grid_attach (GTK_GRID (table
), data
->PO_mindate
, 1, row
, 2, 1);
1171 label
= make_label_widget(_("_To:"));
1172 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 1, 1);
1173 data
->PO_maxdate
= gtk_date_entry_new();
1174 gtk_grid_attach (GTK_GRID (table
), data
->PO_maxdate
, 1, row
, 2, 1);
1177 label
= make_label_widget(_("_Month:"));
1178 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 1, 1);
1179 data
->CY_month
= make_cycle(label
, CYA_SELECT
);
1180 gtk_grid_attach (GTK_GRID (table
), data
->CY_month
, 1, row
, 2, 1);
1183 label
= make_label_widget(_("_Year:"));
1184 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 1, 1);
1185 data
->NB_year
= make_year(label
);
1186 gtk_grid_attach (GTK_GRID (table
), data
->NB_year
, 1, row
, 2, 1);
1192 static GtkWidget
*ui_flt_manage_part_text(struct ui_flt_manage_data
*data
)
1194 GtkWidget
*table
, *label
;
1197 table
= gtk_grid_new ();
1198 gtk_grid_set_row_spacing (GTK_GRID (table
), SPACING_SMALL
);
1199 gtk_grid_set_column_spacing (GTK_GRID (table
), SPACING_MEDIUM
);
1200 gtk_container_set_border_width(GTK_CONTAINER(table
), SPACING_MEDIUM
);
1203 label
= make_label_widget(_("_Option:"));
1204 //----------------------------------------- l, r, t, b
1205 gtk_grid_attach (GTK_GRID (table
), label
, 1, row
, 1, 1);
1206 data
->CY_option
[FILTER_TEXT
] = make_nainex(label
);
1207 gtk_grid_attach (GTK_GRID (table
), data
->CY_option
[FILTER_TEXT
], 2, row
, 1, 1);
1210 label
= make_label (_("Texts"), 0, 0);
1211 gimp_label_set_attributes (GTK_LABEL (label
), PANGO_ATTR_SCALE
, PANGO_SCALE_LARGE
, -1);
1212 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 3, 1);
1215 label
= make_label_widget(_("_Memo:"));
1216 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 1, 1);
1217 data
->ST_memo
= make_string(label
);
1218 gtk_widget_set_hexpand (data
->ST_memo
, TRUE
);
1219 gtk_grid_attach (GTK_GRID (table
), data
->ST_memo
, 1, row
, 2, 1);
1222 label
= make_label_widget(_("_Info:"));
1223 //----------------------------------------- l, r, t, b
1224 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 1, 1);
1225 data
->ST_info
= make_string(label
);
1226 gtk_widget_set_hexpand (data
->ST_info
, TRUE
);
1227 gtk_grid_attach (GTK_GRID (table
), data
->ST_info
, 1, row
, 2, 1);
1230 label
= make_label_widget(_("_Tag:"));
1231 //----------------------------------------- l, r, t, b
1232 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 1, 1);
1233 data
->ST_tag
= make_string(label
);
1234 gtk_widget_set_hexpand (data
->ST_tag
, TRUE
);
1235 gtk_grid_attach (GTK_GRID (table
), data
->ST_tag
, 1, row
, 2, 1);
1238 data
->CM_exact
= gtk_check_button_new_with_mnemonic (_("Case _sensitive"));
1239 gtk_grid_attach (GTK_GRID (table
), data
->CM_exact
, 1, row
, 2, 1);
1245 static GtkWidget
*ui_flt_manage_part_amount(struct ui_flt_manage_data
*data
)
1247 GtkWidget
*table
, *label
;
1250 table
= gtk_grid_new ();
1251 gtk_grid_set_row_spacing (GTK_GRID (table
), SPACING_SMALL
);
1252 gtk_grid_set_column_spacing (GTK_GRID (table
), SPACING_MEDIUM
);
1253 gtk_container_set_border_width(GTK_CONTAINER(table
), SPACING_MEDIUM
);
1256 label
= make_label_widget(_("_Option:"));
1257 //----------------------------------------- l, r, t, b
1258 gtk_grid_attach (GTK_GRID (table
), label
, 1, row
, 1, 1);
1259 data
->CY_option
[FILTER_AMOUNT
] = make_nainex(label
);
1260 gtk_grid_attach (GTK_GRID (table
), data
->CY_option
[FILTER_AMOUNT
], 2, row
, 1, 1);
1263 label
= make_label (_("Amounts"), 0, 0);
1264 gimp_label_set_attributes (GTK_LABEL (label
), PANGO_ATTR_SCALE
, PANGO_SCALE_LARGE
, -1);
1265 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 3, 1);
1268 label
= make_label_widget(_("_From:"));
1269 //----------------------------------------- l, r, t, b
1270 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 1, 1);
1271 data
->ST_minamount
= make_amount(label
);
1272 gtk_grid_attach (GTK_GRID (table
), data
->ST_minamount
, 1, row
, 2, 1);
1275 label
= make_label_widget(_("_To:"));
1276 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 1, 1);
1277 data
->ST_maxamount
= make_amount(label
);
1278 gtk_grid_attach (GTK_GRID (table
), data
->ST_maxamount
, 1, row
, 2, 1);
1284 static GtkWidget
*ui_flt_manage_part_status(struct ui_flt_manage_data
*data
)
1286 GtkWidget
*table
, *label
, *vbox
, *widget
;
1289 table
= gtk_grid_new ();
1290 gtk_grid_set_row_spacing (GTK_GRID (table
), SPACING_SMALL
);
1291 gtk_grid_set_column_spacing (GTK_GRID (table
), SPACING_MEDIUM
);
1292 gtk_container_set_border_width(GTK_CONTAINER(table
), SPACING_MEDIUM
);
1295 label
= make_label_widget(_("_Option:"));
1296 //----------------------------------------- l, r, t, b
1297 gtk_grid_attach (GTK_GRID (table
), label
, 1, row
, 1, 1);
1298 data
->CY_option
[FILTER_STATUS
] = make_nainex(label
);
1299 gtk_grid_attach (GTK_GRID (table
), data
->CY_option
[FILTER_STATUS
], 2, row
, 1, 1);
1302 label
= make_label (_("Statuses"), 0, 0);
1303 gimp_label_set_attributes (GTK_LABEL (label
), PANGO_ATTR_SCALE
, PANGO_SCALE_LARGE
, -1);
1304 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 3, 1);
1308 vbox
= gtk_box_new (GTK_ORIENTATION_VERTICAL
, 0);
1309 gtk_grid_attach (GTK_GRID (table
), vbox
, 2, row
, 1, 1);
1311 widget
= gtk_check_button_new_with_mnemonic (_("reconciled"));
1312 data
->CM_reconciled
= widget
;
1313 gtk_box_pack_start (GTK_BOX (vbox
), widget
, TRUE
, TRUE
, 0);
1315 widget
= gtk_check_button_new_with_mnemonic (_("cleared"));
1316 data
->CM_cleared
= widget
;
1317 gtk_box_pack_start (GTK_BOX (vbox
), widget
, TRUE
, TRUE
, 0);
1320 label
= make_label_widget(_("Force:"));
1321 data
->LB_force
= label
;
1322 gtk_grid_attach (GTK_GRID (table
), label
, 1, row
, 1, 1);
1324 vbox
= gtk_box_new (GTK_ORIENTATION_VERTICAL
, 0);
1325 data
->GR_force
= vbox
;
1326 gtk_grid_attach (GTK_GRID (table
), vbox
, 2, row
, 1, 1);
1328 widget
= gtk_check_button_new_with_mnemonic (_("display 'Added'"));
1329 data
->CM_forceadd
= widget
;
1330 gtk_box_pack_start (GTK_BOX (vbox
), widget
, TRUE
, TRUE
, 0);
1332 widget
= gtk_check_button_new_with_mnemonic (_("display 'Edited'"));
1333 data
->CM_forcechg
= widget
;
1334 gtk_box_pack_start (GTK_BOX (vbox
), widget
, TRUE
, TRUE
, 0);
1336 widget
= gtk_check_button_new_with_mnemonic (_("display 'Remind'"));
1337 data
->CM_forceremind
= widget
;
1338 gtk_box_pack_start (GTK_BOX (vbox
), widget
, TRUE
, TRUE
, 0);
1344 static GtkWidget
*ui_flt_manage_part_paymode(struct ui_flt_manage_data
*data
)
1346 GtkWidget
*table
, *label
, *table1
, *image
;
1349 table
= gtk_grid_new ();
1350 gtk_grid_set_row_spacing (GTK_GRID (table
), SPACING_SMALL
);
1351 gtk_grid_set_column_spacing (GTK_GRID (table
), SPACING_MEDIUM
);
1352 gtk_container_set_border_width(GTK_CONTAINER(table
), SPACING_MEDIUM
);
1355 label
= make_label_widget(_("_Option:"));
1356 //----------------------------------------- l, r, t, b
1357 gtk_grid_attach (GTK_GRID (table
), label
, 1, row
, 1, 1);
1358 data
->CY_option
[FILTER_PAYMODE
] = make_nainex(label
);
1359 gtk_grid_attach (GTK_GRID (table
), data
->CY_option
[FILTER_PAYMODE
], 2, row
, 1, 1);
1362 label
= make_label (_("Payments"), 0, 0);
1363 gimp_label_set_attributes (GTK_LABEL (label
), PANGO_ATTR_SCALE
, PANGO_SCALE_LARGE
, -1);
1364 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 3, 1);
1367 table1
= gtk_grid_new ();
1368 gtk_grid_set_row_spacing (GTK_GRID (table1
), SPACING_SMALL
);
1369 gtk_grid_set_column_spacing (GTK_GRID (table1
), SPACING_SMALL
);
1370 gtk_grid_attach (GTK_GRID (table
), table1
, 1, row
, 2, 1);
1372 for(i
=0;i
<NUM_PAYMODE_MAX
;i
++)
1376 image
= gtk_image_new_from_icon_name( get_paymode_icon_name(i
), GTK_ICON_SIZE_MENU
);
1377 gtk_grid_attach (GTK_GRID (table1
), image
, 0, row
, 1, 1);
1379 data
->CM_paymode
[i
] = gtk_check_button_new_with_mnemonic(_(paymode_label_names
[i
]));
1380 gtk_grid_attach (GTK_GRID (table1
), data
->CM_paymode
[i
], 1, row
, 1, 1);
1390 gint
ui_flt_manage_dialog_new(GtkWindow
*parentwindow
, Filter
*filter
, gboolean show_account
, gboolean txnmode
)
1392 struct ui_flt_manage_data data
;
1393 GtkWidget
*window
, *content
, *mainbox
, *box
, *sidebar
, *stack
, *page
;
1396 //data = g_malloc0(sizeof(struct ui_flt_manage_data));
1397 //if(!data) return NULL;
1398 memset(&data
, 0, sizeof(struct ui_flt_manage_data
));
1400 data
.filter
= filter
;
1402 window
= gtk_dialog_new_with_buttons (_("Edit filter"),
1403 GTK_WINDOW (parentwindow
),
1408 GTK_RESPONSE_REJECT
,
1410 GTK_RESPONSE_ACCEPT
,
1413 gtk_window_set_icon_name(GTK_WINDOW (window
), ICONNAME_HB_FILTER
);
1415 //set a nice dialog size
1416 //gtk_window_get_size(GTK_WINDOW(parentwindow), &w, &h);
1417 //gtk_window_set_default_size (GTK_WINDOW(window), -1, 0.8*h);
1420 //store our window private data
1421 g_object_set_data(G_OBJECT(window
), "inst_data", (gpointer
)&data
);
1422 DB( g_print("(ui_flt_manage) window=%p, inst_data=%p\n", window
, &data
) );
1424 g_signal_connect (window
, "destroy",
1425 G_CALLBACK (gtk_widget_destroyed
), &window
);
1427 content
= gtk_dialog_get_content_area(GTK_DIALOG (window
));
1428 mainbox
= gtk_box_new (GTK_ORIENTATION_VERTICAL
, SPACING_SMALL
);
1429 gtk_box_pack_start (GTK_BOX (content
), mainbox
, TRUE
, TRUE
, 0);
1430 //gtk_container_set_border_width (GTK_CONTAINER(mainbox), SPACING_MEDIUM);
1432 box
= gtk_box_new (GTK_ORIENTATION_HORIZONTAL
, 0);
1433 gtk_box_pack_start (GTK_BOX (mainbox
), box
, TRUE
, TRUE
, 0);
1435 sidebar
= gtk_stack_sidebar_new ();
1436 gtk_box_pack_start (GTK_BOX (box
), sidebar
, FALSE
, FALSE
, 0);
1439 stack
= gtk_stack_new ();
1440 gtk_stack_set_transition_type (GTK_STACK (stack
), GTK_STACK_TRANSITION_TYPE_SLIDE_UP_DOWN
);
1441 gtk_stack_sidebar_set_stack (GTK_STACK_SIDEBAR (sidebar
), GTK_STACK (stack
));
1443 gtk_box_pack_start (GTK_BOX (box
), stack
, TRUE
, TRUE
, 0);
1446 //common (date + status + amount)
1447 /* label = gtk_label_new(_("General"));
1448 page = ui_flt_manage_page_general(&data);
1449 gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label);
1452 page
= ui_flt_manage_part_date(&data
);
1453 //gtk_widget_show(GTK_WIDGET(page));
1454 gtk_stack_add_titled (GTK_STACK (stack
), page
, "dat", _("Dates"));
1456 page
= ui_flt_manage_part_status(&data
);
1457 //gtk_widget_show(GTK_WIDGET(page));
1458 gtk_stack_add_titled (GTK_STACK (stack
), page
, "sta", _("Statuses"));
1460 page
= ui_flt_manage_part_paymode(&data
);
1461 //gtk_widget_show(GTK_WIDGET(page));
1462 gtk_stack_add_titled (GTK_STACK (stack
), page
, "pmt", _("Payments"));
1464 page
= ui_flt_manage_part_amount(&data
);
1465 //gtk_widget_show(GTK_WIDGET(page));
1466 gtk_stack_add_titled (GTK_STACK (stack
), page
, "amt", _("Amounts"));
1468 page
= ui_flt_manage_part_text(&data
);
1469 //gtk_widget_show(GTK_WIDGET(page));
1470 gtk_stack_add_titled (GTK_STACK (stack
), page
, "txt", _("Texts"));
1472 page
= ui_flt_manage_page_category(&data
);
1473 //gtk_widget_show(GTK_WIDGET(page));
1474 gtk_stack_add_titled (GTK_STACK (stack
), page
, "cat", _("Categories"));
1476 page
= ui_flt_manage_page_payee(&data
);
1477 //gtk_widget_show(GTK_WIDGET(page));
1478 gtk_stack_add_titled (GTK_STACK (stack
), page
, "pay", _("Payees"));
1480 data
.show_account
= show_account
;
1481 if(show_account
== TRUE
)
1483 page
= ui_flt_manage_page_account(&data
);
1484 //gtk_widget_show(GTK_WIDGET(page));
1485 gtk_stack_add_titled (GTK_STACK (stack
), page
, "acc", _("Accounts"));
1488 //setup, init and show window
1489 ui_flt_manage_setup(&data
);
1490 ui_flt_manage_set(&data
);
1492 ui_flt_manage_option_update(window
, NULL
);
1494 /* signal connect */
1495 g_signal_connect (data
.CY_option
[FILTER_STATUS
] , "changed", G_CALLBACK (ui_flt_manage_option_update
), NULL
);
1496 g_signal_connect (data
.CY_option
[FILTER_DATE
] , "changed", G_CALLBACK (ui_flt_manage_option_update
), NULL
);
1497 g_signal_connect (data
.CY_option
[FILTER_AMOUNT
] , "changed", G_CALLBACK (ui_flt_manage_option_update
), NULL
);
1498 g_signal_connect (data
.CY_option
[FILTER_PAYMODE
] , "changed", G_CALLBACK (ui_flt_manage_option_update
), NULL
);
1500 g_signal_connect (data
.CY_option
[FILTER_PAYEE
] , "changed", G_CALLBACK (ui_flt_manage_option_update
), NULL
);
1501 g_signal_connect (data
.CY_option
[FILTER_CATEGORY
], "changed", G_CALLBACK (ui_flt_manage_option_update
), NULL
);
1502 g_signal_connect (data
.CY_option
[FILTER_TEXT
] , "changed", G_CALLBACK (ui_flt_manage_option_update
), NULL
);
1504 if(show_account
== TRUE
)
1506 g_signal_connect (data
.CY_option
[FILTER_ACCOUNT
] , "changed", G_CALLBACK (ui_flt_manage_option_update
), NULL
);
1510 g_signal_connect (data
.CY_month
, "changed", G_CALLBACK (ui_flt_manage_period_change
), NULL
);
1511 g_signal_connect (data
.NB_year
, "value-changed", G_CALLBACK (ui_flt_manage_period_change
), NULL
);
1514 gtk_widget_show_all (window
);
1518 hb_widget_visible (data
.LB_force
, FALSE
);
1519 hb_widget_visible (data
.GR_force
, FALSE
);
1523 if( *data
.filter
->last_tab
!= '\0' )
1524 gtk_stack_set_visible_child_name (GTK_STACK(data
.stack
), data
.filter
->last_tab
);
1525 DB( g_print(" set page '%s'\n", data
.filter
->last_tab
) );
1529 gint retval
; // = 55;
1531 //while( result == 55 )
1533 retval
= gtk_dialog_run (GTK_DIALOG (window
));
1537 case GTK_RESPONSE_ACCEPT
:
1538 //do_application_specific_something ();
1539 ui_flt_manage_get(&data
);
1542 ui_flt_manage_clear(window
, NULL
);
1543 ui_flt_manage_get(&data
);
1546 //do_nothing_since_dialog_was_cancelled ();
1551 // cleanup and destroy
1552 //ui_flt_manage_cleanup(&data, result);
1555 DB( g_print(" free\n") );
1558 DB( g_print(" destroy\n") );
1559 gtk_widget_destroy (window
);
1561 DB( g_print(" all ok\n") );