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