]> Dogcows Code - chaz/homebank/blob - src/ui-filter.c
import homebank-5.2.4
[chaz/homebank] / src / ui-filter.c
1 /* HomeBank -- Free, easy, personal accounting for everyone.
2 * Copyright (C) 1995-2019 Maxime DOYEN
3 *
4 * This file is part of HomeBank.
5 *
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.
10 *
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.
15 *
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/>.
18 */
19
20
21 #include "homebank.h"
22
23 #include "ui-filter.h"
24 #include "ui-account.h"
25 #include "ui-payee.h"
26 #include "ui-category.h"
27 #include "gtk-dateentry.h"
28
29
30 /****************************************************************************/
31 /* Debug macros */
32 /****************************************************************************/
33 #define MYDEBUG 0
34
35 #if MYDEBUG
36 #define DB(x) (x);
37 #else
38 #define DB(x);
39 #endif
40
41 /* our global datas */
42 extern struct HomeBank *GLOBALS;
43
44
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[];
51
52
53 /* = = = = = = = = = = = = = = = = = = = = */
54
55
56 static void ui_flt_panel_category_get(struct ui_flt_manage_data *data)
57 {
58 gint i;
59
60 DB( g_print("(ui_flt_panel_category) get\n") );
61
62 if(data->filter !=NULL)
63 {
64 GtkTreeModel *model;
65 //GtkTreeSelection *selection;
66 GtkTreeIter iter, child;
67 gint n_child;
68 gboolean valid;
69 gboolean toggled;
70
71
72 // category
73 DB( g_print(" category\n") );
74
75 model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_cat));
76 //selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_cat));
77 i=0; valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter);
78 while (valid)
79 {
80 Category *catitem;
81
82 gtk_tree_model_get (model, &iter,
83 LST_DEFCAT_TOGGLE, &toggled,
84 LST_DEFCAT_DATAS, &catitem,
85 -1);
86
87 //data->filter->cat[i] = gtk_tree_selection_iter_is_selected(selection, &iter);
88 //data->filter->cat[i] = toggled;
89 catitem->flt_select = toggled;
90
91 n_child = gtk_tree_model_iter_n_children (GTK_TREE_MODEL(model), &iter);
92 gtk_tree_model_iter_children (GTK_TREE_MODEL(model), &child, &iter);
93 while(n_child > 0)
94 {
95 i++;
96
97 gtk_tree_model_get (model, &child,
98 LST_DEFCAT_TOGGLE, &toggled,
99 LST_DEFCAT_DATAS, &catitem,
100 -1);
101
102
103 //data->filter->cat[i] = toggled;
104 //data->filter->cat[i] = gtk_tree_selection_iter_is_selected(selection, &child);
105 catitem->flt_select = toggled;
106
107 n_child--;
108 gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &child);
109 }
110
111 /* Make iter point to the next row in the list store */
112 i++; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
113 }
114
115 }
116 }
117
118
119 static void ui_flt_panel_category_set(struct ui_flt_manage_data *data)
120 {
121
122 DB( g_print("(ui_flt_panel_category) set\n") );
123
124 if(data->filter != NULL)
125 {
126 GtkTreeModel *model;
127 //GtkTreeSelection *selection;
128 GtkTreeIter iter, child;
129
130 gint n_child;
131 gboolean valid;
132 gint i;
133
134
135 // category
136 DB( g_print(" category\n") );
137
138 model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_cat));
139 //selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_cat));
140 i=0; valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter);
141 while (valid)
142 {
143 Category *catitem;
144
145 gtk_tree_model_get (model, &iter,
146 LST_DEFCAT_DATAS, &catitem,
147 -1);
148
149 if(catitem->flt_select == TRUE)
150 gtk_tree_store_set (GTK_TREE_STORE (model), &iter, LST_DEFCAT_TOGGLE, TRUE, -1);
151
152 n_child = gtk_tree_model_iter_n_children (GTK_TREE_MODEL(model), &iter);
153 gtk_tree_model_iter_children (GTK_TREE_MODEL(model), &child, &iter);
154 while(n_child > 0)
155 {
156 i++;
157
158 gtk_tree_model_get (model, &child,
159 LST_DEFCAT_DATAS, &catitem,
160 -1);
161
162 if(catitem->flt_select == TRUE)
163 gtk_tree_store_set (GTK_TREE_STORE (model), &child, LST_DEFCAT_TOGGLE, TRUE, -1);
164
165 n_child--;
166 gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &child);
167 }
168
169 /* Make iter point to the next row in the list store */
170 i++; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
171 }
172
173
174 }
175 }
176
177
178
179 static void ui_flt_manage_cat_select(GtkWidget *widget, gpointer user_data)
180 {
181 struct ui_flt_manage_data *data;
182 gint select = GPOINTER_TO_INT(user_data);
183 GtkTreeModel *model;
184 GtkTreeIter iter, child;
185 gboolean valid;
186 gint n_child;
187 gboolean toggle;
188
189 DB( g_print("(ui_flt_manage) pay select\n") );
190
191 data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
192
193 model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_cat));
194 valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter);
195 while (valid)
196 {
197 switch(select)
198 {
199 case BUTTON_ALL:
200 gtk_tree_store_set (GTK_TREE_STORE (model), &iter, LST_DEFCAT_TOGGLE, TRUE, -1);
201 break;
202 case BUTTON_NONE:
203 gtk_tree_store_set (GTK_TREE_STORE (model), &iter, LST_DEFCAT_TOGGLE, FALSE, -1);
204 break;
205 case BUTTON_INVERT:
206 gtk_tree_model_get (model, &iter, LST_DEFCAT_TOGGLE, &toggle, -1);
207 toggle ^= 1;
208 gtk_tree_store_set (GTK_TREE_STORE (model), &iter, LST_DEFCAT_TOGGLE, toggle, -1);
209 break;
210 }
211
212 n_child = gtk_tree_model_iter_n_children (GTK_TREE_MODEL(model), &iter);
213 gtk_tree_model_iter_children (GTK_TREE_MODEL(model), &child, &iter);
214 while(n_child > 0)
215 {
216
217 switch(select)
218 {
219 case BUTTON_ALL:
220 gtk_tree_store_set (GTK_TREE_STORE (model), &child, LST_DEFCAT_TOGGLE, TRUE, -1);
221 break;
222 case BUTTON_NONE:
223 gtk_tree_store_set (GTK_TREE_STORE (model), &child, LST_DEFCAT_TOGGLE, FALSE, -1);
224 break;
225 case BUTTON_INVERT:
226 gtk_tree_model_get (model, &child, LST_DEFCAT_TOGGLE, &toggle, -1);
227 toggle ^= 1;
228 gtk_tree_store_set (GTK_TREE_STORE (model), &child, LST_DEFCAT_TOGGLE, toggle, -1);
229 break;
230 }
231
232 n_child--;
233 gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &child);
234 }
235
236 valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
237 }
238
239 }
240
241
242
243 static gboolean
244 ui_flt_panel_category_activate_link (GtkWidget *label,
245 const gchar *uri,
246 gpointer data)
247 {
248 DB( g_print(" comboboxlink '%s' \n", uri) );
249
250 if (g_strcmp0 (uri, "all") == 0)
251 {
252 ui_flt_manage_cat_select(label, GINT_TO_POINTER(BUTTON_ALL) );
253 }
254 else
255 if (g_strcmp0 (uri, "non") == 0)
256 {
257 ui_flt_manage_cat_select(label, GINT_TO_POINTER(BUTTON_NONE) );
258 }
259 else
260 if (g_strcmp0 (uri, "inv") == 0)
261 {
262 ui_flt_manage_cat_select(label, GINT_TO_POINTER(BUTTON_INVERT) );
263 }
264
265 return TRUE;
266 }
267
268
269 static GtkWidget *
270 ui_flt_panel_category_new (struct ui_flt_manage_data *data)
271 {
272 GtkWidget *scrollwin, *hbox, *vbox, *label;
273
274 vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL);
275
276 label = make_label (_("Categories"), 0, 0);
277 gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_SCALE, PANGO_SCALE_LARGE, -1);
278 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
279
280 hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_MEDIUM);
281 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
282
283 label = make_label (_("Select:"), 0, 0.5);
284 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
285
286 label = make_clicklabel("all", _("All"));
287 data->BT_cat[BUTTON_ALL] = label;
288 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
289 g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_category_activate_link), NULL);
290
291 label = make_clicklabel("non", _("None"));
292 data->BT_cat[BUTTON_NONE] = label;
293 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
294 g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_category_activate_link), NULL);
295
296 label = make_clicklabel("inv", _("Invert"));
297 data->BT_cat[BUTTON_INVERT] = label;
298 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
299 g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_category_activate_link), NULL);
300
301
302 scrollwin = gtk_scrolled_window_new(NULL,NULL);
303 gtk_box_pack_start (GTK_BOX (vbox), scrollwin, TRUE, TRUE, 0);
304
305 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
306 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin), GTK_SHADOW_ETCHED_IN);
307 //gtk_container_set_border_width (GTK_CONTAINER(scrollwin), SPACING_SMALL);
308
309 data->LV_cat = (GtkWidget *)ui_cat_listview_new(TRUE, FALSE);
310 gtk_container_add(GTK_CONTAINER(scrollwin), data->LV_cat);
311
312
313 return(vbox);
314 }
315
316
317 /* = = = = = = = = = = = = = = = = */
318
319
320 static void ui_flt_manage_pay_select(GtkWidget *widget, gpointer user_data)
321 {
322 struct ui_flt_manage_data *data;
323 gint select = GPOINTER_TO_INT(user_data);
324 GtkTreeModel *model;
325 GtkTreeIter iter;
326 gboolean valid;
327 gboolean toggle;
328
329 DB( g_print("(ui_flt_manage) pay select\n") );
330
331 data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
332
333 model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_pay));
334 valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter);
335 while (valid)
336 {
337 switch(select)
338 {
339 case BUTTON_ALL:
340 gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFPAY_TOGGLE, TRUE, -1);
341 break;
342 case BUTTON_NONE:
343 gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFPAY_TOGGLE, FALSE, -1);
344 break;
345 case BUTTON_INVERT:
346 gtk_tree_model_get (model, &iter, LST_DEFPAY_TOGGLE, &toggle, -1);
347 toggle ^= 1;
348 gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFPAY_TOGGLE, toggle, -1);
349 break;
350 }
351 valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
352 }
353 }
354
355
356
357 static gboolean
358 ui_flt_panel_payee_activate_link (GtkWidget *label,
359 const gchar *uri,
360 gpointer data)
361 {
362 DB( g_print(" comboboxlink '%s' \n", uri) );
363
364 if (g_strcmp0 (uri, "all") == 0)
365 {
366 ui_flt_manage_pay_select(label, GINT_TO_POINTER(BUTTON_ALL) );
367 }
368 else
369 if (g_strcmp0 (uri, "non") == 0)
370 {
371 ui_flt_manage_pay_select(label, GINT_TO_POINTER(BUTTON_NONE) );
372 }
373 else
374 if (g_strcmp0 (uri, "inv") == 0)
375 {
376 ui_flt_manage_pay_select(label, GINT_TO_POINTER(BUTTON_INVERT) );
377 }
378
379 return TRUE;
380 }
381
382
383 static GtkWidget *
384 ui_flt_panel_payee_new (struct ui_flt_manage_data *data)
385 {
386 GtkWidget *scrollwin, *hbox, *vbox, *label;
387
388 vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL);
389
390 label = make_label (_("Payees"), 0, 0);
391 gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_SCALE, PANGO_SCALE_LARGE, -1);
392 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
393
394 hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_MEDIUM);
395 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
396
397 label = make_label (_("Select:"), 0, 0.5);
398 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
399
400 label = make_clicklabel("all", _("All"));
401 data->BT_pay[BUTTON_ALL] = label;
402 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
403 g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_payee_activate_link), NULL);
404
405 label = make_clicklabel("non", _("None"));
406 data->BT_pay[BUTTON_NONE] = label;
407 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
408 g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_payee_activate_link), NULL);
409
410 label = make_clicklabel("inv", _("Invert"));
411 data->BT_pay[BUTTON_INVERT] = label;
412 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
413 g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_payee_activate_link), NULL);
414
415 scrollwin = gtk_scrolled_window_new(NULL,NULL);
416 gtk_box_pack_start (GTK_BOX (vbox), scrollwin, TRUE, TRUE, 0);
417
418 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
419 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin), GTK_SHADOW_ETCHED_IN);
420 //gtk_container_set_border_width (GTK_CONTAINER(scrollwin), SPACING_SMALL);
421
422 data->LV_pay = (GtkWidget *)ui_pay_listview_new(TRUE, FALSE);
423 gtk_container_add(GTK_CONTAINER(scrollwin), data->LV_pay);
424
425 return(vbox);
426 }
427
428
429
430
431
432
433
434 /* = = = = = = = = = = = = = = = = */
435
436 static void ui_flt_manage_acc_select(GtkWidget *widget, gpointer user_data)
437 {
438 struct ui_flt_manage_data *data;
439 gint select = GPOINTER_TO_INT(user_data);
440 GtkTreeModel *model;
441 GtkTreeIter iter;
442 gboolean valid;
443 gboolean toggle;
444
445 DB( g_print("(ui_flt_manage) acc select\n") );
446
447 data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
448
449 model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_acc));
450 valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter);
451 while (valid)
452 {
453 switch(select)
454 {
455 case BUTTON_ALL:
456 gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFACC_TOGGLE, TRUE, -1);
457 break;
458 case BUTTON_NONE:
459 gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFACC_TOGGLE, FALSE, -1);
460 break;
461 case BUTTON_INVERT:
462 gtk_tree_model_get (model, &iter, LST_DEFACC_TOGGLE, &toggle, -1);
463 toggle ^= 1;
464 gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFACC_TOGGLE, toggle, -1);
465 break;
466 }
467 valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
468 }
469 }
470
471
472 static gboolean
473 ui_flt_panel_account_activate_link (GtkWidget *label,
474 const gchar *uri,
475 gpointer data)
476 {
477 DB( g_print(" comboboxlink '%s' \n", uri) );
478
479 if (g_strcmp0 (uri, "all") == 0)
480 {
481 ui_flt_manage_acc_select(label, GINT_TO_POINTER(BUTTON_ALL) );
482 }
483 else
484 if (g_strcmp0 (uri, "non") == 0)
485 {
486 ui_flt_manage_acc_select(label, GINT_TO_POINTER(BUTTON_NONE) );
487 }
488 else
489 if (g_strcmp0 (uri, "inv") == 0)
490 {
491 ui_flt_manage_acc_select(label, GINT_TO_POINTER(BUTTON_INVERT) );
492 }
493
494 return TRUE;
495 }
496
497 static GtkWidget *
498 ui_flt_panel_account_new (struct ui_flt_manage_data *data)
499 {
500 GtkWidget *scrollwin, *hbox, *vbox, *label;
501
502 vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL);
503
504 label = make_label (_("Accounts"), 0, 0);
505 gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_SCALE, PANGO_SCALE_LARGE, -1);
506 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
507
508 hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_MEDIUM);
509 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
510
511 label = make_label (_("Select:"), 0, 0.5);
512 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
513
514 label = make_clicklabel("all", _("All"));
515 data->BT_acc[BUTTON_ALL] = label;
516 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
517 g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_account_activate_link), NULL);
518
519 label = make_clicklabel("non", _("None"));
520 data->BT_acc[BUTTON_NONE] = label;
521 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
522 g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_account_activate_link), NULL);
523
524 label = make_clicklabel("inv", _("Invert"));
525 data->BT_acc[BUTTON_INVERT] = label;
526 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
527 g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_account_activate_link), NULL);
528
529 scrollwin = gtk_scrolled_window_new(NULL,NULL);
530 gtk_box_pack_start (GTK_BOX (vbox), scrollwin, TRUE, TRUE, 0);
531
532 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
533 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin), GTK_SHADOW_ETCHED_IN);
534 //gtk_container_set_border_width (GTK_CONTAINER(scrollwin), SPACING_SMALL);
535
536 data->LV_acc = (GtkWidget *)ui_acc_listview_new(TRUE);
537 gtk_container_add(GTK_CONTAINER(scrollwin), data->LV_acc);
538
539 return(vbox);
540 }
541
542 /* = = = = = = = = = = = = = = = = */
543
544
545
546
547
548
549
550 /*
551 **
552 */
553 static void ui_flt_manage_option_update(GtkWidget *widget, gpointer user_data)
554 {
555 struct ui_flt_manage_data *data;
556 gint active, i;
557 gboolean sensitive;
558
559 DB( g_print("(ui_flt_manage) update\n") );
560
561 data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
562
563 // status
564 active = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_option[FILTER_STATUS]));
565 sensitive = active == 0 ? FALSE : TRUE;
566 gtk_widget_set_sensitive(data->CM_reconciled, sensitive);
567 gtk_widget_set_sensitive(data->CM_cleared, sensitive);
568
569 // date
570 active = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_option[FILTER_DATE]));
571 sensitive = active == 0 ? FALSE : TRUE;
572 gtk_widget_set_sensitive(data->PO_mindate, sensitive);
573 gtk_widget_set_sensitive(data->PO_maxdate, sensitive);
574 gtk_widget_set_sensitive(data->CY_month, sensitive);
575 gtk_widget_set_sensitive(data->NB_year, sensitive);
576
577 // amount
578 active = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_option[FILTER_AMOUNT]));
579 sensitive = active == 0 ? FALSE : TRUE;
580 gtk_widget_set_sensitive(data->ST_minamount, sensitive);
581 gtk_widget_set_sensitive(data->ST_maxamount, sensitive);
582
583 // text
584 active = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_option[FILTER_TEXT]));
585 sensitive = active == 0 ? FALSE : TRUE;
586 gtk_widget_set_sensitive(data->CM_exact, sensitive);
587 gtk_widget_set_sensitive(data->ST_memo, sensitive);
588 gtk_widget_set_sensitive(data->ST_info, sensitive);
589 gtk_widget_set_sensitive(data->ST_tag, sensitive);
590
591 //paymode
592 active = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_option[FILTER_PAYMODE]));
593 sensitive = active == 0 ? FALSE : TRUE;
594 for(i=0;i<NUM_PAYMODE_MAX;i++)
595 {
596 gtk_widget_set_sensitive(data->CM_paymode[i], sensitive);
597 }
598
599 //account
600 if(data->show_account == TRUE)
601 {
602 active = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_option[FILTER_ACCOUNT]));
603 sensitive = active == 0 ? FALSE : TRUE;
604 gtk_widget_set_sensitive(data->LV_acc, sensitive);
605 for(i=0;i<MAX_BUTTON;i++)
606 {
607 gtk_widget_set_sensitive(data->BT_acc[i], sensitive);
608 }
609
610
611 }
612
613 //payee
614 active = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_option[FILTER_PAYEE]));
615 sensitive = active == 0 ? FALSE : TRUE;
616 gtk_widget_set_sensitive(data->LV_pay, sensitive);
617 for(i=0;i<MAX_BUTTON;i++)
618 {
619 gtk_widget_set_sensitive(data->BT_pay[i], sensitive);
620 }
621
622 //category
623 active = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_option[FILTER_CATEGORY]));
624 sensitive = active == 0 ? FALSE : TRUE;
625 gtk_widget_set_sensitive(data->LV_cat, sensitive);
626 for(i=0;i<MAX_BUTTON;i++)
627 {
628 gtk_widget_set_sensitive(data->BT_cat[i], sensitive);
629 }
630
631
632
633 }
634
635
636 /*
637 **
638 */
639 static void ui_flt_manage_get(struct ui_flt_manage_data *data)
640 {
641 gint i;
642 gchar *txt;
643
644 DB( g_print("(ui_flt_manage) get\n") );
645
646 if(data->filter !=NULL)
647 {
648 GtkTreeModel *model;
649 //GtkTreeSelection *selection;
650 GtkTreeIter iter;
651
652 gboolean valid;
653 gboolean toggled;
654
655 for(i=0;i<FILTER_MAX;i++)
656 {
657 if(data->show_account == FALSE && i == FILTER_ACCOUNT)
658 continue;
659
660 data->filter->option[i] = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_option[i]));
661 }
662
663 //date
664 DB( g_print(" date\n") );
665 data->filter->mindate = gtk_date_entry_get_date(GTK_DATE_ENTRY(data->PO_mindate));
666 data->filter->maxdate = gtk_date_entry_get_date(GTK_DATE_ENTRY(data->PO_maxdate));
667
668 //status
669 DB( g_print(" status\n") );
670 data->filter->reconciled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_reconciled));
671 data->filter->cleared = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_cleared));
672
673 data->filter->forceadd = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_forceadd));
674 data->filter->forcechg = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_forcechg));
675 data->filter->forceremind = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_forceremind));
676
677 //paymode
678 DB( g_print(" paymode\n") );
679 for(i=0;i<NUM_PAYMODE_MAX;i++)
680 data->filter->paymode[i] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_paymode[i]));
681
682 //amount
683 data->filter->minamount = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->ST_minamount));
684 data->filter->maxamount = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->ST_maxamount));
685
686 //text:memo
687 data->filter->exact = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_exact));
688 //free any previous string
689 if( data->filter->memo )
690 {
691 g_free(data->filter->memo);
692 data->filter->memo = NULL;
693 }
694 txt = (gchar *)gtk_entry_get_text(GTK_ENTRY(data->ST_memo));
695
696 if (txt && *txt) // ignore if entry is empty
697 {
698 data->filter->memo = g_strdup(txt);
699 }
700
701 //text:info
702 //free any previous string
703 if( data->filter->info )
704 {
705 g_free(data->filter->info);
706 data->filter->info = NULL;
707 }
708 txt = (gchar *)gtk_entry_get_text(GTK_ENTRY(data->ST_info));
709 // ignore if entry is empty
710 if (txt && *txt)
711 {
712 data->filter->info = g_strdup(txt);
713 }
714
715 //text:tag
716 //free any previous string
717 if( data->filter->tag )
718 {
719 g_free(data->filter->tag);
720 data->filter->tag = NULL;
721 }
722 txt = (gchar *)gtk_entry_get_text(GTK_ENTRY(data->ST_tag));
723 // ignore if entry is empty
724 if (txt && *txt)
725 {
726 data->filter->tag = g_strdup(txt);
727 }
728
729
730 // account
731 if(data->show_account == TRUE)
732 {
733 DB( g_print(" account\n") );
734
735 model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_acc));
736 //selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_acc));
737 i=0; valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter);
738 while (valid)
739 {
740 Account *accitem;
741
742 gtk_tree_model_get (model, &iter,
743 LST_DEFACC_TOGGLE, &toggled,
744 LST_DEFACC_DATAS, &accitem,
745 -1);
746
747 //data->filter->acc[i] = gtk_tree_selection_iter_is_selected(selection, &iter);
748 accitem->flt_select = toggled;
749
750 /* Make iter point to the next row in the list store */
751 i++; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
752 }
753 }
754
755 // payee
756 DB( g_print(" payee\n") );
757
758 model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_pay));
759 //selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_pay));
760 i=0; valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter);
761 while (valid)
762 {
763 Payee *payitem;
764
765 gtk_tree_model_get (model, &iter,
766 LST_DEFPAY_TOGGLE, &toggled,
767 LST_DEFPAY_DATAS, &payitem,
768 -1);
769
770 //data->filter->pay[i] = gtk_tree_selection_iter_is_selected(selection, &iter);
771 payitem->flt_select = toggled;
772
773 /* Make iter point to the next row in the list store */
774 i++; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
775 }
776
777 // category
778 DB( g_print(" category\n") );
779
780 ui_flt_panel_category_get(data);
781
782 // active tab
783 g_strlcpy(data->filter->last_tab, gtk_stack_get_visible_child_name(GTK_STACK(data->stack)), 8);
784 DB( g_print(" page is '%s'\n", data->filter->last_tab) );
785
786
787 }
788 }
789
790
791 /*
792 **
793 */
794 static void ui_flt_manage_set(struct ui_flt_manage_data *data)
795 {
796
797 DB( g_print("(ui_flt_manage) set\n") );
798
799 if(data->filter != NULL)
800 {
801 GtkTreeModel *model;
802 //GtkTreeSelection *selection;
803 GtkTreeIter iter;
804 GDate *date;
805
806 gboolean valid;
807 gint i;
808
809 DB( g_print(" options\n") );
810
811 for(i=0;i<FILTER_MAX;i++)
812 {
813 if(data->show_account == FALSE && i == FILTER_ACCOUNT)
814 continue;
815
816 gtk_combo_box_set_active(GTK_COMBO_BOX(data->CY_option[i]), data->filter->option[i]);
817 }
818
819 //DB( g_print(" setdate %d to %x\n", data->filter->mindate, data->PO_mindate) );
820 //DB( g_print(" setdate %d to %x\n", 0, data->PO_mindate) );
821 //date
822 DB( g_print(" date\n") );
823 gtk_date_entry_set_date(GTK_DATE_ENTRY(data->PO_mindate), data->filter->mindate);
824 gtk_date_entry_set_date(GTK_DATE_ENTRY(data->PO_maxdate), data->filter->maxdate);
825 date = g_date_new_julian(data->filter->maxdate);
826 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->NB_year), g_date_get_year(date));
827 g_date_free(date);
828
829 //status
830 DB( g_print(" status\n") );
831 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_reconciled), data->filter->reconciled);
832
833
834 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_forceadd), data->filter->forceadd);
835 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_forcechg), data->filter->forcechg);
836 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_forceremind), data->filter->forceremind);
837
838 //paymode
839 DB( g_print(" paymode\n") );
840
841 for(i=0;i<NUM_PAYMODE_MAX;i++)
842 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_paymode[i]), data->filter->paymode[i]);
843
844 //amount
845 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->ST_minamount), data->filter->minamount);
846 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->ST_maxamount), data->filter->maxamount);
847
848 //text
849 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_exact), data->filter->exact);
850 gtk_entry_set_text(GTK_ENTRY(data->ST_info), (data->filter->info != NULL) ? data->filter->info : "");
851 gtk_entry_set_text(GTK_ENTRY(data->ST_memo), (data->filter->memo != NULL) ? data->filter->memo : "");
852 gtk_entry_set_text(GTK_ENTRY(data->ST_tag), (data->filter->tag != NULL) ? data->filter->tag : "");
853
854 //account
855 if(data->show_account == TRUE)
856 {
857 DB( g_print(" account\n") );
858
859 model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_acc));
860 //selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_acc));
861 i=0; valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter);
862 while (valid)
863 {
864 Account *accitem;
865
866 gtk_tree_model_get (model, &iter,
867 LST_DEFACC_DATAS, &accitem,
868 -1);
869
870 if(accitem->flt_select == TRUE)
871 //gtk_tree_selection_select_iter(selection, &iter);
872 gtk_list_store_set (GTK_LIST_STORE (model), &iter,
873 LST_DEFACC_TOGGLE, TRUE, -1);
874
875 /* Make iter point to the next row in the list store */
876 i++; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
877 }
878 }
879
880 // payee
881 DB( g_print(" payee\n") );
882
883 model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_pay));
884 //selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_pay));
885 i=0; valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter);
886 while (valid)
887 {
888 Payee *payitem;
889
890 gtk_tree_model_get (model, &iter,
891 LST_DEFPAY_DATAS, &payitem,
892 -1);
893
894 if(payitem->flt_select == TRUE)
895 gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFPAY_TOGGLE, TRUE, -1);
896
897 /* Make iter point to the next row in the list store */
898 i++; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
899 }
900
901 // category
902 DB( g_print(" category\n") );
903
904 ui_flt_panel_category_set(data);
905
906 }
907 }
908
909
910 /*
911 **
912 */
913 static void ui_flt_manage_clear(GtkWidget *widget, gpointer user_data)
914 {
915 struct ui_flt_manage_data *data;
916
917 data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(GTK_WIDGET(widget), GTK_TYPE_WINDOW)), "inst_data");
918
919 DB( g_print("(ui_flt_manage) clear\n") );
920
921 filter_reset(data->filter);
922
923 ui_flt_manage_set(data);
924
925 }
926
927
928 /*
929 **
930 */
931 static void ui_flt_manage_setup(struct ui_flt_manage_data *data)
932 {
933
934 DB( g_print("(ui_flt_manage) setup\n") );
935
936 if(data->show_account == TRUE && data->LV_acc != NULL)
937 {
938 //gtk_tree_selection_set_mode(GTK_TREE_SELECTION(gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_acc))), GTK_SELECTION_MULTIPLE);
939
940 ui_acc_listview_populate(data->LV_acc, ACC_LST_INSERT_REPORT);
941 //populate_view_acc(data->LV_acc, GLOBALS->acc_list, FALSE);
942 }
943
944 if(data->LV_pay)
945 {
946 //gtk_tree_selection_set_mode(GTK_TREE_SELECTION(gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_pay))), GTK_SELECTION_MULTIPLE);
947
948 ui_pay_listview_populate(data->LV_pay, NULL);
949 //populate_view_pay(data->LV_pay, GLOBALS->pay_list, FALSE);
950 }
951
952 if(data->LV_cat)
953 {
954 //gtk_tree_selection_set_mode(GTK_TREE_SELECTION(gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_cat))), GTK_SELECTION_MULTIPLE);
955
956 //populate_view_cat(data->LV_cat, GLOBALS->cat_list, FALSE);
957 ui_cat_listview_populate(data->LV_cat, CAT_TYPE_ALL);
958 gtk_tree_view_expand_all (GTK_TREE_VIEW(data->LV_cat));
959 }
960 }
961
962
963
964
965
966
967 static GtkWidget *ui_flt_manage_page_category (struct ui_flt_manage_data *data)
968 {
969 GtkWidget *container, *panel, *hbox, *label;
970
971 container = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL);
972 gtk_container_set_border_width (GTK_CONTAINER (container), SPACING_MEDIUM);
973
974 hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_SMALL);
975 gtk_box_pack_start (GTK_BOX (container), hbox, FALSE, FALSE, 0);
976
977 label = make_label_widget(_("_Option:"));
978 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
979 data->CY_option[FILTER_CATEGORY] = make_nainex(label);
980 gtk_box_pack_start (GTK_BOX (hbox), data->CY_option[FILTER_CATEGORY], TRUE, TRUE, 0);
981
982 panel = ui_flt_panel_category_new(data);
983 gtk_box_pack_start (GTK_BOX (container), panel, TRUE, TRUE, 0);
984
985 return(container);
986 }
987
988
989 static GtkWidget *ui_flt_manage_page_payee (struct ui_flt_manage_data *data)
990 {
991 GtkWidget *container, *panel, *hbox, *label;
992
993 container = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL);
994 gtk_container_set_border_width (GTK_CONTAINER (container), SPACING_MEDIUM);
995
996 hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_SMALL);
997 gtk_box_pack_start (GTK_BOX (container), hbox, FALSE, FALSE, 0);
998
999 label = make_label_widget(_("_Option:"));
1000 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
1001 data->CY_option[FILTER_PAYEE] = make_nainex(label);
1002 gtk_box_pack_start (GTK_BOX (hbox), data->CY_option[FILTER_PAYEE], TRUE, TRUE, 0);
1003
1004 panel = ui_flt_panel_payee_new(data);
1005 gtk_box_pack_start (GTK_BOX (container), panel, TRUE, TRUE, 0);
1006
1007 return(container);
1008 }
1009
1010 /*
1011 ** account filter
1012 */
1013 static GtkWidget *ui_flt_manage_page_account (struct ui_flt_manage_data *data)
1014 {
1015 GtkWidget *container, *panel, *hbox, *label;
1016
1017 container = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL);
1018 gtk_container_set_border_width (GTK_CONTAINER (container), SPACING_MEDIUM);
1019
1020 hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_SMALL);
1021 gtk_box_pack_start (GTK_BOX (container), hbox, FALSE, FALSE, 0);
1022
1023 label = make_label_widget(_("_Option:"));
1024 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
1025 data->CY_option[FILTER_ACCOUNT] = make_nainex(label);
1026 gtk_box_pack_start (GTK_BOX (hbox), data->CY_option[FILTER_ACCOUNT], TRUE, TRUE, 0);
1027
1028 panel = ui_flt_panel_account_new(data);
1029 gtk_box_pack_start (GTK_BOX (container), panel, TRUE, TRUE, 0);
1030
1031 return(container);
1032 }
1033
1034
1035 static void get_period_minmax(guint month, guint year, guint32 *mindate, guint32 *maxdate)
1036 {
1037 GDate *date;
1038
1039 date = g_date_new();
1040 if(month)
1041 {
1042 // mindate is month 1, year :: maxdate is last day of month, year
1043 g_date_set_dmy(date, 1, month, year);
1044 *mindate = g_date_get_julian(date);
1045 g_date_add_days(date, g_date_get_days_in_month(month, year));
1046 *maxdate = g_date_get_julian(date)-1;
1047 }
1048 else
1049 {
1050 g_date_set_dmy(date, 1, 1, year);
1051 *mindate = g_date_get_julian(date);
1052 g_date_set_dmy(date, 31, 12, year);
1053 *maxdate = g_date_get_julian(date);
1054 }
1055 g_date_free(date);
1056 }
1057
1058
1059
1060 static void ui_flt_manage_period_change(GtkWidget *widget, gpointer user_data)
1061 {
1062 struct ui_flt_manage_data *data;
1063 gint month, year;
1064
1065 DB( g_print("(ui_flt_manage) period change\n") );
1066
1067 data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
1068
1069
1070 month = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_month));
1071 year = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->NB_year));
1072
1073 DB( g_print(" month=%d, year=%d\n", month, year) );
1074
1075
1076 if(month != 0)
1077 get_period_minmax(month-1, year, &data->filter->mindate, &data->filter->maxdate);
1078 else
1079 get_period_minmax(0, year, &data->filter->mindate, &data->filter->maxdate);
1080
1081 gtk_date_entry_set_date(GTK_DATE_ENTRY(data->PO_mindate), data->filter->mindate);
1082 gtk_date_entry_set_date(GTK_DATE_ENTRY(data->PO_maxdate), data->filter->maxdate);
1083 }
1084
1085
1086 static GtkWidget *ui_flt_manage_part_date(struct ui_flt_manage_data *data)
1087 {
1088 GtkWidget *table, *label;
1089 gint row;
1090
1091 table = gtk_grid_new ();
1092 gtk_grid_set_row_spacing (GTK_GRID (table), SPACING_SMALL);
1093 gtk_grid_set_column_spacing (GTK_GRID (table), SPACING_MEDIUM);
1094 gtk_container_set_border_width(GTK_CONTAINER(table), SPACING_MEDIUM);
1095
1096 row = 0;
1097 label = make_label_widget(_("_Option:"));
1098 //----------------------------------------- l, r, t, b
1099 gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
1100 data->CY_option[FILTER_DATE] = make_nainex(label);
1101 gtk_grid_attach (GTK_GRID (table), data->CY_option[FILTER_DATE], 2, row, 1, 1);
1102
1103 row++;
1104 label = make_label (_("Dates"), 0, 0);
1105 gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_SCALE, PANGO_SCALE_LARGE, -1);
1106 gtk_grid_attach (GTK_GRID (table), label, 0, row, 3, 1);
1107
1108 row++;
1109 label = make_label_widget(_("_From:"));
1110 gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1);
1111 data->PO_mindate = gtk_date_entry_new();
1112 gtk_grid_attach (GTK_GRID (table), data->PO_mindate, 1, row, 2, 1);
1113
1114 row++;
1115 label = make_label_widget(_("_To:"));
1116 gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1);
1117 data->PO_maxdate = gtk_date_entry_new();
1118 gtk_grid_attach (GTK_GRID (table), data->PO_maxdate, 1, row, 2, 1);
1119
1120 row++;
1121 label = make_label_widget(_("_Month:"));
1122 gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1);
1123 data->CY_month = make_cycle(label, CYA_SELECT);
1124 gtk_grid_attach (GTK_GRID (table), data->CY_month, 1, row, 2, 1);
1125
1126 row++;
1127 label = make_label_widget(_("_Year:"));
1128 gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1);
1129 data->NB_year = make_year(label);
1130 gtk_grid_attach (GTK_GRID (table), data->NB_year, 1, row, 2, 1);
1131
1132 return table;
1133 }
1134
1135
1136 static GtkWidget *ui_flt_manage_part_text(struct ui_flt_manage_data *data)
1137 {
1138 GtkWidget *table, *label;
1139 gint row;
1140
1141 table = gtk_grid_new ();
1142 gtk_grid_set_row_spacing (GTK_GRID (table), SPACING_SMALL);
1143 gtk_grid_set_column_spacing (GTK_GRID (table), SPACING_MEDIUM);
1144 gtk_container_set_border_width(GTK_CONTAINER(table), SPACING_MEDIUM);
1145
1146 row = 0;
1147 label = make_label_widget(_("_Option:"));
1148 //----------------------------------------- l, r, t, b
1149 gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
1150 data->CY_option[FILTER_TEXT] = make_nainex(label);
1151 gtk_grid_attach (GTK_GRID (table), data->CY_option[FILTER_TEXT], 2, row, 1, 1);
1152
1153 row++;
1154 label = make_label (_("Texts"), 0, 0);
1155 gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_SCALE, PANGO_SCALE_LARGE, -1);
1156 gtk_grid_attach (GTK_GRID (table), label, 0, row, 3, 1);
1157
1158 row++;
1159 label = make_label_widget(_("_Memo:"));
1160 gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1);
1161 data->ST_memo = make_string(label);
1162 gtk_widget_set_hexpand (data->ST_memo, TRUE);
1163 gtk_grid_attach (GTK_GRID (table), data->ST_memo, 1, row, 2, 1);
1164
1165 row++;
1166 label = make_label_widget(_("_Info:"));
1167 //----------------------------------------- l, r, t, b
1168 gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1);
1169 data->ST_info = make_string(label);
1170 gtk_widget_set_hexpand (data->ST_info, TRUE);
1171 gtk_grid_attach (GTK_GRID (table), data->ST_info, 1, row, 2, 1);
1172
1173 row++;
1174 label = make_label_widget(_("_Tag:"));
1175 //----------------------------------------- l, r, t, b
1176 gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1);
1177 data->ST_tag = make_string(label);
1178 gtk_widget_set_hexpand (data->ST_tag, TRUE);
1179 gtk_grid_attach (GTK_GRID (table), data->ST_tag, 1, row, 2, 1);
1180
1181 row++;
1182 data->CM_exact = gtk_check_button_new_with_mnemonic (_("Case _sensitive"));
1183 gtk_grid_attach (GTK_GRID (table), data->CM_exact, 1, row, 2, 1);
1184
1185
1186 return table;
1187 }
1188
1189 static GtkWidget *ui_flt_manage_part_amount(struct ui_flt_manage_data *data)
1190 {
1191 GtkWidget *table, *label;
1192 gint row;
1193
1194 table = gtk_grid_new ();
1195 gtk_grid_set_row_spacing (GTK_GRID (table), SPACING_SMALL);
1196 gtk_grid_set_column_spacing (GTK_GRID (table), SPACING_MEDIUM);
1197 gtk_container_set_border_width(GTK_CONTAINER(table), SPACING_MEDIUM);
1198
1199 row = 0;
1200 label = make_label_widget(_("_Option:"));
1201 //----------------------------------------- l, r, t, b
1202 gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
1203 data->CY_option[FILTER_AMOUNT] = make_nainex(label);
1204 gtk_grid_attach (GTK_GRID (table), data->CY_option[FILTER_AMOUNT], 2, row, 1, 1);
1205
1206 row++;
1207 label = make_label (_("Amounts"), 0, 0);
1208 gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_SCALE, PANGO_SCALE_LARGE, -1);
1209 gtk_grid_attach (GTK_GRID (table), label, 0, row, 3, 1);
1210
1211 row++;
1212 label = make_label_widget(_("_From:"));
1213 //----------------------------------------- l, r, t, b
1214 gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1);
1215 data->ST_minamount = make_amount(label);
1216 gtk_grid_attach (GTK_GRID (table), data->ST_minamount, 1, row, 2, 1);
1217
1218 row++;
1219 label = make_label_widget(_("_To:"));
1220 gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1);
1221 data->ST_maxamount = make_amount(label);
1222 gtk_grid_attach (GTK_GRID (table), data->ST_maxamount, 1, row, 2, 1);
1223
1224 return table;
1225 }
1226
1227
1228 static GtkWidget *ui_flt_manage_part_status(struct ui_flt_manage_data *data)
1229 {
1230 GtkWidget *table, *label, *vbox, *widget;
1231 gint row;
1232
1233 table = gtk_grid_new ();
1234 gtk_grid_set_row_spacing (GTK_GRID (table), SPACING_SMALL);
1235 gtk_grid_set_column_spacing (GTK_GRID (table), SPACING_MEDIUM);
1236 gtk_container_set_border_width(GTK_CONTAINER(table), SPACING_MEDIUM);
1237
1238 row = 0;
1239 label = make_label_widget(_("_Option:"));
1240 //----------------------------------------- l, r, t, b
1241 gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
1242 data->CY_option[FILTER_STATUS] = make_nainex(label);
1243 gtk_grid_attach (GTK_GRID (table), data->CY_option[FILTER_STATUS], 2, row, 1, 1);
1244
1245 row++;
1246 label = make_label (_("Statuses"), 0, 0);
1247 gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_SCALE, PANGO_SCALE_LARGE, -1);
1248 gtk_grid_attach (GTK_GRID (table), label, 0, row, 3, 1);
1249
1250
1251 row++;
1252 vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1253 gtk_grid_attach (GTK_GRID (table), vbox, 2, row, 1, 1);
1254
1255 widget = gtk_check_button_new_with_mnemonic (_("reconciled"));
1256 data->CM_reconciled = widget;
1257 gtk_box_pack_start (GTK_BOX (vbox), widget, TRUE, TRUE, 0);
1258
1259 widget = gtk_check_button_new_with_mnemonic (_("cleared"));
1260 data->CM_cleared = widget;
1261 gtk_box_pack_start (GTK_BOX (vbox), widget, TRUE, TRUE, 0);
1262
1263 row++;
1264 label = make_label_widget(_("Force:"));
1265 data->LB_force = label;
1266 gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
1267
1268 vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1269 data->GR_force = vbox;
1270 gtk_grid_attach (GTK_GRID (table), vbox, 2, row, 1, 1);
1271
1272 widget = gtk_check_button_new_with_mnemonic (_("display 'Added'"));
1273 data->CM_forceadd = widget;
1274 gtk_box_pack_start (GTK_BOX (vbox), widget, TRUE, TRUE, 0);
1275
1276 widget = gtk_check_button_new_with_mnemonic (_("display 'Edited'"));
1277 data->CM_forcechg = widget;
1278 gtk_box_pack_start (GTK_BOX (vbox), widget, TRUE, TRUE, 0);
1279
1280 widget = gtk_check_button_new_with_mnemonic (_("display 'Remind'"));
1281 data->CM_forceremind = widget;
1282 gtk_box_pack_start (GTK_BOX (vbox), widget, TRUE, TRUE, 0);
1283
1284 return table;
1285 }
1286
1287
1288 static GtkWidget *ui_flt_manage_part_paymode(struct ui_flt_manage_data *data)
1289 {
1290 GtkWidget *table, *label, *table1, *image;
1291 gint i, row;
1292
1293 table = gtk_grid_new ();
1294 gtk_grid_set_row_spacing (GTK_GRID (table), SPACING_SMALL);
1295 gtk_grid_set_column_spacing (GTK_GRID (table), SPACING_MEDIUM);
1296 gtk_container_set_border_width(GTK_CONTAINER(table), SPACING_MEDIUM);
1297
1298 row = 0;
1299 label = make_label_widget(_("_Option:"));
1300 //----------------------------------------- l, r, t, b
1301 gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
1302 data->CY_option[FILTER_PAYMODE] = make_nainex(label);
1303 gtk_grid_attach (GTK_GRID (table), data->CY_option[FILTER_PAYMODE], 2, row, 1, 1);
1304
1305 row++;
1306 label = make_label (_("Payments"), 0, 0);
1307 gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_SCALE, PANGO_SCALE_LARGE, -1);
1308 gtk_grid_attach (GTK_GRID (table), label, 0, row, 3, 1);
1309
1310 row++;
1311 table1 = gtk_grid_new ();
1312 gtk_grid_set_row_spacing (GTK_GRID (table1), SPACING_SMALL);
1313 gtk_grid_set_column_spacing (GTK_GRID (table1), SPACING_SMALL);
1314 gtk_grid_attach (GTK_GRID (table), table1, 1, row, 2, 1);
1315
1316 for(i=0;i<NUM_PAYMODE_MAX;i++)
1317 {
1318 row = i;
1319
1320 image = gtk_image_new_from_icon_name( get_paymode_icon_name(i), GTK_ICON_SIZE_MENU);
1321 gtk_grid_attach (GTK_GRID (table1), image, 0, row, 1, 1);
1322
1323 data->CM_paymode[i] = gtk_check_button_new();
1324 gtk_grid_attach (GTK_GRID (table1), data->CM_paymode[i], 1, row, 1, 1);
1325
1326 label = make_label(_(paymode_label_names[i]), 0.0, 0.5);
1327 gtk_grid_attach (GTK_GRID (table1), label, 2, row, 1, 1);
1328 }
1329
1330 return table;
1331 }
1332
1333
1334 /*
1335 **
1336 */
1337 gint ui_flt_manage_dialog_new(GtkWindow *parentwindow, Filter *filter, gboolean show_account, gboolean txnmode)
1338 {
1339 struct ui_flt_manage_data data;
1340 GtkWidget *window, *content, *mainbox, *box, *sidebar, *stack, *page;
1341 //gint w, h;
1342
1343 //data = g_malloc0(sizeof(struct ui_flt_manage_data));
1344 //if(!data) return NULL;
1345 memset(&data, 0, sizeof(struct ui_flt_manage_data));
1346
1347 data.filter = filter;
1348
1349 window = gtk_dialog_new_with_buttons (_("Edit filter"),
1350 GTK_WINDOW (parentwindow),
1351 0,
1352 _("_Reset"),
1353 55,
1354 _("_Cancel"),
1355 GTK_RESPONSE_REJECT,
1356 _("_OK"),
1357 GTK_RESPONSE_ACCEPT,
1358 NULL);
1359
1360 gtk_window_set_icon_name(GTK_WINDOW (window), ICONNAME_HB_FILTER);
1361
1362 //set a nice dialog size
1363 //gtk_window_get_size(GTK_WINDOW(parentwindow), &w, &h);
1364 //gtk_window_set_default_size (GTK_WINDOW(window), -1, 0.8*h);
1365
1366
1367 //store our window private data
1368 g_object_set_data(G_OBJECT(window), "inst_data", (gpointer)&data);
1369 DB( g_print("(ui_flt_manage) window=%p, inst_data=%p\n", window, &data) );
1370
1371 g_signal_connect (window, "destroy",
1372 G_CALLBACK (gtk_widget_destroyed), &window);
1373
1374 content = gtk_dialog_get_content_area(GTK_DIALOG (window));
1375 mainbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, SPACING_SMALL);
1376 gtk_box_pack_start (GTK_BOX (content), mainbox, TRUE, TRUE, 0);
1377 //gtk_container_set_border_width (GTK_CONTAINER(mainbox), SPACING_MEDIUM);
1378
1379 box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
1380 gtk_box_pack_start (GTK_BOX (mainbox), box, TRUE, TRUE, 0);
1381
1382 sidebar = gtk_stack_sidebar_new ();
1383 gtk_box_pack_start (GTK_BOX (box), sidebar, FALSE, FALSE, 0);
1384
1385
1386 stack = gtk_stack_new ();
1387 gtk_stack_set_transition_type (GTK_STACK (stack), GTK_STACK_TRANSITION_TYPE_SLIDE_UP_DOWN);
1388 gtk_stack_sidebar_set_stack (GTK_STACK_SIDEBAR (sidebar), GTK_STACK (stack));
1389 data.stack = stack;
1390 gtk_box_pack_start (GTK_BOX (box), stack, TRUE, TRUE, 0);
1391
1392
1393 //common (date + status + amount)
1394 /* label = gtk_label_new(_("General"));
1395 page = ui_flt_manage_page_general(&data);
1396 gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label);
1397 */
1398
1399 page = ui_flt_manage_part_date(&data);
1400 //gtk_widget_show(GTK_WIDGET(page));
1401 gtk_stack_add_titled (GTK_STACK (stack), page, "dat", _("Dates"));
1402
1403 page = ui_flt_manage_part_status(&data);
1404 //gtk_widget_show(GTK_WIDGET(page));
1405 gtk_stack_add_titled (GTK_STACK (stack), page, "sta", _("Statuses"));
1406
1407 page = ui_flt_manage_part_paymode(&data);
1408 //gtk_widget_show(GTK_WIDGET(page));
1409 gtk_stack_add_titled (GTK_STACK (stack), page, "pmt", _("Payments"));
1410
1411 page = ui_flt_manage_part_amount(&data);
1412 //gtk_widget_show(GTK_WIDGET(page));
1413 gtk_stack_add_titled (GTK_STACK (stack), page, "amt", _("Amounts"));
1414
1415 page = ui_flt_manage_part_text(&data);
1416 //gtk_widget_show(GTK_WIDGET(page));
1417 gtk_stack_add_titled (GTK_STACK (stack), page, "txt", _("Texts"));
1418
1419 page = ui_flt_manage_page_category(&data);
1420 //gtk_widget_show(GTK_WIDGET(page));
1421 gtk_stack_add_titled (GTK_STACK (stack), page, "cat", _("Categories"));
1422
1423 page = ui_flt_manage_page_payee(&data);
1424 //gtk_widget_show(GTK_WIDGET(page));
1425 gtk_stack_add_titled (GTK_STACK (stack), page, "pay", _("Payees"));
1426
1427 data.show_account = show_account;
1428 if(show_account == TRUE)
1429 {
1430 page = ui_flt_manage_page_account(&data);
1431 //gtk_widget_show(GTK_WIDGET(page));
1432 gtk_stack_add_titled (GTK_STACK (stack), page, "acc", _("Accounts"));
1433 }
1434
1435 //setup, init and show window
1436 ui_flt_manage_setup(&data);
1437 ui_flt_manage_set(&data);
1438
1439 ui_flt_manage_option_update(window, NULL);
1440
1441 /* signal connect */
1442 g_signal_connect (data.CY_option[FILTER_STATUS] , "changed", G_CALLBACK (ui_flt_manage_option_update), NULL);
1443 g_signal_connect (data.CY_option[FILTER_DATE] , "changed", G_CALLBACK (ui_flt_manage_option_update), NULL);
1444 g_signal_connect (data.CY_option[FILTER_AMOUNT] , "changed", G_CALLBACK (ui_flt_manage_option_update), NULL);
1445 g_signal_connect (data.CY_option[FILTER_PAYMODE] , "changed", G_CALLBACK (ui_flt_manage_option_update), NULL);
1446
1447 g_signal_connect (data.CY_option[FILTER_PAYEE] , "changed", G_CALLBACK (ui_flt_manage_option_update), NULL);
1448 g_signal_connect (data.CY_option[FILTER_CATEGORY], "changed", G_CALLBACK (ui_flt_manage_option_update), NULL);
1449 g_signal_connect (data.CY_option[FILTER_TEXT] , "changed", G_CALLBACK (ui_flt_manage_option_update), NULL);
1450
1451 if(show_account == TRUE)
1452 {
1453 g_signal_connect (data.CY_option[FILTER_ACCOUNT] , "changed", G_CALLBACK (ui_flt_manage_option_update), NULL);
1454
1455 }
1456
1457 g_signal_connect (data.CY_month, "changed", G_CALLBACK (ui_flt_manage_period_change), NULL);
1458 g_signal_connect (data.NB_year, "value-changed", G_CALLBACK (ui_flt_manage_period_change), NULL);
1459
1460
1461 gtk_widget_show_all (window);
1462
1463 if(!txnmode)
1464 {
1465 hb_widget_visible (data.LB_force, FALSE);
1466 hb_widget_visible (data.GR_force, FALSE);
1467 }
1468
1469
1470 if( *data.filter->last_tab != '\0' )
1471 gtk_stack_set_visible_child_name (GTK_STACK(data.stack), data.filter->last_tab);
1472 DB( g_print(" set page '%s'\n", data.filter->last_tab) );
1473
1474
1475 //wait for the user
1476 gint retval; // = 55;
1477
1478 //while( result == 55 )
1479 //{
1480 retval = gtk_dialog_run (GTK_DIALOG (window));
1481
1482 switch (retval)
1483 {
1484 case GTK_RESPONSE_ACCEPT:
1485 //do_application_specific_something ();
1486 ui_flt_manage_get(&data);
1487 break;
1488 case 55:
1489 ui_flt_manage_clear(window, NULL);
1490 ui_flt_manage_get(&data);
1491 break;
1492 default:
1493 //do_nothing_since_dialog_was_cancelled ();
1494 break;
1495 }
1496 //}
1497
1498 // cleanup and destroy
1499 //ui_flt_manage_cleanup(&data, result);
1500
1501
1502 DB( g_print(" free\n") );
1503 //g_free(data);
1504
1505 DB( g_print(" destroy\n") );
1506 gtk_widget_destroy (window);
1507
1508 DB( g_print(" all ok\n") );
1509
1510 return retval;
1511 }
This page took 0.096389 seconds and 4 git commands to generate.