1 /* HomeBank -- Free, easy, personal accounting for everyone.
2 * Copyright (C) 1995-2018 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 char *paymode_label_names
[];
48 gchar
*CYA_FLT_TYPE
[] = {
56 gchar
*CYA_FLT_STATUS
[] = {
67 gchar
*CYA_FLT_RANGE
[] = {
107 /* = = = = = = = = = = = = = = = = = = = = */
110 static void ui_flt_panel_category_get(struct ui_flt_manage_data
*data
)
114 DB( g_print("(ui_flt_panel_category) get\n") );
116 if(data
->filter
!=NULL
)
119 //GtkTreeSelection *selection;
120 GtkTreeIter iter
, child
;
127 DB( g_print(" category\n") );
129 model
= gtk_tree_view_get_model(GTK_TREE_VIEW(data
->LV_cat
));
130 //selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_cat));
131 i
=0; valid
= gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model
), &iter
);
136 gtk_tree_model_get (model
, &iter
,
137 LST_DEFCAT_TOGGLE
, &toggled
,
138 LST_DEFCAT_DATAS
, &catitem
,
141 //data->filter->cat[i] = gtk_tree_selection_iter_is_selected(selection, &iter);
142 //data->filter->cat[i] = toggled;
143 catitem
->filter
= toggled
;
145 n_child
= gtk_tree_model_iter_n_children (GTK_TREE_MODEL(model
), &iter
);
146 gtk_tree_model_iter_children (GTK_TREE_MODEL(model
), &child
, &iter
);
151 gtk_tree_model_get (model
, &child
,
152 LST_DEFCAT_TOGGLE
, &toggled
,
153 LST_DEFCAT_DATAS
, &catitem
,
157 //data->filter->cat[i] = toggled;
158 //data->filter->cat[i] = gtk_tree_selection_iter_is_selected(selection, &child);
159 catitem
->filter
= toggled
;
162 gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &child
);
165 /* Make iter point to the next row in the list store */
166 i
++; valid
= gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &iter
);
173 static void ui_flt_panel_category_set(struct ui_flt_manage_data
*data
)
176 DB( g_print("(ui_flt_panel_category) set\n") );
178 if(data
->filter
!= NULL
)
181 //GtkTreeSelection *selection;
182 GtkTreeIter iter
, child
;
190 DB( g_print(" category\n") );
192 model
= gtk_tree_view_get_model(GTK_TREE_VIEW(data
->LV_cat
));
193 //selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_cat));
194 i
=0; valid
= gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model
), &iter
);
199 gtk_tree_model_get (model
, &iter
,
200 LST_DEFCAT_DATAS
, &catitem
,
203 if(catitem
->filter
== TRUE
)
204 gtk_tree_store_set (GTK_TREE_STORE (model
), &iter
, LST_DEFCAT_TOGGLE
, TRUE
, -1);
206 n_child
= gtk_tree_model_iter_n_children (GTK_TREE_MODEL(model
), &iter
);
207 gtk_tree_model_iter_children (GTK_TREE_MODEL(model
), &child
, &iter
);
212 gtk_tree_model_get (model
, &child
,
213 LST_DEFCAT_DATAS
, &catitem
,
216 if(catitem
->filter
== TRUE
)
217 gtk_tree_store_set (GTK_TREE_STORE (model
), &child
, LST_DEFCAT_TOGGLE
, TRUE
, -1);
220 gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &child
);
223 /* Make iter point to the next row in the list store */
224 i
++; valid
= gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &iter
);
233 static void ui_flt_manage_cat_select(GtkWidget
*widget
, gpointer user_data
)
235 struct ui_flt_manage_data
*data
;
236 gint select
= GPOINTER_TO_INT(user_data
);
238 GtkTreeIter iter
, child
;
243 DB( g_print("(ui_flt_manage) pay select\n") );
245 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
247 model
= gtk_tree_view_get_model(GTK_TREE_VIEW(data
->LV_cat
));
248 valid
= gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model
), &iter
);
254 gtk_tree_store_set (GTK_TREE_STORE (model
), &iter
, LST_DEFCAT_TOGGLE
, TRUE
, -1);
257 gtk_tree_store_set (GTK_TREE_STORE (model
), &iter
, LST_DEFCAT_TOGGLE
, FALSE
, -1);
260 gtk_tree_model_get (model
, &iter
, LST_DEFCAT_TOGGLE
, &toggle
, -1);
262 gtk_tree_store_set (GTK_TREE_STORE (model
), &iter
, LST_DEFCAT_TOGGLE
, toggle
, -1);
266 n_child
= gtk_tree_model_iter_n_children (GTK_TREE_MODEL(model
), &iter
);
267 gtk_tree_model_iter_children (GTK_TREE_MODEL(model
), &child
, &iter
);
274 gtk_tree_store_set (GTK_TREE_STORE (model
), &child
, LST_DEFCAT_TOGGLE
, TRUE
, -1);
277 gtk_tree_store_set (GTK_TREE_STORE (model
), &child
, LST_DEFCAT_TOGGLE
, FALSE
, -1);
280 gtk_tree_model_get (model
, &child
, LST_DEFCAT_TOGGLE
, &toggle
, -1);
282 gtk_tree_store_set (GTK_TREE_STORE (model
), &child
, LST_DEFCAT_TOGGLE
, toggle
, -1);
287 gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &child
);
290 valid
= gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &iter
);
298 ui_flt_panel_category_activate_link (GtkWidget
*label
,
302 DB( g_print(" comboboxlink '%s' \n", uri
) );
304 if (g_strcmp0 (uri
, "all") == 0)
306 ui_flt_manage_cat_select(label
, GINT_TO_POINTER(BUTTON_ALL
) );
309 if (g_strcmp0 (uri
, "non") == 0)
311 ui_flt_manage_cat_select(label
, GINT_TO_POINTER(BUTTON_NONE
) );
314 if (g_strcmp0 (uri
, "inv") == 0)
316 ui_flt_manage_cat_select(label
, GINT_TO_POINTER(BUTTON_INVERT
) );
324 ui_flt_panel_category_new (struct ui_flt_manage_data
*data
)
326 GtkWidget
*scrollwin
, *hbox
, *vbox
, *label
;
328 vbox
= gtk_box_new(GTK_ORIENTATION_VERTICAL
, SPACING_SMALL
);
330 label
= make_label (_("Categories"), 0, 0);
331 gimp_label_set_attributes (GTK_LABEL (label
), PANGO_ATTR_SCALE
, PANGO_SCALE_LARGE
, -1);
332 gtk_box_pack_start (GTK_BOX (vbox
), label
, FALSE
, FALSE
, 0);
334 hbox
= gtk_box_new(GTK_ORIENTATION_HORIZONTAL
, SPACING_MEDIUM
);
335 gtk_box_pack_start (GTK_BOX (vbox
), hbox
, FALSE
, FALSE
, 0);
337 label
= make_label (_("Select:"), 0, 0.5);
338 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
340 label
= make_clicklabel("all", _("All"));
341 data
->BT_cat
[BUTTON_ALL
] = label
;
342 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
343 g_signal_connect (label
, "activate-link", G_CALLBACK (ui_flt_panel_category_activate_link
), NULL
);
345 label
= make_clicklabel("non", _("None"));
346 data
->BT_cat
[BUTTON_NONE
] = label
;
347 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
348 g_signal_connect (label
, "activate-link", G_CALLBACK (ui_flt_panel_category_activate_link
), NULL
);
350 label
= make_clicklabel("inv", _("Invert"));
351 data
->BT_cat
[BUTTON_INVERT
] = label
;
352 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
353 g_signal_connect (label
, "activate-link", G_CALLBACK (ui_flt_panel_category_activate_link
), NULL
);
356 scrollwin
= gtk_scrolled_window_new(NULL
,NULL
);
357 gtk_box_pack_start (GTK_BOX (vbox
), scrollwin
, TRUE
, TRUE
, 0);
359 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin
), GTK_POLICY_NEVER
, GTK_POLICY_AUTOMATIC
);
360 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin
), GTK_SHADOW_ETCHED_IN
);
361 //gtk_container_set_border_width (GTK_CONTAINER(scrollwin), SPACING_SMALL);
363 data
->LV_cat
= (GtkWidget
*)ui_cat_listview_new(TRUE
, FALSE
);
364 gtk_container_add(GTK_CONTAINER(scrollwin
), data
->LV_cat
);
371 /* = = = = = = = = = = = = = = = = */
374 static void ui_flt_manage_pay_select(GtkWidget
*widget
, gpointer user_data
)
376 struct ui_flt_manage_data
*data
;
377 gint select
= GPOINTER_TO_INT(user_data
);
383 DB( g_print("(ui_flt_manage) pay select\n") );
385 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
387 model
= gtk_tree_view_get_model(GTK_TREE_VIEW(data
->LV_pay
));
388 valid
= gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model
), &iter
);
394 gtk_list_store_set (GTK_LIST_STORE (model
), &iter
, LST_DEFPAY_TOGGLE
, TRUE
, -1);
397 gtk_list_store_set (GTK_LIST_STORE (model
), &iter
, LST_DEFPAY_TOGGLE
, FALSE
, -1);
400 gtk_tree_model_get (model
, &iter
, LST_DEFPAY_TOGGLE
, &toggle
, -1);
402 gtk_list_store_set (GTK_LIST_STORE (model
), &iter
, LST_DEFPAY_TOGGLE
, toggle
, -1);
405 valid
= gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &iter
);
412 ui_flt_panel_payee_activate_link (GtkWidget
*label
,
416 DB( g_print(" comboboxlink '%s' \n", uri
) );
418 if (g_strcmp0 (uri
, "all") == 0)
420 ui_flt_manage_pay_select(label
, GINT_TO_POINTER(BUTTON_ALL
) );
423 if (g_strcmp0 (uri
, "non") == 0)
425 ui_flt_manage_pay_select(label
, GINT_TO_POINTER(BUTTON_NONE
) );
428 if (g_strcmp0 (uri
, "inv") == 0)
430 ui_flt_manage_pay_select(label
, GINT_TO_POINTER(BUTTON_INVERT
) );
438 ui_flt_panel_payee_new (struct ui_flt_manage_data
*data
)
440 GtkWidget
*scrollwin
, *hbox
, *vbox
, *label
;
442 vbox
= gtk_box_new(GTK_ORIENTATION_VERTICAL
, SPACING_SMALL
);
444 label
= make_label (_("Payees"), 0, 0);
445 gimp_label_set_attributes (GTK_LABEL (label
), PANGO_ATTR_SCALE
, PANGO_SCALE_LARGE
, -1);
446 gtk_box_pack_start (GTK_BOX (vbox
), label
, FALSE
, FALSE
, 0);
448 hbox
= gtk_box_new(GTK_ORIENTATION_HORIZONTAL
, SPACING_MEDIUM
);
449 gtk_box_pack_start (GTK_BOX (vbox
), hbox
, FALSE
, FALSE
, 0);
451 label
= make_label (_("Select:"), 0, 0.5);
452 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
454 label
= make_clicklabel("all", _("All"));
455 data
->BT_pay
[BUTTON_ALL
] = label
;
456 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
457 g_signal_connect (label
, "activate-link", G_CALLBACK (ui_flt_panel_payee_activate_link
), NULL
);
459 label
= make_clicklabel("non", _("None"));
460 data
->BT_pay
[BUTTON_NONE
] = label
;
461 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
462 g_signal_connect (label
, "activate-link", G_CALLBACK (ui_flt_panel_payee_activate_link
), NULL
);
464 label
= make_clicklabel("inv", _("Invert"));
465 data
->BT_pay
[BUTTON_INVERT
] = label
;
466 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
467 g_signal_connect (label
, "activate-link", G_CALLBACK (ui_flt_panel_payee_activate_link
), NULL
);
469 scrollwin
= gtk_scrolled_window_new(NULL
,NULL
);
470 gtk_box_pack_start (GTK_BOX (vbox
), scrollwin
, TRUE
, TRUE
, 0);
472 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin
), GTK_POLICY_NEVER
, GTK_POLICY_AUTOMATIC
);
473 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin
), GTK_SHADOW_ETCHED_IN
);
474 //gtk_container_set_border_width (GTK_CONTAINER(scrollwin), SPACING_SMALL);
476 data
->LV_pay
= (GtkWidget
*)ui_pay_listview_new(TRUE
, FALSE
);
477 gtk_container_add(GTK_CONTAINER(scrollwin
), data
->LV_pay
);
488 /* = = = = = = = = = = = = = = = = */
490 static void ui_flt_manage_acc_select(GtkWidget
*widget
, gpointer user_data
)
492 struct ui_flt_manage_data
*data
;
493 gint select
= GPOINTER_TO_INT(user_data
);
499 DB( g_print("(ui_flt_manage) acc select\n") );
501 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
503 model
= gtk_tree_view_get_model(GTK_TREE_VIEW(data
->LV_acc
));
504 valid
= gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model
), &iter
);
510 gtk_list_store_set (GTK_LIST_STORE (model
), &iter
, LST_DEFACC_TOGGLE
, TRUE
, -1);
513 gtk_list_store_set (GTK_LIST_STORE (model
), &iter
, LST_DEFACC_TOGGLE
, FALSE
, -1);
516 gtk_tree_model_get (model
, &iter
, LST_DEFACC_TOGGLE
, &toggle
, -1);
518 gtk_list_store_set (GTK_LIST_STORE (model
), &iter
, LST_DEFACC_TOGGLE
, toggle
, -1);
521 valid
= gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &iter
);
527 ui_flt_panel_account_activate_link (GtkWidget
*label
,
531 DB( g_print(" comboboxlink '%s' \n", uri
) );
533 if (g_strcmp0 (uri
, "all") == 0)
535 ui_flt_manage_acc_select(label
, GINT_TO_POINTER(BUTTON_ALL
) );
538 if (g_strcmp0 (uri
, "non") == 0)
540 ui_flt_manage_acc_select(label
, GINT_TO_POINTER(BUTTON_NONE
) );
543 if (g_strcmp0 (uri
, "inv") == 0)
545 ui_flt_manage_acc_select(label
, GINT_TO_POINTER(BUTTON_INVERT
) );
552 ui_flt_panel_account_new (struct ui_flt_manage_data
*data
)
554 GtkWidget
*scrollwin
, *hbox
, *vbox
, *label
;
556 vbox
= gtk_box_new(GTK_ORIENTATION_VERTICAL
, SPACING_SMALL
);
558 label
= make_label (_("Accounts"), 0, 0);
559 gimp_label_set_attributes (GTK_LABEL (label
), PANGO_ATTR_SCALE
, PANGO_SCALE_LARGE
, -1);
560 gtk_box_pack_start (GTK_BOX (vbox
), label
, FALSE
, FALSE
, 0);
562 hbox
= gtk_box_new(GTK_ORIENTATION_HORIZONTAL
, SPACING_MEDIUM
);
563 gtk_box_pack_start (GTK_BOX (vbox
), hbox
, FALSE
, FALSE
, 0);
565 label
= make_label (_("Select:"), 0, 0.5);
566 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
568 label
= make_clicklabel("all", _("All"));
569 data
->BT_acc
[BUTTON_ALL
] = label
;
570 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
571 g_signal_connect (label
, "activate-link", G_CALLBACK (ui_flt_panel_account_activate_link
), NULL
);
573 label
= make_clicklabel("non", _("None"));
574 data
->BT_acc
[BUTTON_NONE
] = label
;
575 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
576 g_signal_connect (label
, "activate-link", G_CALLBACK (ui_flt_panel_account_activate_link
), NULL
);
578 label
= make_clicklabel("inv", _("Invert"));
579 data
->BT_acc
[BUTTON_INVERT
] = label
;
580 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
581 g_signal_connect (label
, "activate-link", G_CALLBACK (ui_flt_panel_account_activate_link
), NULL
);
583 scrollwin
= gtk_scrolled_window_new(NULL
,NULL
);
584 gtk_box_pack_start (GTK_BOX (vbox
), scrollwin
, TRUE
, TRUE
, 0);
586 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin
), GTK_POLICY_NEVER
, GTK_POLICY_AUTOMATIC
);
587 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin
), GTK_SHADOW_ETCHED_IN
);
588 //gtk_container_set_border_width (GTK_CONTAINER(scrollwin), SPACING_SMALL);
590 data
->LV_acc
= (GtkWidget
*)ui_acc_listview_new(TRUE
);
591 gtk_container_add(GTK_CONTAINER(scrollwin
), data
->LV_acc
);
596 /* = = = = = = = = = = = = = = = = */
607 static void ui_flt_manage_option_update(GtkWidget
*widget
, gpointer user_data
)
609 struct ui_flt_manage_data
*data
;
613 DB( g_print("(ui_flt_manage) update\n") );
615 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
618 active
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->CY_option
[FILTER_STATUS
]));
619 sensitive
= active
== 0 ? FALSE
: TRUE
;
620 gtk_widget_set_sensitive(data
->CM_reconciled
, sensitive
);
621 gtk_widget_set_sensitive(data
->CM_cleared
, sensitive
);
624 active
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->CY_option
[FILTER_DATE
]));
625 sensitive
= active
== 0 ? FALSE
: TRUE
;
626 gtk_widget_set_sensitive(data
->PO_mindate
, sensitive
);
627 gtk_widget_set_sensitive(data
->PO_maxdate
, sensitive
);
628 gtk_widget_set_sensitive(data
->CY_month
, sensitive
);
629 gtk_widget_set_sensitive(data
->NB_year
, sensitive
);
632 active
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->CY_option
[FILTER_AMOUNT
]));
633 sensitive
= active
== 0 ? FALSE
: TRUE
;
634 gtk_widget_set_sensitive(data
->ST_minamount
, sensitive
);
635 gtk_widget_set_sensitive(data
->ST_maxamount
, sensitive
);
638 active
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->CY_option
[FILTER_TEXT
]));
639 sensitive
= active
== 0 ? FALSE
: TRUE
;
640 gtk_widget_set_sensitive(data
->CM_exact
, sensitive
);
641 gtk_widget_set_sensitive(data
->ST_memo
, sensitive
);
642 gtk_widget_set_sensitive(data
->ST_info
, sensitive
);
643 gtk_widget_set_sensitive(data
->ST_tag
, sensitive
);
646 active
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->CY_option
[FILTER_PAYMODE
]));
647 sensitive
= active
== 0 ? FALSE
: TRUE
;
648 for(i
=0;i
<NUM_PAYMODE_MAX
;i
++)
650 gtk_widget_set_sensitive(data
->CM_paymode
[i
], sensitive
);
654 if(data
->show_account
== TRUE
)
656 active
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->CY_option
[FILTER_ACCOUNT
]));
657 sensitive
= active
== 0 ? FALSE
: TRUE
;
658 gtk_widget_set_sensitive(data
->LV_acc
, sensitive
);
659 for(i
=0;i
<MAX_BUTTON
;i
++)
661 gtk_widget_set_sensitive(data
->BT_acc
[i
], sensitive
);
668 active
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->CY_option
[FILTER_PAYEE
]));
669 sensitive
= active
== 0 ? FALSE
: TRUE
;
670 gtk_widget_set_sensitive(data
->LV_pay
, sensitive
);
671 for(i
=0;i
<MAX_BUTTON
;i
++)
673 gtk_widget_set_sensitive(data
->BT_pay
[i
], sensitive
);
677 active
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->CY_option
[FILTER_CATEGORY
]));
678 sensitive
= active
== 0 ? FALSE
: TRUE
;
679 gtk_widget_set_sensitive(data
->LV_cat
, sensitive
);
680 for(i
=0;i
<MAX_BUTTON
;i
++)
682 gtk_widget_set_sensitive(data
->BT_cat
[i
], sensitive
);
693 static void ui_flt_manage_get(struct ui_flt_manage_data
*data
)
698 DB( g_print("(ui_flt_manage) get\n") );
700 if(data
->filter
!=NULL
)
703 //GtkTreeSelection *selection;
709 for(i
=0;i
<FILTER_MAX
;i
++)
711 if(data
->show_account
== FALSE
&& i
== FILTER_ACCOUNT
)
714 data
->filter
->option
[i
] = gtk_combo_box_get_active(GTK_COMBO_BOX(data
->CY_option
[i
]));
718 DB( g_print(" date\n") );
719 data
->filter
->mindate
= gtk_date_entry_get_date(GTK_DATE_ENTRY(data
->PO_mindate
));
720 data
->filter
->maxdate
= gtk_date_entry_get_date(GTK_DATE_ENTRY(data
->PO_maxdate
));
723 DB( g_print(" status\n") );
724 data
->filter
->reconciled
= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->CM_reconciled
));
725 data
->filter
->cleared
= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->CM_cleared
));
727 data
->filter
->forceadd
= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->CM_forceadd
));
728 data
->filter
->forcechg
= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->CM_forcechg
));
729 data
->filter
->forceremind
= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->CM_forceremind
));
732 DB( g_print(" paymode\n") );
733 for(i
=0;i
<NUM_PAYMODE_MAX
;i
++)
734 data
->filter
->paymode
[i
] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->CM_paymode
[i
]));
737 data
->filter
->minamount
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->ST_minamount
));
738 data
->filter
->maxamount
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->ST_maxamount
));
741 data
->filter
->exact
= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->CM_exact
));
742 //free any previous string
743 if( data
->filter
->memo
)
745 g_free(data
->filter
->memo
);
746 data
->filter
->memo
= NULL
;
748 txt
= (gchar
*)gtk_entry_get_text(GTK_ENTRY(data
->ST_memo
));
750 if (txt
&& *txt
) // ignore if entry is empty
752 data
->filter
->memo
= g_strdup(txt
);
756 //free any previous string
757 if( data
->filter
->info
)
759 g_free(data
->filter
->info
);
760 data
->filter
->info
= NULL
;
762 txt
= (gchar
*)gtk_entry_get_text(GTK_ENTRY(data
->ST_info
));
763 // ignore if entry is empty
766 data
->filter
->info
= g_strdup(txt
);
770 //free any previous string
771 if( data
->filter
->tag
)
773 g_free(data
->filter
->tag
);
774 data
->filter
->tag
= NULL
;
776 txt
= (gchar
*)gtk_entry_get_text(GTK_ENTRY(data
->ST_tag
));
777 // ignore if entry is empty
780 data
->filter
->tag
= g_strdup(txt
);
785 if(data
->show_account
== TRUE
)
787 DB( g_print(" account\n") );
789 model
= gtk_tree_view_get_model(GTK_TREE_VIEW(data
->LV_acc
));
790 //selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_acc));
791 i
=0; valid
= gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model
), &iter
);
796 gtk_tree_model_get (model
, &iter
,
797 LST_DEFACC_TOGGLE
, &toggled
,
798 LST_DEFACC_DATAS
, &accitem
,
801 //data->filter->acc[i] = gtk_tree_selection_iter_is_selected(selection, &iter);
802 accitem
->filter
= toggled
;
804 /* Make iter point to the next row in the list store */
805 i
++; valid
= gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &iter
);
810 DB( g_print(" payee\n") );
812 model
= gtk_tree_view_get_model(GTK_TREE_VIEW(data
->LV_pay
));
813 //selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_pay));
814 i
=0; valid
= gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model
), &iter
);
819 gtk_tree_model_get (model
, &iter
,
820 LST_DEFPAY_TOGGLE
, &toggled
,
821 LST_DEFPAY_DATAS
, &payitem
,
824 //data->filter->pay[i] = gtk_tree_selection_iter_is_selected(selection, &iter);
825 payitem
->filter
= toggled
;
827 /* Make iter point to the next row in the list store */
828 i
++; valid
= gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &iter
);
832 DB( g_print(" category\n") );
834 ui_flt_panel_category_get(data
);
837 g_strlcpy(data
->filter
->last_tab
, gtk_stack_get_visible_child_name(GTK_STACK(data
->stack
)), 8);
838 DB( g_print(" page is '%s'\n", data
->filter
->last_tab
) );
848 static void ui_flt_manage_set(struct ui_flt_manage_data
*data
)
851 DB( g_print("(ui_flt_manage) set\n") );
853 if(data
->filter
!= NULL
)
856 //GtkTreeSelection *selection;
863 DB( g_print(" options\n") );
865 for(i
=0;i
<FILTER_MAX
;i
++)
867 if(data
->show_account
== FALSE
&& i
== FILTER_ACCOUNT
)
870 gtk_combo_box_set_active(GTK_COMBO_BOX(data
->CY_option
[i
]), data
->filter
->option
[i
]);
873 //DB( g_print(" setdate %d to %x\n", data->filter->mindate, data->PO_mindate) );
874 //DB( g_print(" setdate %d to %x\n", 0, data->PO_mindate) );
876 DB( g_print(" date\n") );
877 gtk_date_entry_set_date(GTK_DATE_ENTRY(data
->PO_mindate
), data
->filter
->mindate
);
878 gtk_date_entry_set_date(GTK_DATE_ENTRY(data
->PO_maxdate
), data
->filter
->maxdate
);
879 date
= g_date_new_julian(data
->filter
->maxdate
);
880 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data
->NB_year
), g_date_get_year(date
));
884 DB( g_print(" status\n") );
885 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data
->CM_reconciled
), data
->filter
->reconciled
);
888 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data
->CM_forceadd
), data
->filter
->forceadd
);
889 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data
->CM_forcechg
), data
->filter
->forcechg
);
890 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data
->CM_forceremind
), data
->filter
->forceremind
);
893 DB( g_print(" paymode\n") );
895 for(i
=0;i
<NUM_PAYMODE_MAX
;i
++)
896 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data
->CM_paymode
[i
]), data
->filter
->paymode
[i
]);
899 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data
->ST_minamount
), data
->filter
->minamount
);
900 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data
->ST_maxamount
), data
->filter
->maxamount
);
903 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data
->CM_exact
), data
->filter
->exact
);
904 gtk_entry_set_text(GTK_ENTRY(data
->ST_info
), (data
->filter
->info
!= NULL
) ? data
->filter
->info
: "");
905 gtk_entry_set_text(GTK_ENTRY(data
->ST_memo
), (data
->filter
->memo
!= NULL
) ? data
->filter
->memo
: "");
906 gtk_entry_set_text(GTK_ENTRY(data
->ST_tag
), (data
->filter
->tag
!= NULL
) ? data
->filter
->tag
: "");
909 if(data
->show_account
== TRUE
)
911 DB( g_print(" account\n") );
913 model
= gtk_tree_view_get_model(GTK_TREE_VIEW(data
->LV_acc
));
914 //selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_acc));
915 i
=0; valid
= gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model
), &iter
);
920 gtk_tree_model_get (model
, &iter
,
921 LST_DEFACC_DATAS
, &accitem
,
924 if(accitem
->filter
== TRUE
)
925 //gtk_tree_selection_select_iter(selection, &iter);
926 gtk_list_store_set (GTK_LIST_STORE (model
), &iter
,
927 LST_DEFACC_TOGGLE
, TRUE
, -1);
929 /* Make iter point to the next row in the list store */
930 i
++; valid
= gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &iter
);
935 DB( g_print(" payee\n") );
937 model
= gtk_tree_view_get_model(GTK_TREE_VIEW(data
->LV_pay
));
938 //selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_pay));
939 i
=0; valid
= gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model
), &iter
);
944 gtk_tree_model_get (model
, &iter
,
945 LST_DEFPAY_DATAS
, &payitem
,
948 if(payitem
->filter
== TRUE
)
949 gtk_list_store_set (GTK_LIST_STORE (model
), &iter
, LST_DEFPAY_TOGGLE
, TRUE
, -1);
951 /* Make iter point to the next row in the list store */
952 i
++; valid
= gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &iter
);
956 DB( g_print(" category\n") );
958 ui_flt_panel_category_set(data
);
967 static void ui_flt_manage_clear(GtkWidget
*widget
, gpointer user_data
)
969 struct ui_flt_manage_data
*data
;
971 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(GTK_WIDGET(widget
), GTK_TYPE_WINDOW
)), "inst_data");
973 DB( g_print("(ui_flt_manage) clear\n") );
975 filter_default_all_set(data
->filter
);
977 ui_flt_manage_set(data
);
985 static void ui_flt_manage_setup(struct ui_flt_manage_data
*data
)
988 DB( g_print("(ui_flt_manage) setup\n") );
990 if(data
->show_account
== TRUE
&& data
->LV_acc
!= NULL
)
992 //gtk_tree_selection_set_mode(GTK_TREE_SELECTION(gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_acc))), GTK_SELECTION_MULTIPLE);
994 ui_acc_listview_populate(data
->LV_acc
, ACC_LST_INSERT_REPORT
);
995 //populate_view_acc(data->LV_acc, GLOBALS->acc_list, FALSE);
1000 //gtk_tree_selection_set_mode(GTK_TREE_SELECTION(gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_pay))), GTK_SELECTION_MULTIPLE);
1002 ui_pay_listview_populate(data
->LV_pay
);
1003 //populate_view_pay(data->LV_pay, GLOBALS->pay_list, FALSE);
1008 //gtk_tree_selection_set_mode(GTK_TREE_SELECTION(gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_cat))), GTK_SELECTION_MULTIPLE);
1010 //populate_view_cat(data->LV_cat, GLOBALS->cat_list, FALSE);
1011 ui_cat_listview_populate(data
->LV_cat
, CAT_TYPE_ALL
);
1012 gtk_tree_view_expand_all (GTK_TREE_VIEW(data
->LV_cat
));
1021 static GtkWidget
*ui_flt_manage_page_category (struct ui_flt_manage_data
*data
)
1023 GtkWidget
*container
, *panel
, *hbox
, *label
;
1025 container
= gtk_box_new(GTK_ORIENTATION_VERTICAL
, SPACING_SMALL
);
1026 gtk_container_set_border_width (GTK_CONTAINER (container
), SPACING_MEDIUM
);
1028 hbox
= gtk_box_new(GTK_ORIENTATION_HORIZONTAL
, SPACING_SMALL
);
1029 gtk_box_pack_start (GTK_BOX (container
), hbox
, FALSE
, FALSE
, 0);
1031 label
= make_label_widget(_("_Option:"));
1032 gtk_box_pack_start (GTK_BOX (hbox
), label
, TRUE
, TRUE
, 0);
1033 data
->CY_option
[FILTER_CATEGORY
] = make_nainex(label
);
1034 gtk_box_pack_start (GTK_BOX (hbox
), data
->CY_option
[FILTER_CATEGORY
], TRUE
, TRUE
, 0);
1036 panel
= ui_flt_panel_category_new(data
);
1037 gtk_box_pack_start (GTK_BOX (container
), panel
, TRUE
, TRUE
, 0);
1043 static GtkWidget
*ui_flt_manage_page_payee (struct ui_flt_manage_data
*data
)
1045 GtkWidget
*container
, *panel
, *hbox
, *label
;
1047 container
= gtk_box_new(GTK_ORIENTATION_VERTICAL
, SPACING_SMALL
);
1048 gtk_container_set_border_width (GTK_CONTAINER (container
), SPACING_MEDIUM
);
1050 hbox
= gtk_box_new(GTK_ORIENTATION_HORIZONTAL
, SPACING_SMALL
);
1051 gtk_box_pack_start (GTK_BOX (container
), hbox
, FALSE
, FALSE
, 0);
1053 label
= make_label_widget(_("_Option:"));
1054 gtk_box_pack_start (GTK_BOX (hbox
), label
, TRUE
, TRUE
, 0);
1055 data
->CY_option
[FILTER_PAYEE
] = make_nainex(label
);
1056 gtk_box_pack_start (GTK_BOX (hbox
), data
->CY_option
[FILTER_PAYEE
], TRUE
, TRUE
, 0);
1058 panel
= ui_flt_panel_payee_new(data
);
1059 gtk_box_pack_start (GTK_BOX (container
), panel
, TRUE
, TRUE
, 0);
1067 static GtkWidget
*ui_flt_manage_page_account (struct ui_flt_manage_data
*data
)
1069 GtkWidget
*container
, *panel
, *hbox
, *label
;
1071 container
= gtk_box_new(GTK_ORIENTATION_VERTICAL
, SPACING_SMALL
);
1072 gtk_container_set_border_width (GTK_CONTAINER (container
), SPACING_MEDIUM
);
1074 hbox
= gtk_box_new(GTK_ORIENTATION_HORIZONTAL
, SPACING_SMALL
);
1075 gtk_box_pack_start (GTK_BOX (container
), hbox
, FALSE
, FALSE
, 0);
1077 label
= make_label_widget(_("_Option:"));
1078 gtk_box_pack_start (GTK_BOX (hbox
), label
, TRUE
, TRUE
, 0);
1079 data
->CY_option
[FILTER_ACCOUNT
] = make_nainex(label
);
1080 gtk_box_pack_start (GTK_BOX (hbox
), data
->CY_option
[FILTER_ACCOUNT
], TRUE
, TRUE
, 0);
1082 panel
= ui_flt_panel_account_new(data
);
1083 gtk_box_pack_start (GTK_BOX (container
), panel
, TRUE
, TRUE
, 0);
1089 static void get_period_minmax(guint month
, guint year
, guint32
*mindate
, guint32
*maxdate
)
1093 date
= g_date_new();
1096 // mindate is month 1, year :: maxdate is last day of month, year
1097 g_date_set_dmy(date
, 1, month
, year
);
1098 *mindate
= g_date_get_julian(date
);
1099 g_date_add_days(date
, g_date_get_days_in_month(month
, year
));
1100 *maxdate
= g_date_get_julian(date
)-1;
1104 g_date_set_dmy(date
, 1, 1, year
);
1105 *mindate
= g_date_get_julian(date
);
1106 g_date_set_dmy(date
, 31, 12, year
);
1107 *maxdate
= g_date_get_julian(date
);
1114 static void ui_flt_manage_period_change(GtkWidget
*widget
, gpointer user_data
)
1116 struct ui_flt_manage_data
*data
;
1119 DB( g_print("(ui_flt_manage) period change\n") );
1121 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
1124 month
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->CY_month
));
1125 year
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->NB_year
));
1127 DB( g_print(" month=%d, year=%d\n", month
, year
) );
1131 get_period_minmax(month
-1, year
, &data
->filter
->mindate
, &data
->filter
->maxdate
);
1133 get_period_minmax(0, year
, &data
->filter
->mindate
, &data
->filter
->maxdate
);
1135 gtk_date_entry_set_date(GTK_DATE_ENTRY(data
->PO_mindate
), data
->filter
->mindate
);
1136 gtk_date_entry_set_date(GTK_DATE_ENTRY(data
->PO_maxdate
), data
->filter
->maxdate
);
1140 static GtkWidget
*ui_flt_manage_part_date(struct ui_flt_manage_data
*data
)
1142 GtkWidget
*table
, *label
;
1145 table
= gtk_grid_new ();
1146 gtk_grid_set_row_spacing (GTK_GRID (table
), SPACING_SMALL
);
1147 gtk_grid_set_column_spacing (GTK_GRID (table
), SPACING_MEDIUM
);
1148 gtk_container_set_border_width(GTK_CONTAINER(table
), SPACING_MEDIUM
);
1151 label
= make_label_widget(_("_Option:"));
1152 //----------------------------------------- l, r, t, b
1153 gtk_grid_attach (GTK_GRID (table
), label
, 1, row
, 1, 1);
1154 data
->CY_option
[FILTER_DATE
] = make_nainex(label
);
1155 gtk_grid_attach (GTK_GRID (table
), data
->CY_option
[FILTER_DATE
], 2, row
, 1, 1);
1158 label
= make_label (_("Dates"), 0, 0);
1159 gimp_label_set_attributes (GTK_LABEL (label
), PANGO_ATTR_SCALE
, PANGO_SCALE_LARGE
, -1);
1160 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 3, 1);
1163 label
= make_label_widget(_("_From:"));
1164 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 1, 1);
1165 data
->PO_mindate
= gtk_date_entry_new();
1166 gtk_grid_attach (GTK_GRID (table
), data
->PO_mindate
, 1, row
, 2, 1);
1169 label
= make_label_widget(_("_To:"));
1170 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 1, 1);
1171 data
->PO_maxdate
= gtk_date_entry_new();
1172 gtk_grid_attach (GTK_GRID (table
), data
->PO_maxdate
, 1, row
, 2, 1);
1175 label
= make_label_widget(_("_Month:"));
1176 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 1, 1);
1177 data
->CY_month
= make_cycle(label
, CYA_SELECT
);
1178 gtk_grid_attach (GTK_GRID (table
), data
->CY_month
, 1, row
, 2, 1);
1181 label
= make_label_widget(_("_Year:"));
1182 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 1, 1);
1183 data
->NB_year
= make_year(label
);
1184 gtk_grid_attach (GTK_GRID (table
), data
->NB_year
, 1, row
, 2, 1);
1190 static GtkWidget
*ui_flt_manage_part_text(struct ui_flt_manage_data
*data
)
1192 GtkWidget
*table
, *label
;
1195 table
= gtk_grid_new ();
1196 gtk_grid_set_row_spacing (GTK_GRID (table
), SPACING_SMALL
);
1197 gtk_grid_set_column_spacing (GTK_GRID (table
), SPACING_MEDIUM
);
1198 gtk_container_set_border_width(GTK_CONTAINER(table
), SPACING_MEDIUM
);
1201 label
= make_label_widget(_("_Option:"));
1202 //----------------------------------------- l, r, t, b
1203 gtk_grid_attach (GTK_GRID (table
), label
, 1, row
, 1, 1);
1204 data
->CY_option
[FILTER_TEXT
] = make_nainex(label
);
1205 gtk_grid_attach (GTK_GRID (table
), data
->CY_option
[FILTER_TEXT
], 2, row
, 1, 1);
1208 label
= make_label (_("Texts"), 0, 0);
1209 gimp_label_set_attributes (GTK_LABEL (label
), PANGO_ATTR_SCALE
, PANGO_SCALE_LARGE
, -1);
1210 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 3, 1);
1213 label
= make_label_widget(_("_Memo:"));
1214 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 1, 1);
1215 data
->ST_memo
= make_string(label
);
1216 gtk_widget_set_hexpand (data
->ST_memo
, TRUE
);
1217 gtk_grid_attach (GTK_GRID (table
), data
->ST_memo
, 1, row
, 2, 1);
1220 label
= make_label_widget(_("_Info:"));
1221 //----------------------------------------- l, r, t, b
1222 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 1, 1);
1223 data
->ST_info
= make_string(label
);
1224 gtk_widget_set_hexpand (data
->ST_info
, TRUE
);
1225 gtk_grid_attach (GTK_GRID (table
), data
->ST_info
, 1, row
, 2, 1);
1228 label
= make_label_widget(_("_Tag:"));
1229 //----------------------------------------- l, r, t, b
1230 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 1, 1);
1231 data
->ST_tag
= make_string(label
);
1232 gtk_widget_set_hexpand (data
->ST_tag
, TRUE
);
1233 gtk_grid_attach (GTK_GRID (table
), data
->ST_tag
, 1, row
, 2, 1);
1236 data
->CM_exact
= gtk_check_button_new_with_mnemonic (_("Case _sensitive"));
1237 gtk_grid_attach (GTK_GRID (table
), data
->CM_exact
, 1, row
, 2, 1);
1243 static GtkWidget
*ui_flt_manage_part_amount(struct ui_flt_manage_data
*data
)
1245 GtkWidget
*table
, *label
;
1248 table
= gtk_grid_new ();
1249 gtk_grid_set_row_spacing (GTK_GRID (table
), SPACING_SMALL
);
1250 gtk_grid_set_column_spacing (GTK_GRID (table
), SPACING_MEDIUM
);
1251 gtk_container_set_border_width(GTK_CONTAINER(table
), SPACING_MEDIUM
);
1254 label
= make_label_widget(_("_Option:"));
1255 //----------------------------------------- l, r, t, b
1256 gtk_grid_attach (GTK_GRID (table
), label
, 1, row
, 1, 1);
1257 data
->CY_option
[FILTER_AMOUNT
] = make_nainex(label
);
1258 gtk_grid_attach (GTK_GRID (table
), data
->CY_option
[FILTER_AMOUNT
], 2, row
, 1, 1);
1261 label
= make_label (_("Amounts"), 0, 0);
1262 gimp_label_set_attributes (GTK_LABEL (label
), PANGO_ATTR_SCALE
, PANGO_SCALE_LARGE
, -1);
1263 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 3, 1);
1266 label
= make_label_widget(_("_From:"));
1267 //----------------------------------------- l, r, t, b
1268 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 1, 1);
1269 data
->ST_minamount
= make_amount(label
);
1270 gtk_grid_attach (GTK_GRID (table
), data
->ST_minamount
, 1, row
, 2, 1);
1273 label
= make_label_widget(_("_To:"));
1274 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 1, 1);
1275 data
->ST_maxamount
= make_amount(label
);
1276 gtk_grid_attach (GTK_GRID (table
), data
->ST_maxamount
, 1, row
, 2, 1);
1282 static GtkWidget
*ui_flt_manage_part_status(struct ui_flt_manage_data
*data
)
1284 GtkWidget
*table
, *label
, *vbox
, *widget
;
1287 table
= gtk_grid_new ();
1288 gtk_grid_set_row_spacing (GTK_GRID (table
), SPACING_SMALL
);
1289 gtk_grid_set_column_spacing (GTK_GRID (table
), SPACING_MEDIUM
);
1290 gtk_container_set_border_width(GTK_CONTAINER(table
), SPACING_MEDIUM
);
1293 label
= make_label_widget(_("_Option:"));
1294 //----------------------------------------- l, r, t, b
1295 gtk_grid_attach (GTK_GRID (table
), label
, 1, row
, 1, 1);
1296 data
->CY_option
[FILTER_STATUS
] = make_nainex(label
);
1297 gtk_grid_attach (GTK_GRID (table
), data
->CY_option
[FILTER_STATUS
], 2, row
, 1, 1);
1300 label
= make_label (_("Statuses"), 0, 0);
1301 gimp_label_set_attributes (GTK_LABEL (label
), PANGO_ATTR_SCALE
, PANGO_SCALE_LARGE
, -1);
1302 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 3, 1);
1306 vbox
= gtk_box_new (GTK_ORIENTATION_VERTICAL
, 0);
1307 gtk_grid_attach (GTK_GRID (table
), vbox
, 2, row
, 1, 1);
1309 widget
= gtk_check_button_new_with_mnemonic (_("reconciled"));
1310 data
->CM_reconciled
= widget
;
1311 gtk_box_pack_start (GTK_BOX (vbox
), widget
, TRUE
, TRUE
, 0);
1313 widget
= gtk_check_button_new_with_mnemonic (_("cleared"));
1314 data
->CM_cleared
= widget
;
1315 gtk_box_pack_start (GTK_BOX (vbox
), widget
, TRUE
, TRUE
, 0);
1318 label
= make_label_widget(_("Force:"));
1319 gtk_grid_attach (GTK_GRID (table
), label
, 1, row
, 1, 1);
1321 vbox
= gtk_box_new (GTK_ORIENTATION_VERTICAL
, 0);
1322 gtk_grid_attach (GTK_GRID (table
), vbox
, 2, row
, 1, 1);
1324 widget
= gtk_check_button_new_with_mnemonic (_("display 'Added'"));
1325 data
->CM_forceadd
= widget
;
1326 gtk_box_pack_start (GTK_BOX (vbox
), widget
, TRUE
, TRUE
, 0);
1328 widget
= gtk_check_button_new_with_mnemonic (_("display 'Edited'"));
1329 data
->CM_forcechg
= widget
;
1330 gtk_box_pack_start (GTK_BOX (vbox
), widget
, TRUE
, TRUE
, 0);
1332 widget
= gtk_check_button_new_with_mnemonic (_("display 'Remind'"));
1333 data
->CM_forceremind
= widget
;
1334 gtk_box_pack_start (GTK_BOX (vbox
), widget
, TRUE
, TRUE
, 0);
1340 static GtkWidget
*ui_flt_manage_part_paymode(struct ui_flt_manage_data
*data
)
1342 GtkWidget
*table
, *label
, *table1
, *image
;
1345 table
= gtk_grid_new ();
1346 gtk_grid_set_row_spacing (GTK_GRID (table
), SPACING_SMALL
);
1347 gtk_grid_set_column_spacing (GTK_GRID (table
), SPACING_MEDIUM
);
1348 gtk_container_set_border_width(GTK_CONTAINER(table
), SPACING_MEDIUM
);
1351 label
= make_label_widget(_("_Option:"));
1352 //----------------------------------------- l, r, t, b
1353 gtk_grid_attach (GTK_GRID (table
), label
, 1, row
, 1, 1);
1354 data
->CY_option
[FILTER_PAYMODE
] = make_nainex(label
);
1355 gtk_grid_attach (GTK_GRID (table
), data
->CY_option
[FILTER_PAYMODE
], 2, row
, 1, 1);
1358 label
= make_label (_("Payments"), 0, 0);
1359 gimp_label_set_attributes (GTK_LABEL (label
), PANGO_ATTR_SCALE
, PANGO_SCALE_LARGE
, -1);
1360 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 3, 1);
1363 table1
= gtk_grid_new ();
1364 gtk_grid_set_row_spacing (GTK_GRID (table1
), SPACING_SMALL
);
1365 gtk_grid_set_column_spacing (GTK_GRID (table1
), SPACING_SMALL
);
1366 gtk_grid_attach (GTK_GRID (table
), table1
, 1, row
, 2, 1);
1368 for(i
=0;i
<NUM_PAYMODE_MAX
;i
++)
1372 image
= gtk_image_new_from_icon_name( get_paymode_icon_name(i
), GTK_ICON_SIZE_MENU
);
1373 gtk_grid_attach (GTK_GRID (table1
), image
, 0, row
, 1, 1);
1375 data
->CM_paymode
[i
] = gtk_check_button_new();
1376 gtk_grid_attach (GTK_GRID (table1
), data
->CM_paymode
[i
], 1, row
, 1, 1);
1378 label
= make_label(_(paymode_label_names
[i
]), 0.0, 0.5);
1379 gtk_grid_attach (GTK_GRID (table1
), label
, 2, row
, 1, 1);
1389 gint
ui_flt_manage_dialog_new(GtkWidget
*widget
, Filter
*filter
, gboolean show_account
)
1391 struct ui_flt_manage_data data
;
1392 GtkWidget
*parentwindow
, *window
, *content
, *mainbox
, *box
, *sidebar
, *stack
, *page
;
1395 //data = g_malloc0(sizeof(struct ui_flt_manage_data));
1396 //if(!data) return NULL;
1397 memset(&data
, 0, sizeof(data
));
1399 data
.filter
= filter
;
1401 parentwindow
= gtk_widget_get_ancestor(GTK_WIDGET(widget
), GTK_TYPE_WINDOW
);
1403 window
= gtk_dialog_new_with_buttons (_("Edit filter"),
1404 GTK_WINDOW (parentwindow
),
1409 GTK_RESPONSE_REJECT
,
1411 GTK_RESPONSE_ACCEPT
,
1414 gtk_window_set_icon_name(GTK_WINDOW (window
), ICONNAME_HB_FILTER
);
1416 //set a nice dialog size
1417 gtk_window_get_size(GTK_WINDOW(parentwindow
), &w
, &h
);
1418 gtk_window_set_default_size (GTK_WINDOW(window
), -1, 0.8*h
);
1421 //store our window private data
1422 g_object_set_data(G_OBJECT(window
), "inst_data", (gpointer
)&data
);
1423 DB( g_print("(ui_flt_manage) window=%p, inst_data=%p\n", window
, &data
) );
1425 g_signal_connect (window
, "destroy",
1426 G_CALLBACK (gtk_widget_destroyed
), &window
);
1428 content
= gtk_dialog_get_content_area(GTK_DIALOG (window
));
1429 mainbox
= gtk_box_new (GTK_ORIENTATION_VERTICAL
, SPACING_SMALL
);
1430 gtk_box_pack_start (GTK_BOX (content
), mainbox
, TRUE
, TRUE
, 0);
1431 //gtk_container_set_border_width (GTK_CONTAINER(mainbox), SPACING_MEDIUM);
1433 box
= gtk_box_new (GTK_ORIENTATION_HORIZONTAL
, 0);
1434 gtk_box_pack_start (GTK_BOX (mainbox
), box
, TRUE
, TRUE
, 0);
1436 sidebar
= gtk_stack_sidebar_new ();
1437 gtk_box_pack_start (GTK_BOX (box
), sidebar
, FALSE
, FALSE
, 0);
1440 stack
= gtk_stack_new ();
1441 gtk_stack_set_transition_type (GTK_STACK (stack
), GTK_STACK_TRANSITION_TYPE_SLIDE_UP_DOWN
);
1442 gtk_stack_sidebar_set_stack (GTK_STACK_SIDEBAR (sidebar
), GTK_STACK (stack
));
1444 gtk_box_pack_start (GTK_BOX (box
), stack
, TRUE
, TRUE
, 0);
1447 //common (date + status + amount)
1448 /* label = gtk_label_new(_("General"));
1449 page = ui_flt_manage_page_general(&data);
1450 gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label);
1453 page
= ui_flt_manage_part_date(&data
);
1454 //gtk_widget_show(GTK_WIDGET(page));
1455 gtk_stack_add_titled (GTK_STACK (stack
), page
, "dat", _("Dates"));
1457 page
= ui_flt_manage_part_status(&data
);
1458 //gtk_widget_show(GTK_WIDGET(page));
1459 gtk_stack_add_titled (GTK_STACK (stack
), page
, "sta", _("Statuses"));
1461 page
= ui_flt_manage_part_paymode(&data
);
1462 //gtk_widget_show(GTK_WIDGET(page));
1463 gtk_stack_add_titled (GTK_STACK (stack
), page
, "pmt", _("Payments"));
1465 page
= ui_flt_manage_part_amount(&data
);
1466 //gtk_widget_show(GTK_WIDGET(page));
1467 gtk_stack_add_titled (GTK_STACK (stack
), page
, "amt", _("Amounts"));
1469 page
= ui_flt_manage_part_text(&data
);
1470 //gtk_widget_show(GTK_WIDGET(page));
1471 gtk_stack_add_titled (GTK_STACK (stack
), page
, "txt", _("Texts"));
1473 page
= ui_flt_manage_page_category(&data
);
1474 //gtk_widget_show(GTK_WIDGET(page));
1475 gtk_stack_add_titled (GTK_STACK (stack
), page
, "cat", _("Categories"));
1477 page
= ui_flt_manage_page_payee(&data
);
1478 //gtk_widget_show(GTK_WIDGET(page));
1479 gtk_stack_add_titled (GTK_STACK (stack
), page
, "pay", _("Payees"));
1481 data
.show_account
= show_account
;
1482 if(show_account
== TRUE
)
1484 page
= ui_flt_manage_page_account(&data
);
1485 //gtk_widget_show(GTK_WIDGET(page));
1486 gtk_stack_add_titled (GTK_STACK (stack
), page
, "acc", _("Accounts"));
1489 //setup, init and show window
1490 ui_flt_manage_setup(&data
);
1491 ui_flt_manage_set(&data
);
1493 ui_flt_manage_option_update(window
, NULL
);
1496 /* signal connect */
1497 g_signal_connect (data
.CY_option
[FILTER_STATUS
] , "changed", G_CALLBACK (ui_flt_manage_option_update
), NULL
);
1498 g_signal_connect (data
.CY_option
[FILTER_DATE
] , "changed", G_CALLBACK (ui_flt_manage_option_update
), NULL
);
1499 g_signal_connect (data
.CY_option
[FILTER_AMOUNT
] , "changed", G_CALLBACK (ui_flt_manage_option_update
), NULL
);
1500 g_signal_connect (data
.CY_option
[FILTER_PAYMODE
] , "changed", G_CALLBACK (ui_flt_manage_option_update
), NULL
);
1502 g_signal_connect (data
.CY_option
[FILTER_PAYEE
] , "changed", G_CALLBACK (ui_flt_manage_option_update
), NULL
);
1503 g_signal_connect (data
.CY_option
[FILTER_CATEGORY
], "changed", G_CALLBACK (ui_flt_manage_option_update
), NULL
);
1504 g_signal_connect (data
.CY_option
[FILTER_TEXT
] , "changed", G_CALLBACK (ui_flt_manage_option_update
), NULL
);
1506 if(show_account
== TRUE
)
1508 g_signal_connect (data
.CY_option
[FILTER_ACCOUNT
] , "changed", G_CALLBACK (ui_flt_manage_option_update
), NULL
);
1512 g_signal_connect (data
.CY_month
, "changed", G_CALLBACK (ui_flt_manage_period_change
), NULL
);
1513 g_signal_connect (data
.NB_year
, "value-changed", G_CALLBACK (ui_flt_manage_period_change
), NULL
);
1516 gtk_widget_show_all (window
);
1519 if( *data
.filter
->last_tab
!= '\0' )
1520 gtk_stack_set_visible_child_name (GTK_STACK(data
.stack
), data
.filter
->last_tab
);
1521 DB( g_print(" set page '%s'\n", data
.filter
->last_tab
) );
1525 gint retval
; // = 55;
1527 //while( result == 55 )
1529 retval
= gtk_dialog_run (GTK_DIALOG (window
));
1533 case GTK_RESPONSE_ACCEPT
:
1534 //do_application_specific_something ();
1535 ui_flt_manage_get(&data
);
1538 ui_flt_manage_clear(window
, NULL
);
1539 ui_flt_manage_get(&data
);
1542 //do_nothing_since_dialog_was_cancelled ();
1547 // cleanup and destroy
1548 //ui_flt_manage_cleanup(&data, result);
1551 DB( g_print(" free\n") );
1554 DB( g_print(" destroy\n") );
1555 gtk_widget_destroy (window
);
1557 DB( g_print(" all ok\n") );