1 /* HomeBank -- Free, easy, personal accounting for everyone.
2 * Copyright (C) 1995-2018 Maxime DOYEN
4 * This file is part of HomeBank.
6 * HomeBank is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * HomeBank is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
23 #include "ui-archive.h"
24 #include "ui-account.h"
25 #include "ui-category.h"
29 #include "gtk-dateentry.h"
31 /****************************************************************************/
33 /****************************************************************************/
42 /* our global datas */
43 extern struct HomeBank
*GLOBALS
;
44 extern struct Preferences
*PREFS
;
47 gchar
*CYA_ARCHIVE_TYPE
[] = {
54 gchar
*CYA_UNIT
[] = { N_("Day"), N_("Week"), N_("Month"), N_("Year"), NULL
};
56 gchar
*CYA_SCHED_WEEKEND
[] = { N_("Possible"), N_("Before"), N_("After"), NULL
};
58 extern gchar
*CYA_TXN_STATUS
[];
60 static GtkWidget
*ui_arc_listview_new(void);
65 static void ui_arc_listview_populate(GtkWidget
*view
, gint type
)
72 DB( g_print("ui_arc_listview_populate()\n") );
74 DB( g_print(" - type=%d\n", type
) );
77 //insert all glist item into treeview
78 model
= gtk_tree_view_get_model(GTK_TREE_VIEW(view
));
81 gtk_list_store_clear (GTK_LIST_STORE(model
));
84 list
= g_list_first(GLOBALS
->arc_list
);
87 Archive
*item
= list
->data
;
89 if( (type
== ARC_TYPE_SCHEDULED
) && !(item
->flags
& OF_AUTO
) )
92 if( (type
== ARC_TYPE_TEMPLATE
) && (item
->flags
& OF_AUTO
) )
95 gtk_list_store_append (GTK_LIST_STORE(model
), &iter
);
96 gtk_list_store_set (GTK_LIST_STORE(model
), &iter
,
97 LST_DEFARC_DATAS
, item
, //data struct
98 LST_DEFARC_OLDPOS
, i
, //oldpos
101 //DB( g_print(" populate_treeview: %d %08x\n", i, list->data) );
103 i
++; list
= g_list_next(list
);
109 static void ui_arc_listview_select_by_pointer(GtkTreeView
*treeview
, gpointer user_data
)
113 GtkTreeSelection
*selection
;
115 Archive
*arc
= user_data
;
117 model
= gtk_tree_view_get_model(GTK_TREE_VIEW(treeview
));
118 selection
= gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview
));
120 valid
= gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model
), &iter
);
125 gtk_tree_model_get (model
, &iter
, LST_DEFARC_DATAS
, &tmp_arc
, -1);
128 gtk_tree_selection_select_iter (selection
, &iter
);
132 valid
= gtk_tree_model_iter_next(GTK_TREE_MODEL(model
), &iter
);
139 ** The function should return:
140 ** a negative integer if the first value comes before the second,
141 ** 0 if they are equal,
142 ** or a positive integer if the first value comes after the second.
144 static gint
ui_arc_listview_compare_func (GtkTreeModel
*model
, GtkTreeIter
*a
, GtkTreeIter
*b
, gpointer userdata
)
146 gint sortcol
= GPOINTER_TO_INT(userdata
);
147 Archive
*entry1
, *entry2
;
150 gtk_tree_model_get(model
, a
, LST_DEFARC_DATAS
, &entry1
, -1);
151 gtk_tree_model_get(model
, b
, LST_DEFARC_DATAS
, &entry2
, -1);
155 case LST_DEFARC_SORT_MEMO
:
156 retval
= (entry1
->flags
& GF_INCOME
) - (entry2
->flags
& GF_INCOME
);
159 retval
= hb_string_utf8_compare(entry1
->memo
, entry2
->memo
);
162 case LST_DEFARC_SORT_PAYEE
:
166 p1
= da_pay_get(entry1
->kpay
);
167 p2
= da_pay_get(entry2
->kpay
);
168 if( p1
!= NULL
&& p2
!= NULL
)
170 retval
= hb_string_utf8_compare(p1
->name
, p2
->name
);
175 g_return_val_if_reached(0);
184 static void ui_arc_listview_auto_cell_data_function (GtkTreeViewColumn
*col
, GtkCellRenderer
*renderer
, GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer user_data
)
187 gchar
*iconname
= NULL
;
189 // get the transaction
190 gtk_tree_model_get(model
, iter
, LST_DEFARC_DATAS
, &item
, -1);
192 iconname
= ( item
->flags
& OF_AUTO
) ? ICONNAME_HB_OPE_AUTO
: NULL
;
194 g_object_set(renderer
, "icon-name", iconname
, NULL
);
199 ** draw some text from the stored data structure
201 static void ui_arc_listview_cell_data_function_memo (GtkTreeViewColumn
*col
,
202 GtkCellRenderer
*renderer
,
210 gtk_tree_model_get(model
, iter
, LST_DEFARC_DATAS
, &item
, -1);
214 g_object_set(renderer
, "text", name
, NULL
);
219 static void ui_arc_listview_cell_data_function_payee (GtkTreeViewColumn
*col
, GtkCellRenderer
*renderer
, GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer user_data
)
224 gtk_tree_model_get(model
, iter
,
225 LST_DEFARC_DATAS
, &arc
,
231 pay
= da_pay_get(arc
->kpay
);
234 g_object_set(renderer
, "text", pay
->name
, NULL
);
237 g_object_set(renderer
, "text", NULL
, NULL
);
244 static GtkWidget
*ui_arc_listview_new(void)
248 GtkCellRenderer
*renderer
;
249 GtkTreeViewColumn
*column
;
252 store
= gtk_list_store_new (
260 view
= gtk_tree_view_new_with_model(GTK_TREE_MODEL(store
));
261 g_object_unref(store
);
263 gtk_tree_view_set_grid_lines (GTK_TREE_VIEW (view
), PREFS
->grid_lines
);
266 renderer
= gtk_cell_renderer_text_new ();
267 g_object_set(renderer
,
268 "ellipsize", PANGO_ELLIPSIZE_END
,
269 "ellipsize-set", TRUE
,
272 column
= gtk_tree_view_column_new();
273 gtk_tree_view_column_set_title(column
, _("Memo"));
274 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
275 gtk_tree_view_column_set_cell_data_func(column
, renderer
, ui_arc_listview_cell_data_function_memo
, GINT_TO_POINTER(LST_DEFARC_SORT_MEMO
), NULL
);
276 gtk_tree_view_column_set_sort_column_id (column
, LST_DEFARC_SORT_MEMO
);
277 gtk_tree_view_column_set_alignment (column
, 0.5);
278 gtk_tree_view_column_set_min_width(column
, HB_MINWIDTH_LIST
);
279 gtk_tree_view_column_set_resizable(column
, TRUE
);
280 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
283 renderer
= gtk_cell_renderer_text_new ();
284 g_object_set(renderer
,
285 "ellipsize", PANGO_ELLIPSIZE_END
,
286 "ellipsize-set", TRUE
,
288 column
= gtk_tree_view_column_new();
289 gtk_tree_view_column_set_title(column
, _("Payee"));
290 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
291 gtk_tree_view_column_set_cell_data_func(column
, renderer
, ui_arc_listview_cell_data_function_payee
, GINT_TO_POINTER(LST_DEFARC_SORT_PAYEE
), NULL
);
292 gtk_tree_view_column_set_resizable(column
, TRUE
);
293 //gtk_tree_view_column_add_attribute(column, renderer, "text", 1);
294 gtk_tree_view_column_set_sort_column_id (column
, LST_DEFARC_SORT_PAYEE
);
295 gtk_tree_view_column_set_alignment (column
, 0.5);
296 gtk_tree_view_column_set_min_width(column
, HB_MINWIDTH_LIST
);
297 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
300 /* column: Scheduled icon */
301 column
= gtk_tree_view_column_new();
302 renderer
= gtk_cell_renderer_pixbuf_new ();
303 //gtk_cell_renderer_set_fixed_size(renderer, GLOBALS->lst_pixbuf_maxwidth, -1);
304 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
305 gtk_tree_view_column_set_cell_data_func(column
, renderer
, ui_arc_listview_auto_cell_data_function
, NULL
, NULL
);
306 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
310 gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store
), LST_DEFARC_SORT_MEMO
, ui_arc_listview_compare_func
, GINT_TO_POINTER(LST_DEFARC_SORT_MEMO
), NULL
);
311 gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store
), LST_DEFARC_SORT_PAYEE
, ui_arc_listview_compare_func
, GINT_TO_POINTER(LST_DEFARC_SORT_PAYEE
), NULL
);
314 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store
), LST_DEFARC_SORT_MEMO
, GTK_SORT_ASCENDING
);
316 //gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(view), FALSE);
317 //gtk_tree_view_set_reorderable (GTK_TREE_VIEW(view), TRUE);
323 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
328 ** add an empty new account to our temp GList and treeview
330 static void ui_arc_manage_add(GtkWidget
*widget
, gpointer user_data
)
332 struct ui_arc_manage_data
*data
;
338 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
339 DB( g_print("\n[ui_scheduled] add\n") );
341 model
= gtk_tree_view_get_model(GTK_TREE_VIEW(data
->LV_arc
));
343 item
= da_archive_malloc();
344 item
->memo
= g_strdup_printf(_("(template %d)"), g_list_length(GLOBALS
->arc_list
) + 1);
347 type
= radio_get_active(GTK_CONTAINER(data
->RA_type
)) == 1 ? ARC_TYPE_TEMPLATE
: ARC_TYPE_SCHEDULED
;
348 if( type
== ARC_TYPE_SCHEDULED
)
349 item
->flags
|= OF_AUTO
;
351 GLOBALS
->arc_list
= g_list_append(GLOBALS
->arc_list
, item
);
353 gtk_list_store_append (GTK_LIST_STORE(model
), &iter
);
354 gtk_list_store_set (GTK_LIST_STORE(model
), &iter
,
355 LST_DEFARC_DATAS
, item
,
356 LST_DEFARC_OLDPOS
, 0,
359 gtk_tree_selection_select_iter (gtk_tree_view_get_selection(GTK_TREE_VIEW(data
->LV_arc
)), &iter
);
365 ** delete the selected account to our treeview and temp GList
367 static void ui_arc_manage_delete(GtkWidget
*widget
, gpointer user_data
)
369 struct ui_arc_manage_data
*data
;
370 GtkTreeSelection
*selection
;
376 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
377 DB( g_print("\n[ui_scheduled] delete (data=%p)\n", data
) );
379 selection
= gtk_tree_view_get_selection(GTK_TREE_VIEW(data
->LV_arc
));
380 //if true there is a selected node
381 if (gtk_tree_selection_get_selected(selection
, &model
, &iter
))
386 gtk_tree_model_get(model
, &iter
, LST_DEFARC_DATAS
, &item
, -1);
388 title
= g_strdup_printf (
389 _("Are you sure you want to permanently delete '%s'?"), item
->memo
);
391 secondtext
= _("If you delete a scheduled/template, it will be permanently lost.");
393 result
= ui_dialog_msg_confirm_alert(
394 GTK_WINDOW(data
->window
),
402 if( result
== GTK_RESPONSE_OK
)
404 gtk_list_store_remove(GTK_LIST_STORE(model
), &iter
);
406 GLOBALS
->arc_list
= g_list_remove(GLOBALS
->arc_list
, item
);
411 //DB( g_print(" delete =%08x (pos=%d)\n", entry, g_list_index(data->tmp_list, entry) ) );
417 ** update the archive name everytime it changes
419 static void ui_arc_manage_rename(GtkWidget
*widget
, gpointer user_data
)
421 struct ui_arc_manage_data
*data
;
422 GtkTreeSelection
*selection
;
428 DB( g_print("\n[ui_scheduled] rename\n") );
430 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
432 selection
= gtk_tree_view_get_selection(GTK_TREE_VIEW(data
->LV_arc
));
433 //if true there is a selected node
434 if (gtk_tree_selection_get_selected(selection
, &model
, &iter
))
436 gtk_tree_model_get(model
, &iter
, LST_DEFARC_DATAS
, &item
, -1);
438 DB( g_print(" -> %s\n", item
->memo
) );
440 txt
= (gchar
*)gtk_entry_get_text(GTK_ENTRY(data
->ST_word
));
441 // ignore if entry is empty
445 item
->memo
= g_strdup(txt
);
448 gtk_tree_view_columns_autosize (GTK_TREE_VIEW(data
->LV_arc
));
458 ** set widgets contents from the selected account
460 static void ui_arc_manage_set(GtkWidget
*widget
, gpointer user_data
)
462 struct ui_arc_manage_data
*data
;
463 GtkTreeSelection
*selection
;
468 DB( g_print("\n[ui_scheduled] set\n") );
470 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
472 selection
= gtk_tree_view_get_selection(GTK_TREE_VIEW(data
->LV_arc
));
473 //if true there is a selected node
474 if (gtk_tree_selection_get_selected(selection
, &model
, &iter
))
476 gtk_tree_model_get(model
, &iter
, LST_DEFARC_DATAS
, &item
, -1);
478 g_signal_handler_block(data
->ST_word
, data
->handler_id
[HID_ARC_MEMO
]);
479 gtk_entry_set_text(GTK_ENTRY(data
->ST_word
), item
->memo
);
480 g_signal_handler_unblock(data
->ST_word
, data
->handler_id
[HID_ARC_MEMO
]);
482 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data
->ST_amount
), item
->amount
);
484 radio_set_active(GTK_CONTAINER(data
->RA_status
), item
->status
);
487 /*g_signal_handler_block(data->CM_valid, data->handler_id[HID_ARC_VALID]);
488 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_valid), (item->flags & OF_VALID) ? 1 : 0);
489 g_signal_handler_unblock(data->CM_valid, data->handler_id[HID_ARC_VALID]);
491 g_signal_handler_block(data->CM_remind, data->handler_id[HID_ARC_REMIND]);
492 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_remind), (item->flags & OF_REMIND) ? 1 : 0);
493 g_signal_handler_unblock(data->CM_remind, data->handler_id[HID_ARC_REMIND]);
496 gtk_combo_box_set_active(GTK_COMBO_BOX(data
->NU_mode
), item
->paymode
);
498 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data
->CM_cheque
), (item
->flags
& OF_CHEQ2
) ? 1 : 0);
500 ui_cat_comboboxentry_set_active(GTK_COMBO_BOX(data
->PO_grp
), item
->kcat
);
502 DB( g_print(" -> set payee %d\n", item
->kpay
) );
503 ui_pay_comboboxentry_set_active(GTK_COMBO_BOX(data
->PO_pay
), item
->kpay
);
505 DB( g_print(" -> PO_acc %d\n", item
->kacc
) );
506 ui_acc_comboboxentry_set_active(GTK_COMBO_BOX(data
->PO_acc
), item
->kacc
);
508 DB( g_print(" -> PO_accto %d\n", item
->kxferacc
) );
509 ui_acc_comboboxentry_set_active(GTK_COMBO_BOX(data
->PO_accto
), item
->kxferacc
);
511 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data
->CM_auto
), (item
->flags
& OF_AUTO
) ? 1 : 0);
512 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data
->NB_every
), item
->every
);
513 gtk_combo_box_set_active(GTK_COMBO_BOX(data
->CY_unit
), item
->unit
);
514 gtk_date_entry_set_date(GTK_DATE_ENTRY(data
->PO_next
), item
->nextdate
);
515 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data
->CM_limit
), (item
->flags
& OF_LIMIT
) ? 1 : 0);
516 DB( g_print("nb_limit = %d %g\n", item
->limit
, (gdouble
)item
->limit
) );
517 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data
->NB_limit
), (gdouble
)item
->limit
);
518 radio_set_active(GTK_CONTAINER(data
->CY_weekend
), item
->weekend
);
524 ** get widgets contents to the selected account
526 static void ui_arc_manage_getlast(struct ui_arc_manage_data
*data
)
534 DB( g_print("\n[ui_scheduled] getlast\n") );
536 item
= data
->lastarcitem
;
540 DB( g_print(" -> %s\n", item
->memo
) );
542 gtk_tree_view_columns_autosize (GTK_TREE_VIEW(data
->LV_arc
));
544 txt
= (gchar
*)gtk_entry_get_text(GTK_ENTRY(data
->ST_word
));
545 // ignore if entry is empty
549 item
->memo
= g_strdup(txt
);
552 gtk_spin_button_update(GTK_SPIN_BUTTON(data
->ST_amount
));
553 value
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->ST_amount
));
554 item
->amount
= value
;
556 item
->paymode
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->NU_mode
));
557 item
->kcat
= ui_cat_comboboxentry_get_key_add_new(GTK_COMBO_BOX(data
->PO_grp
));
558 item
->kpay
= ui_pay_comboboxentry_get_key_add_new(GTK_COMBO_BOX(data
->PO_pay
));
559 item
->kacc
= ui_acc_comboboxentry_get_key(GTK_COMBO_BOX(data
->PO_acc
));
560 item
->kxferacc
= ui_acc_comboboxentry_get_key(GTK_COMBO_BOX(data
->PO_accto
));
562 item
->status
= radio_get_active(GTK_CONTAINER(data
->RA_status
));
564 //#1615245: moved here, after get combo entry key
565 if( item
->paymode
!= PAYMODE_INTXFER
)
567 //#677351: revert kxferacc to 0
573 item
->flags
&= (OF_SPLIT
); //(split is set in hb_archive)
575 active
= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->CM_cheque
));
576 if(active
== 1) item
->flags
|= OF_CHEQ2
;
578 //active = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_amount));
579 active
= item
->amount
> 0 ? TRUE
: FALSE
;
580 if(active
== TRUE
) item
->flags
|= OF_INCOME
;
583 /* -- automated -- */
585 active
= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->CM_auto
));
586 if(active
== 1) item
->flags
|= OF_AUTO
;
588 gtk_spin_button_update(GTK_SPIN_BUTTON(data
->NB_every
));
589 item
->every
= gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(data
->NB_every
));
590 item
->unit
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->CY_unit
));
591 item
->nextdate
= gtk_date_entry_get_date(GTK_DATE_ENTRY(data
->PO_next
));
593 active
= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->CM_limit
));
594 if(active
== 1) item
->flags
|= OF_LIMIT
;
596 gtk_spin_button_update(GTK_SPIN_BUTTON(data
->NB_limit
));
597 item
->limit
= gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(data
->NB_limit
));
599 item
->weekend
= radio_get_active(GTK_CONTAINER(data
->CY_weekend
));
606 static void ui_arc_manage_update_accto(GtkWidget
*widget
, gpointer user_data
)
608 struct ui_arc_manage_data
*data
;
611 DB( g_print("\n\n[ui_scheduled] update accto\n") );
613 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
615 kacc
= ui_acc_comboboxentry_get_key(GTK_COMBO_BOX(data
->PO_acc
));
616 kdst
= ui_acc_comboboxentry_get_key(GTK_COMBO_BOX(data
->PO_accto
));
618 DB( g_print(" ksrc=%d, kdst=%d\n", kacc
, kdst
) );
620 ui_acc_comboboxentry_populate_except(GTK_COMBO_BOX(data
->PO_accto
), GLOBALS
->h_acc
, kacc
, ACC_LST_INSERT_NORMAL
);
622 if( (kacc
== 0) || (kacc
== kdst
) )
624 ui_acc_comboboxentry_set_active(GTK_COMBO_BOX(data
->PO_accto
), 0);
633 static void ui_arc_manage_paymode(GtkWidget
*widget
, gpointer user_data
)
635 struct ui_arc_manage_data
*data
;
640 DB( g_print("\n[ui_scheduled] paymode\n") );
642 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
644 //DB( g_print(" widget=%p, data=%p\n", widget, data) );
647 payment
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->NU_mode
));
650 if(payment
== PAYMODE_CHECK
)
653 sensitive
= page
== 1 ? TRUE
: FALSE
;
654 hb_widget_visible(data
->CM_cheque
, sensitive
);
656 if(payment
== PAYMODE_INTXFER
)
659 ui_arc_manage_update_accto(widget
, user_data
);
662 DB( g_print(" payment: %d, page: %d\n", payment
, page
) );
664 sensitive
= page
== 2 ? TRUE
: FALSE
;
665 hb_widget_visible(data
->LB_accto
, sensitive
);
666 hb_widget_visible(data
->PO_accto
, sensitive
);
668 DB( g_print(" visible: %d\n", sensitive
) );
675 static void ui_arc_manage_scheduled(GtkWidget
*widget
, gpointer user_data
)
677 struct ui_arc_manage_data
*data
;
682 gboolean selected
, sensitive
;
684 DB( g_print("\n[ui_scheduled] scheduled\n") );
686 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
691 selected
= gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(data
->LV_arc
)), &model
, &iter
);
694 gtk_tree_model_get(model
, &iter
, LST_DEFARC_DATAS
, &arcitem
, -1);
696 arcitem
->flags
&= ~(OF_AUTO
);
697 sensitive
= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->CM_auto
)) ? TRUE
: FALSE
;
699 arcitem
->flags
|= OF_AUTO
;
704 gtk_widget_set_sensitive(data
->LB_next
, sensitive
);
705 gtk_widget_set_sensitive(data
->PO_next
, sensitive
);
707 gtk_widget_set_sensitive(data
->LB_every
, sensitive
);
708 gtk_widget_set_sensitive(data
->NB_every
, sensitive
);
710 gtk_widget_set_sensitive(data
->LB_weekend
, sensitive
);
711 gtk_widget_set_sensitive(data
->CY_weekend
, sensitive
);
713 gtk_widget_set_sensitive(data
->CY_unit
, sensitive
);
714 gtk_widget_set_sensitive(data
->CM_limit
, sensitive
);
716 gtk_widget_set_sensitive(data
->LB_posts
, sensitive
);
719 sensitive
= (sensitive
== TRUE
) ? gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->CM_limit
)) : sensitive
;
720 gtk_widget_set_sensitive(data
->NB_limit
, sensitive
);
724 /* redraw the row to display/hide the icon */
725 path
= gtk_tree_model_get_path(model
, &iter
);
726 gtk_tree_model_row_changed(model
, path
, &iter
);
727 gtk_tree_path_free (path
);
729 // gtk_tree_view_columns_autosize (GTK_TREE_VIEW(data->LV_arc));
730 //gtk_widget_queue_draw (GTK_WIDGET(data->LV_arc));
735 static void ui_arc_manage_update_post_split(GtkWidget
*widget
, gdouble amount
)
737 struct ui_arc_manage_data
*data
;
738 gboolean sensitive
= TRUE
;
740 DB( g_print("(ui_arc_manage) update _post_split\n") );
742 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
744 DB( g_print("- amount=%.2f\n", amount
) );
746 data
->lastarcitem
->amount
= amount
;
747 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data
->ST_amount
), amount
);
749 data
->lastarcitem
->flags
&= ~(OF_SPLIT
); //First set flag that Splits are cleared
751 if (da_splits_count(data
->lastarcitem
->splits
) > 0)
753 /* disable category if split is set */
754 data
->lastarcitem
->flags
|= OF_SPLIT
; //Then set flag that Splits are active
756 ui_cat_comboboxentry_set_active(GTK_COMBO_BOX(data
->PO_grp
), 0);
758 gtk_widget_set_sensitive(data
->ST_amount
, sensitive
);
760 //# 1416624 empty category when split
761 if( (data
->lastarcitem
->flags
& (OF_SPLIT
)) )
762 ui_cat_comboboxentry_set_active(GTK_COMBO_BOX(data
->PO_grp
), 0);
763 gtk_widget_set_sensitive(data
->PO_grp
, sensitive
);
769 ** update the widgets status and contents from action/selection value
771 static void ui_arc_manage_update(GtkWidget
*widget
, gpointer user_data
)
773 struct ui_arc_manage_data
*data
;
776 gboolean selected
, sensitive
;
777 gboolean split_sensitive
= TRUE
;
781 DB( g_print("\n[ui_scheduled] update\n") );
783 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
784 //window = gtk_widget_get_ancestor(GTK_WIDGET(treeview), GTK_TYPE_WINDOW);
785 //DB( g_print("\n[ui_scheduled] widget=%08lx, window=%08lx, inst_data=%08lx\n", treeview, window, data) );
787 //if true there is a selected node
788 selected
= gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(data
->LV_arc
)), &model
, &iter
);
790 DB( g_print(" selected = %d\n", selected
) );
792 sensitive
= (selected
== TRUE
) ? TRUE
: FALSE
;
794 gtk_widget_set_sensitive(data
->GR_txnleft
, sensitive
);
795 gtk_widget_set_sensitive(data
->LB_schedinsert
, sensitive
);
797 gtk_widget_set_sensitive(data
->CM_auto
, sensitive
);
799 gtk_widget_set_sensitive(data
->BT_rem
, sensitive
);
803 gtk_tree_model_get(model
, &iter
, LST_DEFARC_DATAS
, &arcitem
, -1);
805 if(data
->lastarcitem
!= NULL
&& arcitem
!= data
->lastarcitem
)
807 DB( g_print(" -> should do a get for last selected (%s)\n", data
->lastarcitem
->memo
) );
808 ui_arc_manage_getlast(data
);
810 data
->lastarcitem
= arcitem
;
812 if (da_splits_count(data
->lastarcitem
->splits
) > 0)
815 data
->lastarcitem
->flags
|= OF_SPLIT
; //Then set flag that Splits are active
816 split_sensitive
= FALSE
;
817 ui_cat_comboboxentry_set_active(GTK_COMBO_BOX(data
->PO_grp
), 0);
820 gtk_widget_set_sensitive(data
->ST_amount
, split_sensitive
);
821 gtk_widget_set_sensitive(data
->PO_grp
, split_sensitive
);
823 DB( g_print(" - call set\n") );
824 ui_arc_manage_set(widget
, NULL
);
828 data
->lastarcitem
= NULL
;
831 //gtk_widget_set_sensitive(data->LB_schedinsert, sensitive);
834 DB( g_print(" - call scheduled\n") );
835 ui_arc_manage_scheduled(widget
, NULL
);
836 DB( g_print(" - call paymode\n") );
837 ui_arc_manage_paymode(widget
,NULL
);
847 static void ui_arc_manage_toggleamount(GtkWidget
*widget
, GtkEntryIconPosition icon_pos
, GdkEvent
*event
, gpointer user_data
)
849 struct ui_arc_manage_data
*data
;
852 DB( g_print("\n[ui_scheduled] toggleamount\n") );
854 if(icon_pos
== GTK_ENTRY_ICON_PRIMARY
)
857 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
859 gtk_spin_button_update(GTK_SPIN_BUTTON(data
->ST_amount
));
861 value
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->ST_amount
));
863 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data
->ST_amount
), value
);
866 value = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->ST_amount));
867 type = gtk_widget_get_sensitive(data->CY_amount);
869 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->ST_amount), value * type);
876 static void defarchive_button_split_cb(GtkWidget
*widget
, gpointer user_data
)
878 struct ui_arc_manage_data
*data
;
881 DB( g_print("\n[ui_scheduled] doing split\n") );
883 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
885 amount
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->ST_amount
));
887 ui_split_dialog(data
->window
, data
->lastarcitem
->splits
, amount
, &ui_arc_manage_update_post_split
);
892 static void ui_arc_manage_selection(GtkTreeSelection
*treeselection
, gpointer user_data
)
894 DB( g_print("\n[ui_scheduled] selection\n") );
896 DB( g_print(" - call update\n") );
897 ui_arc_manage_update(GTK_WIDGET(gtk_tree_selection_get_tree_view (treeselection
)), NULL
);
901 static void ui_arc_manage_populate_listview(struct ui_arc_manage_data
*data
)
905 DB( g_print("\n[ui_scheduled] populate listview\n") );
907 type
= radio_get_active(GTK_CONTAINER(data
->RA_type
)) == 1 ? ARC_TYPE_TEMPLATE
: ARC_TYPE_SCHEDULED
;
908 ui_arc_listview_populate(data
->LV_arc
, type
);
909 gtk_tree_view_expand_all (GTK_TREE_VIEW(data
->LV_arc
));
915 static gboolean
ui_arc_manage_cleanup(struct ui_arc_manage_data
*data
, gint result
)
917 gboolean doupdate
= FALSE
;
919 DB( g_print("\n[ui_scheduled] cleanup\n") );
922 if(data
->lastarcitem
!= NULL
)
924 DB( g_print(" -> should do a get for last selected (%s)\n", data
->lastarcitem
->memo
) );
925 ui_arc_manage_getlast(data
);
928 GLOBALS
->arc_list
= da_archive_sort(GLOBALS
->arc_list
);
930 GLOBALS
->changes_count
+= data
->change
;
938 static void ui_arc_manage_setup(struct ui_arc_manage_data
*data
)
941 DB( g_print("\n[ui_scheduled] setup\n") );
944 data
->tmp_list
= NULL
; //hb-glist_clone_list(GLOBALS->arc_list, sizeof(struct _Archive));
946 data
->lastarcitem
= NULL
;
948 //hb-glist_populate_treeview(data->tmp_list, data->LV_arc, LST_DEFARC_DATAS, LST_DEFARC_OLDPOS);
950 //insert all glist item into treeview
951 ui_arc_manage_populate_listview(data
);
953 DB( g_print(" - populate boxentries\n") );
955 ui_pay_comboboxentry_populate(GTK_COMBO_BOX(data
->PO_pay
) , GLOBALS
->h_pay
);
956 ui_cat_comboboxentry_populate(GTK_COMBO_BOX(data
->PO_grp
) , GLOBALS
->h_cat
);
957 ui_acc_comboboxentry_populate(GTK_COMBO_BOX(data
->PO_acc
) , GLOBALS
->h_acc
, ACC_LST_INSERT_NORMAL
);
958 ui_acc_comboboxentry_populate(GTK_COMBO_BOX(data
->PO_accto
), GLOBALS
->h_acc
, ACC_LST_INSERT_NORMAL
);
962 static GtkWidget
*ui_arc_manage_create_left_txn(struct ui_arc_manage_data
*data
)
964 GtkWidget
*group_grid
, *hbox
, *label
, *widget
, *image
;
967 // group :: Transaction detail
968 group_grid
= gtk_grid_new ();
969 data
->GR_txnleft
= group_grid
;
970 gtk_grid_set_row_spacing (GTK_GRID (group_grid
), SPACING_SMALL
);
971 gtk_grid_set_column_spacing (GTK_GRID (group_grid
), SPACING_MEDIUM
);
974 label
= make_label_widget(_("_Amount:"));
975 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
976 hbox
= gtk_box_new (GTK_ORIENTATION_HORIZONTAL
, 0);
977 gtk_grid_attach (GTK_GRID (group_grid
), hbox
, 1, row
, 1, 1);
979 widget
= make_amount(label
);
980 data
->ST_amount
= widget
;
981 gtk_entry_set_icon_from_icon_name(GTK_ENTRY(widget
), GTK_ENTRY_ICON_PRIMARY
, ICONNAME_HB_TOGGLE_SIGN
);
982 gtk_entry_set_icon_tooltip_text(GTK_ENTRY(widget
), GTK_ENTRY_ICON_PRIMARY
, _("Toggle amount sign"));
983 gtk_box_pack_start (GTK_BOX (hbox
), widget
, TRUE
, TRUE
, 0);
985 image
= gtk_image_new_from_icon_name (ICONNAME_HB_BUTTON_SPLIT
, GTK_ICON_SIZE_MENU
);
986 widget
= gtk_button_new();
987 g_object_set (widget
, "image", image
, NULL
);
988 data
->BT_split
= widget
;
989 gtk_box_pack_start (GTK_BOX (hbox
), widget
, FALSE
, FALSE
, 0);
990 gtk_widget_set_tooltip_text(widget
, _("Transaction splits"));
993 label
= make_label_widget(_("Pay_ment:"));
994 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
995 widget
= make_paymode(label
);
996 data
->NU_mode
= widget
;
997 gtk_widget_set_halign (widget
, GTK_ALIGN_START
);
998 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 1, 1);
1001 widget
= gtk_check_button_new_with_mnemonic(_("Of notebook _2"));
1002 data
->CM_cheque
= widget
;
1003 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 2, 1);
1005 /* info should be here some day */
1008 label
= make_label_widget(_("A_ccount:"));
1009 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1010 widget
= ui_acc_comboboxentry_new(label
);
1011 data
->PO_acc
= widget
;
1012 gtk_widget_set_hexpand (widget
, TRUE
);
1013 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 1, 1);
1016 label
= make_label_widget(_("_To account:"));
1017 data
->LB_accto
= label
;
1018 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1019 widget
= ui_acc_comboboxentry_new(label
);
1020 data
->PO_accto
= widget
;
1021 gtk_widget_set_hexpand (widget
, TRUE
);
1022 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 1, 1);
1025 label
= make_label_widget(_("_Payee:"));
1026 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1027 widget
= ui_pay_comboboxentry_new(label
);
1028 data
->PO_pay
= widget
;
1029 gtk_widget_set_hexpand (widget
, TRUE
);
1030 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 1, 1);
1033 label
= make_label_widget(_("_Category:"));
1034 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1035 widget
= ui_cat_comboboxentry_new(label
);
1036 data
->PO_grp
= widget
;
1037 gtk_widget_set_hexpand (widget
, TRUE
);
1038 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 1, 1);
1041 label
= make_label_widget(_("_Status:"));
1042 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1043 widget
= make_radio(CYA_TXN_STATUS
, TRUE
, GTK_ORIENTATION_HORIZONTAL
);
1044 data
->RA_status
= widget
;
1045 gtk_widget_set_halign (widget
, GTK_ALIGN_START
);
1046 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 1, 1);
1049 label
= make_label_widget(_("_Memo:"));
1050 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1051 widget
= make_string(label
);
1052 gtk_widget_set_hexpand (widget
, TRUE
);
1053 data
->ST_word
= widget
;
1054 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 1, 1);
1056 /* tags should be here some day */
1063 static GtkWidget
*ui_arc_manage_create_scheduling(struct ui_arc_manage_data
*data
)
1065 GtkWidget
*group_grid
, *hbox
, *label
, *widget
;
1068 // group :: Scheduled insertion
1069 group_grid
= gtk_grid_new ();
1070 gtk_grid_set_row_spacing (GTK_GRID (group_grid
), SPACING_SMALL
);
1071 gtk_grid_set_column_spacing (GTK_GRID (group_grid
), SPACING_MEDIUM
);
1073 label
= make_label_group(_("Scheduled insertion"));
1074 data
->LB_schedinsert
= label
;
1075 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, 0, 3, 1);
1078 widget
= gtk_check_button_new_with_mnemonic(_("_Activate"));
1079 data
->CM_auto
= widget
;
1080 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 2, 1);
1083 label
= gtk_label_new_with_mnemonic (_("Next _date:"));
1084 data
->LB_next
= label
;
1085 gtk_grid_attach (GTK_GRID (group_grid
), label
, 1, row
, 1, 1);
1086 widget
= gtk_date_entry_new();
1087 data
->PO_next
= widget
;
1088 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 2, row
, 1, 1);
1091 label
= make_label_widget(_("Ever_y:"));
1092 data
->LB_every
= label
;
1093 gtk_grid_attach (GTK_GRID (group_grid
), label
, 1, row
, 1, 1);
1095 hbox
= gtk_box_new(GTK_ORIENTATION_HORIZONTAL
, SPACING_SMALL
);
1096 gtk_grid_attach (GTK_GRID (group_grid
), hbox
, 2, row
, 1, 1);
1097 widget
= make_numeric(label
, 1, 100);
1098 data
->NB_every
= widget
;
1099 gtk_box_pack_start (GTK_BOX (hbox
), widget
, FALSE
, FALSE
, 0);
1100 //label = gtk_label_new_with_mnemonic (_("_Unit:"));
1101 //gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
1102 widget
= make_cycle(label
, CYA_UNIT
);
1103 data
->CY_unit
= widget
;
1104 gtk_box_pack_start (GTK_BOX (hbox
), widget
, TRUE
, TRUE
, 0);
1107 label
= make_label_widget(_("Week end:"));
1108 data
->LB_weekend
= label
;
1109 gtk_grid_attach (GTK_GRID (group_grid
), label
, 1, row
, 1, 1);
1111 widget
= make_radio(CYA_SCHED_WEEKEND
, FALSE
, GTK_ORIENTATION_HORIZONTAL
);
1112 data
->CY_weekend
= widget
;
1113 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 2, row
, 1, 1);
1116 hbox
= gtk_box_new(GTK_ORIENTATION_HORIZONTAL
, SPACING_SMALL
);
1117 gtk_grid_attach (GTK_GRID (group_grid
), hbox
, 1, row
, 3, 1);
1119 widget
= gtk_check_button_new_with_mnemonic(_("_Stop after:"));
1120 data
->CM_limit
= widget
;
1121 gtk_box_pack_start (GTK_BOX (hbox
), widget
, FALSE
, FALSE
, 0);
1123 widget
= make_numeric(label
, 1, 366);
1124 data
->NB_limit
= widget
;
1125 gtk_box_pack_start (GTK_BOX (hbox
), widget
, TRUE
, TRUE
, 0);
1127 label
= gtk_label_new_with_mnemonic (_("posts"));
1128 data
->LB_posts
= label
;
1129 gtk_box_pack_start (GTK_BOX (hbox
), label
, FALSE
, FALSE
, 0);
1134 static void ui_arc_manage_type_changed_cb (GtkToggleButton
*button
, gpointer user_data
)
1136 ui_arc_manage_populate_listview(user_data
);
1137 //g_print(" toggle type=%d\n", gtk_toggle_button_get_active(button));
1141 GtkWidget
*ui_arc_manage_dialog (Archive
*ext_arc
)
1143 struct ui_arc_manage_data data
;
1144 GtkWidget
*dialog
, *content_area
, *table
, *bbox
;
1145 GtkWidget
*content_grid
, *group_grid
, *hgrid
, *treeview
, *scrollwin
;
1146 GtkWidget
*widget
, *hpaned
;
1149 dialog
= gtk_dialog_new_with_buttons (_("Manage scheduled/template transactions"),
1150 GTK_WINDOW(GLOBALS
->mainwindow
),
1153 GTK_RESPONSE_ACCEPT
,
1156 data
.window
= dialog
;
1158 gtk_window_set_icon_name(GTK_WINDOW (dialog
), ICONNAME_HB_ARCHIVE
);
1160 //set a nice dialog size
1161 gtk_window_get_size(GTK_WINDOW(GLOBALS
->mainwindow
), &w
, &h
);
1162 gtk_window_set_default_size (GTK_WINDOW(dialog
), -1, h
/PHI
);
1165 //store our dialog private data
1166 g_object_set_data(G_OBJECT(dialog
), "inst_data", (gpointer
)&data
);
1167 DB( g_print("\n[ui_scheduled] dialog=%p, inst_data=%p\n", dialog
, &data
) );
1170 content_area
= gtk_dialog_get_content_area(GTK_DIALOG (dialog
)); // return a vbox
1173 table
= gtk_grid_new ();
1174 gtk_grid_set_row_spacing (GTK_GRID (table
), SPACING_MEDIUM
);
1175 gtk_grid_set_column_spacing (GTK_GRID (table
), SPACING_MEDIUM
);
1176 g_object_set(table
, "margin", SPACING_MEDIUM
, NULL
);
1177 gtk_box_pack_start (GTK_BOX (content_area
), table
, TRUE
, TRUE
, 0);
1180 bbox
= make_radio(CYA_ARCHIVE_TYPE
, TRUE
, GTK_ORIENTATION_HORIZONTAL
);
1181 data
.RA_type
= bbox
;
1182 gtk_widget_set_halign (bbox
, GTK_ALIGN_CENTER
);
1183 gtk_grid_attach (GTK_GRID (table
), bbox
, 0, row
, 2, 1);
1185 widget
= radio_get_nth_widget(GTK_CONTAINER(bbox
), 1);
1187 g_signal_connect (widget
, "toggled", G_CALLBACK (ui_arc_manage_type_changed_cb
), &data
);
1190 hpaned
= gtk_paned_new(GTK_ORIENTATION_HORIZONTAL
);
1191 //gtk_container_set_border_width (GTK_CONTAINER(hpaned), SPACING_MEDIUM);
1192 gtk_grid_attach (GTK_GRID (table
), hpaned
, 0, row
, 2, 1);
1196 hgrid
= gtk_grid_new ();
1197 gtk_grid_set_row_spacing (GTK_GRID (hgrid
), SPACING_SMALL
);
1198 gtk_grid_set_column_spacing (GTK_GRID (hgrid
), SPACING_MEDIUM
);
1199 gtk_widget_set_margin_right(hgrid
, SPACING_SMALL
);
1200 gtk_paned_pack1 (GTK_PANED(hpaned
), hgrid
, FALSE
, FALSE
);
1203 scrollwin
= gtk_scrolled_window_new(NULL
,NULL
);
1204 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin
), GTK_SHADOW_ETCHED_IN
);
1205 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin
), GTK_POLICY_NEVER
, GTK_POLICY_AUTOMATIC
);
1206 treeview
= (GtkWidget
*)ui_arc_listview_new();
1207 data
.LV_arc
= treeview
;
1208 gtk_widget_set_size_request(treeview
, HB_MINWIDTH_LIST
, -1);
1209 gtk_container_add(GTK_CONTAINER(scrollwin
), treeview
);
1210 gtk_widget_set_hexpand (scrollwin
, TRUE
);
1211 gtk_widget_set_vexpand (scrollwin
, TRUE
);
1212 gtk_grid_attach (GTK_GRID (hgrid
), scrollwin
, 0, 0, 2, 1);
1214 widget
= gtk_button_new_with_mnemonic(_("_Add"));
1215 data
.BT_add
= widget
;
1216 gtk_grid_attach (GTK_GRID (hgrid
), widget
, 0, 1, 1, 1);
1218 widget
= gtk_button_new_with_mnemonic(_("_Delete"));
1219 data
.BT_rem
= widget
;
1220 gtk_grid_attach (GTK_GRID (hgrid
), widget
, 1, 1, 1, 1);
1224 content_grid
= gtk_grid_new();
1225 gtk_grid_set_row_spacing (GTK_GRID (content_grid
), SPACING_LARGE
);
1226 gtk_orientable_set_orientation(GTK_ORIENTABLE(content_grid
), GTK_ORIENTATION_VERTICAL
);
1227 //gtk_container_set_border_width (GTK_CONTAINER(content_grid), SPACING_MEDIUM);
1228 gtk_widget_set_margin_left(content_grid
, SPACING_SMALL
);
1229 gtk_paned_pack2 (GTK_PANED(hpaned
), content_grid
, FALSE
, FALSE
);
1231 group_grid
= ui_arc_manage_create_left_txn(&data
);
1232 //gtk_widget_set_hexpand (GTK_WIDGET(group_grid), FALSE);
1233 gtk_grid_attach (GTK_GRID (content_grid
), group_grid
, 0, 0, 1, 1);
1236 group_grid
= ui_arc_manage_create_scheduling(&data
);
1237 gtk_grid_attach (GTK_GRID (content_grid
), group_grid
, 0, 1, 1, 1);
1239 /* set default periodicity to month */
1240 //todo: move elsewhere
1241 gtk_combo_box_set_active(GTK_COMBO_BOX(data
.CY_unit
), 2);
1243 gtk_widget_show_all(content_area
);
1244 gtk_widget_hide(data
.CM_cheque
);
1245 gtk_widget_hide(data
.PO_accto
);
1247 //connect all our signals
1248 g_signal_connect (dialog
, "destroy", G_CALLBACK (gtk_widget_destroyed
), &dialog
);
1250 g_signal_connect (gtk_tree_view_get_selection(GTK_TREE_VIEW(data
.LV_arc
)), "changed", G_CALLBACK (ui_arc_manage_selection
), NULL
);
1251 g_signal_connect (G_OBJECT (data
.ST_amount
), "icon-release", G_CALLBACK (ui_arc_manage_toggleamount
), NULL
);
1253 g_signal_connect (G_OBJECT (data
.BT_add
), "clicked", G_CALLBACK (ui_arc_manage_add
), NULL
);
1254 g_signal_connect (G_OBJECT (data
.BT_rem
), "clicked", G_CALLBACK (ui_arc_manage_delete
), NULL
);
1256 data
.handler_id
[HID_ARC_MEMO
] = g_signal_connect (G_OBJECT (data
.ST_word
), "changed", G_CALLBACK (ui_arc_manage_rename
), NULL
);
1257 g_signal_connect (data
.NU_mode
, "changed", G_CALLBACK (ui_arc_manage_paymode
), NULL
);
1258 g_signal_connect (data
.PO_acc
, "changed", G_CALLBACK (ui_arc_manage_update_accto
), NULL
);
1259 //data.handler_id[HID_ARC_VALID] = g_signal_connect (data.CM_valid , "toggled", G_CALLBACK (ui_arc_manage_togglestatus), GINT_TO_POINTER(HID_ARC_VALID));
1260 //data.handler_id[HID_ARC_REMIND] = g_signal_connect (data.CM_remind, "toggled", G_CALLBACK (ui_arc_manage_togglestatus), GINT_TO_POINTER(HID_ARC_REMIND));
1262 g_signal_connect (data
.CM_auto
, "toggled", G_CALLBACK (ui_arc_manage_scheduled
), NULL
);
1263 g_signal_connect (data
.CM_limit
, "toggled", G_CALLBACK (ui_arc_manage_scheduled
), NULL
);
1265 g_signal_connect (G_OBJECT (data
.BT_split
), "clicked", G_CALLBACK (defarchive_button_split_cb
), NULL
);
1267 //setup, init and show dialog
1268 ui_arc_manage_setup(&data
);
1269 ui_arc_manage_update(data
.LV_arc
, NULL
);
1271 gtk_widget_show (dialog
);
1274 ui_arc_listview_select_by_pointer(GTK_TREE_VIEW(data
.LV_arc
), ext_arc
);
1277 gint result
= gtk_dialog_run (GTK_DIALOG (dialog
));
1281 case GTK_RESPONSE_ACCEPT
:
1282 //do_application_specific_something ();
1285 //do_nothing_since_dialog_was_cancelled ();
1289 // cleanup and destroy
1290 ui_arc_manage_cleanup(&data
, result
);
1291 gtk_widget_destroy (dialog
);