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/>.
22 #include "ui-transaction.h"
23 #include "hb-transaction.h"
24 #include "gtk-dateentry.h"
26 #include "ui-category.h"
27 #include "ui-account.h"
31 /****************************************************************************/
33 /****************************************************************************/
42 /* our global datas */
43 extern struct HomeBank
*GLOBALS
;
44 extern struct Preferences
*PREFS
;
47 extern gchar
*CYA_TYPE
[];
49 gchar
*CYA_OPERATION
[] = {
50 N_("Add transaction"),
51 N_("Inherit transaction"),
52 N_("Modify transaction")
56 gchar
*CYA_TXN_STATUS
[] = {
65 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
67 static void deftransaction_template_popover_populate(struct deftransaction_data
*data
, GList
*srclist
);
69 static void deftransaction_update(GtkWidget
*widget
, gpointer user_data
)
71 struct deftransaction_data
*data
;
74 DB( g_print("\n[ui-transaction] update\n") );
76 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
78 //# 1419476 empty category when no split either...
79 if( (data
->ope
->flags
& (OF_SPLIT
)) )
81 //# 1416624 empty category when split
82 ui_cat_comboboxentry_set_active(GTK_COMBO_BOX(data
->PO_grp
), 0);
85 /* disable amount+category if split is set */
86 sensitive
= (data
->ope
->flags
& (OF_SPLIT
)) ? FALSE
: TRUE
;
87 gtk_widget_set_sensitive(data
->ST_amount
, sensitive
);
88 gtk_widget_set_sensitive(data
->PO_grp
, sensitive
);
91 static void deftransaction_update_warnsign(GtkWidget
*widget
, gpointer user_data
)
93 struct deftransaction_data
*data
;
94 gboolean warning
= FALSE
;
99 DB( g_print("\n[ui-transaction] update warning sign\n") );
101 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
103 cat
= ui_cat_comboboxentry_get(GTK_COMBO_BOX(data
->PO_grp
));
104 if(cat
!= NULL
&& cat
->key
> 0)
106 amount
= hb_amount_round(gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->ST_amount
)), 2);
109 amttype
= (amount
> 0) ? 1 : -1;
110 warning
= (category_type_get(cat
) != amttype
) ? TRUE
: FALSE
;
115 gtk_widget_show_all(data
->IB_warnsign
);
117 gtk_widget_hide(data
->IB_warnsign
);
122 static void deftransaction_update_transfer(GtkWidget
*widget
, gpointer user_data
)
124 struct deftransaction_data
*data
;
128 DB( g_print("\n[ui-transaction] update transfer\n") );
130 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
134 kacc
= ui_acc_comboboxentry_get_key(GTK_COMBO_BOX(data
->PO_acc
));
136 if(kacc
== 0) { sensitive
= FALSE
; goto end
; }
139 * - target account selected
143 if( gtk_combo_box_get_active(GTK_COMBO_BOX(data
->NU_mode
)) == PAYMODE_INTXFER
)
145 Account
*srcacc
, *dstacc
;
147 kdst
= ui_acc_comboboxentry_get_key(GTK_COMBO_BOX(data
->PO_accto
));
149 if(kdst
== 0) { sensitive
= FALSE
; goto end
; }
155 srcacc
= da_acc_get(kacc
);
156 dstacc
= da_acc_get(kdst
);
157 if( srcacc
&& dstacc
)
159 if(srcacc
->kcur
!= dstacc
->kcur
)
167 DB( g_print(" sensitive %d\n", sensitive
) );
170 //gtk_widget_set_sensitive(gtk_dialog_get_action_area(GTK_DIALOG (data->window)), sensitive);
171 gtk_dialog_set_response_sensitive(GTK_DIALOG (data
->window
), GTK_RESPONSE_ACCEPT
, sensitive
);
172 gtk_dialog_set_response_sensitive(GTK_DIALOG (data
->window
), GTK_RESPONSE_ADD
, sensitive
);
173 gtk_dialog_set_response_sensitive(GTK_DIALOG (data
->window
), GTK_RESPONSE_ADDKEEP
, sensitive
);
178 static void deftransaction_update_payee(GtkWidget
*widget
, gpointer user_data
)
180 struct deftransaction_data
*data
;
185 DB( g_print("\n[ui-transaction] update payee\n") );
187 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
189 // only set for empty category
190 // 1635053 and also paymode unset
191 cat
= ui_cat_comboboxentry_get(GTK_COMBO_BOX(data
->PO_grp
));
192 paymode
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->NU_mode
));
193 if( (cat
== NULL
|| cat
->key
== 0) && (paymode
== PAYMODE_NONE
) )
195 pay
= ui_pay_comboboxentry_get(GTK_COMBO_BOX(data
->PO_pay
));
198 g_signal_handlers_block_by_func (G_OBJECT (data
->PO_grp
), G_CALLBACK (deftransaction_update_warnsign
), NULL
);
199 ui_cat_comboboxentry_set_active(GTK_COMBO_BOX(data
->PO_grp
), pay
->kcat
);
200 g_signal_handlers_unblock_by_func (G_OBJECT (data
->PO_grp
), G_CALLBACK (deftransaction_update_warnsign
), NULL
);
202 gtk_combo_box_set_active(GTK_COMBO_BOX(data
->NU_mode
), pay
->paymode
);
207 static void deftransaction_set_cheque(GtkWidget
*widget
, gpointer user_data
)
209 struct deftransaction_data
*data
;
216 DB( g_print("\n[ui-transaction] set_cheque\n") );
218 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
220 amount
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->ST_amount
));
223 kacc
= ui_acc_comboboxentry_get_key(GTK_COMBO_BOX(data
->PO_acc
));
227 acc
= da_acc_get( kacc
);
230 DB( g_print(" - should fill for acc %d '%s'\n", kacc
, acc
->name
) );
232 cheque
= ( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->CM_cheque
))==TRUE
? acc
->cheque2
: acc
->cheque1
);
233 cheque_str
= g_strdup_printf("%d", cheque
+ 1);
234 gtk_entry_set_text(GTK_ENTRY(data
->ST_info
), cheque_str
);
242 gtk_entry_set_text(GTK_ENTRY(data
->ST_info
), "");
249 //#1676162 update the nb digits of amount
250 static void deftransaction_set_amount_nbdigits(GtkWidget
*widget
, guint32 kacc
)
252 struct deftransaction_data
*data
;
254 DB( g_print("\n[ui-transaction] set_amount_nbdigits\n") );
256 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
258 Account
*srcacc
= da_acc_get(kacc
);
261 Currency
*cur
= da_cur_get(srcacc
->kcur
);
263 DB( g_print("- acc is %d '%s', curr=%d\n", srcacc
->key
, srcacc
->name
, srcacc
->kcur
) );
267 DB( g_print("- set digits to '%s' %d\n", cur
->name
, cur
->frac_digits
) );
268 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(data
->ST_amount
), cur
->frac_digits
);
271 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(data
->ST_amount
), 2);
277 static void deftransaction_update_accto(GtkWidget
*widget
, gpointer user_data
)
279 struct deftransaction_data
*data
;
282 DB( g_print("\n[ui-transaction] update accto\n") );
284 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
286 kacc
= ui_acc_comboboxentry_get_key(GTK_COMBO_BOX(data
->PO_acc
));
288 DB( g_print(" acc is %d\n", kacc
) );
290 deftransaction_set_amount_nbdigits(widget
, kacc
);
291 //g_signal_handlers_block_by_func (G_OBJECT (data->PO_accto), G_CALLBACK (deftransaction_update_transfer), NULL);
292 //ui_acc_comboboxentry_set_active(GTK_COMBO_BOX(data->PO_accto), 0);
293 //g_signal_handlers_unblock_by_func (G_OBJECT (data->PO_accto), G_CALLBACK (deftransaction_update_transfer), NULL);
295 ui_acc_comboboxentry_populate_except(GTK_COMBO_BOX(data
->PO_accto
), GLOBALS
->h_acc
, kacc
, ACC_LST_INSERT_NORMAL
);
297 deftransaction_update_transfer(widget
, user_data
);
302 void deftransaction_set_amount_from_split(GtkWidget
*widget
, gdouble amount
)
304 struct deftransaction_data
*data
;
306 DB( g_print("\n[ui-transaction] set_amount_from_split\n") );
308 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
310 DB( g_print("- amount=%.2f\n", amount
) );
312 data
->ope
->amount
= amount
;
313 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data
->ST_amount
), amount
);
315 deftransaction_update(widget
, NULL
);
320 static void deftransaction_set(GtkWidget
*widget
, gpointer user_data
)
322 struct deftransaction_data
*data
;
326 DB( g_print("\n[ui-transaction] set\n") );
328 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
332 DB( g_print(" - ope=%p data=%p tags:%p\n", data
->ope
, data
, entry
->tags
) );
334 //DB( g_print(" set date to %d\n", entry->date) );
335 //g_object_set(GTK_DATE_ENTRY(data->PO_date), "date", (guint32)entry->ope_Date);
336 gtk_date_entry_set_date(GTK_DATE_ENTRY(data
->PO_date
), (guint
)entry
->date
);
338 txt
= (entry
->memo
!= NULL
) ? entry
->memo
: "";
339 gtk_entry_set_text(GTK_ENTRY(data
->ST_word
), txt
);
340 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data
->ST_amount
), entry
->amount
);
341 //gtk_combo_box_set_active(GTK_COMBO_BOX(data->CY_amount), (entry->ope_Flags & OF_INCOME) ? 1 : 0);
343 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data
->CM_cheque
), (entry
->flags
& OF_CHEQ2
) ? 1 : 0);
345 txt
= (entry
->info
!= NULL
) ? entry
->info
: "";
346 gtk_entry_set_text(GTK_ENTRY(data
->ST_info
), txt
);
347 ui_cat_comboboxentry_set_active(GTK_COMBO_BOX(data
->PO_grp
), entry
->kcat
);
348 ui_pay_comboboxentry_set_active(GTK_COMBO_BOX(data
->PO_pay
), entry
->kpay
);
350 tagstr
= transaction_tags_tostring(entry
);
352 DB( g_print(" - tags: '%s'\n", txt
) );
354 txt
= (tagstr
!= NULL
) ? tagstr
: "";
355 gtk_entry_set_text(GTK_ENTRY(data
->ST_tags
), txt
);
358 radio_set_active(GTK_CONTAINER(data
->RA_status
), entry
->status
);
360 //as we trigger an event on this
361 //let's place it at the end to avoid missvalue on the trigger function
362 g_signal_handlers_block_by_func (G_OBJECT (data
->PO_acc
), G_CALLBACK (deftransaction_update_accto
), NULL
);
364 ui_acc_comboboxentry_set_active(GTK_COMBO_BOX(data
->PO_acc
), entry
->kacc
);
365 ui_acc_comboboxentry_set_active(GTK_COMBO_BOX(data
->PO_accto
), entry
->kxferacc
);
367 g_signal_handlers_unblock_by_func (G_OBJECT (data
->PO_acc
), G_CALLBACK (deftransaction_update_accto
), NULL
);
369 gtk_combo_box_set_active(GTK_COMBO_BOX(data
->NU_mode
), entry
->paymode
);
371 DB( g_print(" - acc is: %d\n", gtk_combo_box_get_active(GTK_COMBO_BOX(data
->PO_acc
)) ) );
375 void deftransaction_get(GtkWidget
*widget
, gpointer user_data
)
377 struct deftransaction_data
*data
;
383 DB( g_print("\n[ui-transaction] get\n") );
385 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
389 DB( g_print(" - ope = %p\n", entry
) );
391 //DB( g_print(" get date to %d\n", entry->ope_Date) );
392 entry
->date
= gtk_date_entry_get_date(GTK_DATE_ENTRY(data
->PO_date
));
393 //g_object_get(GTK_DATE_ENTRY(data->PO_date), "date", entry->ope_Date);
395 //free any previous string
401 txt
= (gchar
*)gtk_entry_get_text(GTK_ENTRY(data
->ST_word
));
402 // ignore if entry is empty
405 entry
->memo
= g_strdup(txt
);
407 //#1716182 add into memo autocomplete
408 if( da_transaction_insert_memo(entry
) )
410 GtkEntryCompletion
*completion
;
414 completion
= gtk_entry_get_completion (GTK_ENTRY(data
->ST_word
));
415 model
= gtk_entry_completion_get_model (completion
);
416 gtk_list_store_insert_with_values(GTK_LIST_STORE(model
), &iter
, -1,
423 value
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->ST_amount
));
424 entry
->amount
= value
;
426 /* for internal transfer add, amount must be expense */
429 if( entry->paymode == PAYMODE_INTXFER && data->type == OPERATION_EDIT_ADD )
431 if( entry->amount > 0 )
436 //free any previous string
442 txt
= (gchar
*)gtk_entry_get_text(GTK_ENTRY(data
->ST_info
));
443 // ignore if entry is empty
446 entry
->info
= g_strdup(txt
);
449 entry
->paymode
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->NU_mode
));
450 entry
->kcat
= ui_cat_comboboxentry_get_key_add_new(GTK_COMBO_BOX(data
->PO_grp
));
451 entry
->kpay
= ui_pay_comboboxentry_get_key_add_new(GTK_COMBO_BOX(data
->PO_pay
));
452 entry
->kacc
= ui_acc_comboboxentry_get_key(GTK_COMBO_BOX(data
->PO_acc
));
453 entry
->kxferacc
= ui_acc_comboboxentry_get_key(GTK_COMBO_BOX(data
->PO_accto
));
456 txt
= (gchar
*)gtk_entry_get_text(GTK_ENTRY(data
->ST_tags
));
457 DB( g_print(" - tags: '%s'\n", txt
) );
458 transaction_tags_parse(entry
, txt
);
460 entry
->status
= radio_get_active(GTK_CONTAINER(data
->RA_status
));
462 //#1615245: moved here, after get combo entry key
463 if( entry
->paymode
!= PAYMODE_INTXFER
)
465 //#677351: revert kxferacc to 0
471 entry
->flags
&= (OF_SPLIT
); //(split is set in hb_transaction)
473 if( data
->type
== TRANSACTION_EDIT_ADD
|| data
->type
== TRANSACTION_EDIT_INHERIT
)
474 entry
->flags
|= OF_ADDED
;
476 if( data
->type
== TRANSACTION_EDIT_MODIFY
)
477 entry
->flags
|= OF_CHANGED
;
479 active
= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->CM_cheque
));
480 if(active
== 1) entry
->flags
|= OF_CHEQ2
;
482 //active = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_amount));
483 active
= entry
->amount
> 0 ? TRUE
: FALSE
;
484 if(active
== TRUE
) entry
->flags
|= OF_INCOME
;
489 static gboolean
deftransaction_amount_focusout(GtkWidget
*widget
, GdkEventFocus
*event
, gpointer user_data
)
491 struct deftransaction_data
*data
;
495 DB( g_print("\n[ui-transaction] amount focus-out-event %d\n", gtk_widget_is_focus(widget
)) );
497 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
499 //#1681532 not reproduced, so prevent
500 if( GTK_IS_COMBO_BOX(data
->NU_mode
) )
502 paymode
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->NU_mode
));
503 amount
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->ST_amount
));
505 // for internal transfer add, amount must be expense by default
506 if( paymode
== PAYMODE_INTXFER
&& data
->type
== TRANSACTION_EDIT_ADD
)
509 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data
->ST_amount
), amount
*= -1);
512 if( paymode
== PAYMODE_CHECK
)
514 deftransaction_set_cheque(widget
, NULL
);
517 deftransaction_update_warnsign(widget
, NULL
);
523 static void deftransaction_toggleamount(GtkWidget
*widget
, GtkEntryIconPosition icon_pos
, GdkEvent
*event
, gpointer user_data
)
525 struct deftransaction_data
*data
;
530 DB( g_print("\n[ui-transaction] toggleamount\n") );
532 if(icon_pos
== GTK_ENTRY_ICON_PRIMARY
)
534 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
536 gtk_spin_button_update(GTK_SPIN_BUTTON(data
->ST_amount
));
538 value
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->ST_amount
));
540 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data
->ST_amount
), value
);
542 if( data
->ope
->flags
& OF_SPLIT
)
544 count
= da_splits_count(data
->ope
->splits
);
545 DB( g_print("- count = %d\n", count
) );
548 split
= data
->ope
->splits
[i
];
553 deftransaction_update_warnsign(widget
, NULL
);
559 static void deftransaction_button_split_cb(GtkWidget
*widget
, gpointer user_data
)
561 struct deftransaction_data
*data
;
566 DB( g_print("\n[ui-transaction] doing split\n") );
568 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
572 amount
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->ST_amount
));
573 ui_split_dialog(data
->window
, ope
->splits
, amount
, &deftransaction_set_amount_from_split
);
575 //eval split to garantee disabled items
576 ope
->flags
&= ~(OF_SPLIT
);
577 nbsplit
= da_splits_count(ope
->splits
);
579 data
->ope
->flags
|= (OF_SPLIT
);
581 deftransaction_update(data
->window
, NULL
);
590 static void deftransaction_paymode(GtkWidget
*widget
, gpointer user_data
)
592 struct deftransaction_data
*data
;
597 DB( g_print("\n[ui-transaction] paymode change\n") );
599 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
601 payment
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->NU_mode
));
604 /* todo: prefill the cheque number ? */
605 if( data
->type
!= TRANSACTION_EDIT_MODIFY
)
607 if(payment
== PAYMODE_CHECK
)
609 deftransaction_set_cheque(widget
, user_data
);
614 if(payment
== PAYMODE_CHECK
)
617 sensitive
= (payment
== PAYMODE_INTXFER
) ? FALSE
: TRUE
;
618 gtk_widget_set_sensitive(data
->BT_split
, sensitive
);
620 sensitive
= page
== 1 ? TRUE
: FALSE
;
621 hb_widget_visible(data
->CM_cheque
, sensitive
);
623 if(payment
== PAYMODE_INTXFER
)
626 // for internal transfer add, amount must be expense by default
627 gdouble amount
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->ST_amount
));
628 if( data
->type
== TRANSACTION_EDIT_ADD
)
631 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data
->ST_amount
), amount
*= -1);
634 //if( data->type == TRANSACTION_EDIT_MODIFY )
638 gtk_label_set_text_with_mnemonic (GTK_LABEL(data
->LB_accto
), _("From acc_ount:"));
642 gtk_label_set_text_with_mnemonic (GTK_LABEL(data
->LB_accto
), _("To acc_ount:"));
649 deftransaction_update_accto(widget
, user_data
);
650 DB( g_print(" payment: %d, page: %d\n", payment
, page
) );
652 sensitive
= page
== 2 ? TRUE
: FALSE
;
653 hb_widget_visible(data
->LB_accto
, sensitive
);
654 hb_widget_visible(data
->PO_accto
, sensitive
);
660 ** called from outside
662 gint
deftransaction_external_edit(GtkWindow
*parent
, Transaction
*old_txn
, Transaction
*new_txn
)
667 DB( g_print("\n[ui-transaction] external edit (from out)\n") );
670 dialog
= create_deftransaction_window(GTK_WINDOW(parent
), TRANSACTION_EDIT_MODIFY
, FALSE
);
671 deftransaction_set_transaction(dialog
, new_txn
);
673 result
= gtk_dialog_run (GTK_DIALOG (dialog
));
674 if(result
== GTK_RESPONSE_ACCEPT
)
676 deftransaction_get(dialog
, NULL
);
678 account_balances_sub(old_txn
);
679 account_balances_add(new_txn
);
681 /* ok different case here
685 transaction_xfer_search_or_add_child
687 sync (acc chnage is inside now)
693 * always manage account change
697 if( new_txn
->paymode
== PAYMODE_INTXFER
)
699 if( old_txn
->paymode
!= PAYMODE_INTXFER
)
701 // this call can popup a user dialog to choose
702 transaction_xfer_search_or_add_child(GTK_WINDOW(dialog
), new_txn
, FALSE
);
708 //use old in case of dst_acc change
709 child
= transaction_xfer_child_strong_get(old_txn
);
710 //#1584342 was faultly old_txn
711 transaction_xfer_child_sync(new_txn
, child
);
716 //#1250061 : manage ability to break an internal xfer
717 if(old_txn
->paymode
== PAYMODE_INTXFER
)
720 gboolean break_result
;
722 DB( g_print(" - should break internal xfer\n") );
724 p_dialog
= gtk_message_dialog_new
730 _("Do you want to break the internal transfer ?\n\n"
731 "Proceeding will delete the target transaction.")
734 break_result
= gtk_dialog_run( GTK_DIALOG( p_dialog
) );
735 gtk_widget_destroy( p_dialog
);
737 if(break_result
== GTK_RESPONSE_YES
)
739 //we must use old_txn to ensure get the child
740 //#1663789 but we must clean new as well
741 transaction_xfer_remove_child(old_txn
);
743 new_txn
->kxferacc
= 0;
745 else //force paymode to internal xfer
747 new_txn
->paymode
= PAYMODE_INTXFER
;
752 //1638035: manage account change
753 if( old_txn
->kacc
!= new_txn
->kacc
)
755 //todo: maybe we should restrict this also to same currency account
756 //=> no pb for normal, and intxfer is restricted by ui (in theory)
757 transaction_acc_move(new_txn
, old_txn
->kacc
, new_txn
->kacc
);
761 deftransaction_dispose(dialog
, NULL
);
762 gtk_widget_destroy (dialog
);
768 void deftransaction_set_transaction(GtkWidget
*widget
, Transaction
*ope
)
770 struct deftransaction_data
*data
;
772 DB( g_print("\n[ui-transaction] set transaction (from out)\n") );
774 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
778 DB( g_print(" - ope=%p data=%p\n", data
->ope
, data
) );
780 DB( g_print(" - call init\n") );
782 deftransaction_set(widget
, NULL
);
783 deftransaction_paymode(widget
, NULL
);
784 deftransaction_update(widget
, NULL
);
785 deftransaction_update_warnsign(widget
, NULL
);
790 void deftransaction_dispose(GtkWidget
*widget
, gpointer user_data
)
792 struct deftransaction_data
*data
;
794 DB( g_print("\n[ui-transaction] dispose\n") );
796 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
802 static void deftransaction_setup(struct deftransaction_data
*data
)
805 DB( g_print("\n[ui-transaction] setup\n") );
807 ui_pay_comboboxentry_populate(GTK_COMBO_BOX(data
->PO_pay
), GLOBALS
->h_pay
);
808 ui_cat_comboboxentry_populate(GTK_COMBO_BOX(data
->PO_grp
), GLOBALS
->h_cat
);
809 ui_acc_comboboxentry_populate(GTK_COMBO_BOX(data
->PO_acc
), GLOBALS
->h_acc
, ACC_LST_INSERT_NORMAL
);
810 ui_acc_comboboxentry_populate(GTK_COMBO_BOX(data
->PO_accto
), GLOBALS
->h_acc
, ACC_LST_INSERT_NORMAL
);
812 if( data
->showtemplate
)
814 deftransaction_template_popover_populate (data
, GLOBALS
->arc_list
);
815 gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(data
->modelfilter
));
820 create_popover (GtkWidget
*parent
,
826 popover
= gtk_popover_new (parent
);
827 gtk_popover_set_position (GTK_POPOVER (popover
), pos
);
828 gtk_container_add (GTK_CONTAINER (popover
), child
);
829 gtk_container_set_border_width (GTK_CONTAINER (popover
), SPACING_SMALL
);
830 gtk_widget_show (child
);
832 /* gtk_widget_set_margin_start (popover, SPACING_MEDIUM);
833 gtk_widget_set_margin_end (popover, SPACING_MEDIUM);
834 gtk_widget_set_margin_top (popover, SPACING_MEDIUM);
835 gtk_widget_set_margin_bottom (popover, SPACING_MEDIUM);*/
841 static void deftransaction_template_popover_onRowActivated(GtkTreeView
*treeview
,
843 GtkTreeViewColumn
*col
,
846 struct deftransaction_data
*data
;
850 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(GTK_WIDGET(treeview
), GTK_TYPE_WINDOW
)), "inst_data");
851 model
= gtk_tree_view_get_model(treeview
);
853 if (gtk_tree_model_get_iter(model
, &iter
, path
))
858 gtk_tree_model_get(GTK_TREE_MODEL(model
), &iter
, LST_DSPTPL_DATAS
, &arc
, -1);
861 da_transaction_init_from_template(txn
, arc
);
862 if( da_splits_clone(arc
->splits
, txn
->splits
) > 0)
863 txn
->flags
|= OF_SPLIT
; //Flag that Splits are active
865 DB( g_print(" calls\n") );
867 deftransaction_set(GTK_WIDGET(treeview
), NULL
);
868 deftransaction_paymode(GTK_WIDGET(treeview
), NULL
);
869 deftransaction_update(GTK_WIDGET(treeview
), NULL
);
871 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(data
->MB_template
), FALSE
);
877 static void deftransaction_template_popover_populate(struct deftransaction_data
*data
, GList
*srclist
)
883 //insert all glist item into treeview
885 gtk_list_store_clear(GTK_LIST_STORE(model
));
887 list
= g_list_first(srclist
);
890 Archive
*entry
= list
->data
;
892 gtk_list_store_append (GTK_LIST_STORE(model
), &iter
);
893 gtk_list_store_set (GTK_LIST_STORE(model
), &iter
,
894 LST_DSPTPL_DATAS
, entry
,
895 LST_DSPTPL_NAME
, entry
->memo
,
898 //DB( g_print(" populate_treeview: %d %08x\n", i, list->data) );
900 list
= g_list_next(list
);
906 deftransaction_template_popover_refilter (GtkWidget
*widget
, gpointer user_data
)
908 struct deftransaction_data
*data
= user_data
;
910 DB( g_print(" text changed\n") );
912 gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(data
->modelfilter
));
916 static gboolean
deftransaction_template_popover_func_visible (GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer user_data
)
918 struct deftransaction_data
*data
= user_data
;
921 gboolean visible
= TRUE
;
924 showsched
= gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(data
->CM_showsched
));
926 gchar
*needle
= g_ascii_strdown(gtk_entry_get_text(GTK_ENTRY(data
->ST_search
)), -1);
928 gtk_tree_model_get (model
, iter
,
929 LST_DSPTPL_DATAS
, &entry
,
930 LST_DSPTPL_NAME
, &str
, -1);
934 if( (entry
->flags
& OF_AUTO
) && !showsched
)
940 gchar
*haystack
= g_ascii_strdown(str
, -1);
942 if (str
&& g_strrstr (haystack
, needle
) == NULL
)
947 DB( g_print("filter: '%s' '%s' %d\n", str
, needle
, visible
) );
959 static GtkWidget
*deftransaction_template_popover_create(struct deftransaction_data
*data
)
962 GtkCellRenderer
*renderer
;
963 GtkTreeViewColumn
*column
;
964 GtkWidget
*box
, *widget
, *scrollwin
, *treeview
;
966 box
= gtk_box_new(GTK_ORIENTATION_VERTICAL
, SPACING_SMALL
);
968 widget
= make_search(NULL
);
969 data
->ST_search
= widget
;
970 gtk_box_pack_start (GTK_BOX(box
), widget
, FALSE
, FALSE
, 0);
973 scrollwin
= gtk_scrolled_window_new(NULL
,NULL
);
974 gtk_box_pack_start (GTK_BOX(box
), scrollwin
, TRUE
, TRUE
, 0);
975 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin
), GTK_SHADOW_ETCHED_IN
);
976 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin
), GTK_POLICY_AUTOMATIC
, GTK_POLICY_AUTOMATIC
);
978 store
= gtk_list_store_new(NUM_LST_DSPTPL
,
982 data
->model
= GTK_TREE_MODEL(store
);
984 data
->modelfilter
= GTK_TREE_MODEL_FILTER(gtk_tree_model_filter_new(GTK_TREE_MODEL(data
->model
), NULL
));
985 gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(data
->modelfilter
), deftransaction_template_popover_func_visible
, data
, NULL
);
988 treeview
= gtk_tree_view_new_with_model(GTK_TREE_MODEL(data
->modelfilter
));
989 data
->LV_arc
= treeview
;
990 gtk_container_add(GTK_CONTAINER(scrollwin
), treeview
);
992 gtk_widget_grab_focus(treeview
);
994 /* column for bug numbers */
995 renderer
= gtk_cell_renderer_text_new ();
996 column
= gtk_tree_view_column_new_with_attributes (NULL
,
1001 //gtk_tree_view_column_set_resizable (column, TRUE);
1002 gtk_tree_view_append_column (GTK_TREE_VIEW(treeview
), column
);
1003 gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(treeview
), FALSE
);
1005 widget
= gtk_check_button_new_with_mnemonic(_("Show _scheduled"));
1006 data
->CM_showsched
= widget
;
1007 gtk_box_pack_start (GTK_BOX(box
), widget
, FALSE
, FALSE
, 0);
1009 gtk_widget_show_all (box
);
1012 g_signal_connect (data
->CM_showsched
, "toggled", G_CALLBACK (deftransaction_template_popover_refilter
), data
);
1013 g_signal_connect (data
->ST_search
, "search-changed", G_CALLBACK (deftransaction_template_popover_refilter
), data
);
1019 static GtkWidget
*deftransaction_make_block1(struct deftransaction_data
*data
)
1021 GtkWidget
*group_grid
, *hbox
, *label
, *widget
, *image
;
1024 group_grid
= gtk_grid_new ();
1025 gtk_grid_set_row_spacing (GTK_GRID (group_grid
), SPACING_SMALL
);
1026 gtk_grid_set_column_spacing (GTK_GRID (group_grid
), SPACING_MEDIUM
);
1029 label
= make_label_widget(_("_Date:"));
1030 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1031 widget
= gtk_date_entry_new();
1032 data
->PO_date
= widget
;
1033 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 3, 1);
1034 gtk_widget_set_halign (widget
, GTK_ALIGN_START
);
1035 gtk_widget_set_tooltip_text(widget
, _("Date accepted here are:\nday,\nday/month or month/day,\nand complete date into your locale"));
1038 label
= make_label_widget(_("_Amount:"));
1039 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1040 hbox
= gtk_box_new (GTK_ORIENTATION_HORIZONTAL
, 0);
1041 gtk_grid_attach (GTK_GRID (group_grid
), hbox
, 1, row
, 1, 1);
1043 widget
= make_amount(label
);
1044 data
->ST_amount
= widget
;
1045 gtk_entry_set_icon_from_icon_name(GTK_ENTRY(widget
), GTK_ENTRY_ICON_PRIMARY
, ICONNAME_HB_TOGGLE_SIGN
);
1046 gtk_entry_set_icon_tooltip_text(GTK_ENTRY(widget
), GTK_ENTRY_ICON_PRIMARY
, _("Toggle amount sign"));
1047 gtk_box_pack_start (GTK_BOX (hbox
), widget
, TRUE
, TRUE
, 0);
1049 image
= gtk_image_new_from_icon_name (ICONNAME_HB_BUTTON_SPLIT
, GTK_ICON_SIZE_BUTTON
);
1050 widget
= gtk_button_new();
1051 g_object_set (widget
, "image", image
, NULL
);
1052 data
->BT_split
= widget
;
1053 gtk_box_pack_start (GTK_BOX (hbox
), widget
, FALSE
, FALSE
, 0);
1054 gtk_widget_set_tooltip_text(widget
, _("Transaction splits"));
1057 label
= make_label_widget(_("Pa_yment:"));
1058 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1059 widget
= make_paymode(label
);
1060 data
->NU_mode
= widget
;
1061 gtk_widget_set_halign (widget
, GTK_ALIGN_START
);
1062 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 3, 1);
1065 widget
= gtk_check_button_new_with_mnemonic(_("Of notebook _2"));
1066 data
->CM_cheque
= widget
;
1067 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 4, 1);
1070 label
= make_label_widget(_("_Info:"));
1071 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1072 widget
= make_string(label
);
1073 data
->ST_info
= widget
;
1074 gtk_widget_set_hexpand (widget
, TRUE
);
1075 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 3, 1);
1078 label
= make_label_widget(_("A_ccount:"));
1079 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1080 widget
= ui_acc_comboboxentry_new(label
);
1081 data
->PO_acc
= widget
;
1082 gtk_widget_set_hexpand (widget
, TRUE
);
1083 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 3, 1);
1086 label
= make_label_widget(_("To acc_ount:"));
1087 data
->LB_accto
= label
;
1088 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1089 widget
= ui_acc_comboboxentry_new(label
);
1090 data
->PO_accto
= widget
;
1091 gtk_widget_set_hexpand (widget
, TRUE
);
1092 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 3, 1);
1095 label
= make_label_widget(_("_Payee:"));
1096 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1097 widget
= ui_pay_comboboxentry_new(label
);
1098 data
->PO_pay
= widget
;
1099 gtk_widget_set_hexpand (widget
, TRUE
);
1100 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 3, 1);
1101 gtk_widget_set_tooltip_text(widget
, _("Autocompletion and direct seizure\nis available"));
1104 label
= make_label_widget(_("_Category:"));
1105 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1106 widget
= ui_cat_comboboxentry_new(label
);
1107 data
->PO_grp
= widget
;
1108 gtk_widget_set_hexpand (widget
, TRUE
);
1109 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 3, 1);
1110 gtk_widget_set_tooltip_text(widget
, _("Autocompletion and direct seizure\nis available"));
1113 label
= make_label_widget(_("_Status:"));
1114 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1115 widget
= make_radio(CYA_TXN_STATUS
, TRUE
, GTK_ORIENTATION_HORIZONTAL
);
1116 data
->RA_status
= widget
;
1117 gtk_widget_set_halign (widget
, GTK_ALIGN_START
);
1118 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 3, 1);
1121 label
= make_label_widget(_("M_emo:"));
1122 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1123 widget
= make_memo_entry(label
);
1124 data
->ST_word
= widget
;
1125 gtk_widget_set_hexpand (widget
, TRUE
);
1126 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 3, 1);
1129 label
= make_label_widget(_("Ta_gs:"));
1130 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1131 widget
= make_string(label
);
1132 data
->ST_tags
= widget
;
1133 gtk_widget_set_hexpand (widget
, TRUE
);
1134 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 3, 1);
1141 deftransaction_getgeometry(GtkWidget
*widget
, GdkEventConfigure
*event
, gpointer user_data
)
1143 struct WinGeometry
*wg
;
1145 DB( g_print("\n[ui-transaction] get geometry\n") );
1148 wg
= &PREFS
->txn_wg
;
1149 gtk_window_get_size(GTK_WINDOW(widget
), &wg
->w
, NULL
);
1151 DB( g_print(" window: w=%d\n", wg
->w
) );
1157 GtkWidget
*create_deftransaction_window (GtkWindow
*parent
, gint type
, gboolean postmode
)
1159 struct deftransaction_data
*data
;
1160 struct WinGeometry
*wg
;
1161 GtkWidget
*dialog
, *content_area
, *content_grid
, *group_grid
;
1162 GtkWidget
*label
, *bar
;
1165 DB( g_print("\n[ui-transaction] new\n") );
1167 data
= g_malloc0(sizeof(struct deftransaction_data
));
1170 dialog = gtk_dialog_new_with_buttons (_(CYA_OPERATION[data->type]),
1171 GTK_WINDOW (parent),
1176 dialog
= gtk_dialog_new();
1177 gtk_window_set_title (GTK_WINDOW(dialog
), _(CYA_OPERATION
[type
]));
1178 gtk_window_set_transient_for (GTK_WINDOW(dialog
), GTK_WINDOW(parent
));
1183 //store our window private data
1184 g_object_set_data(G_OBJECT(dialog
), "inst_data", (gpointer
)data
);
1185 DB( g_print(" - window=%p, inst_data=%p\n", dialog
, data
) );
1187 data
->window
= dialog
;
1190 // if you add/remove response_id also change into deftransaction_update_transfer
1191 if(type
== TRANSACTION_EDIT_MODIFY
)
1193 gtk_dialog_add_buttons (GTK_DIALOG(dialog
),
1194 _("_Cancel"), GTK_RESPONSE_REJECT
,
1195 _("_OK"), GTK_RESPONSE_ACCEPT
,
1202 gtk_dialog_add_buttons (GTK_DIALOG(dialog
),
1203 _("_Close"), GTK_RESPONSE_REJECT
,
1204 _("_Add & keep"), GTK_RESPONSE_ADDKEEP
,
1205 _("_Add"), GTK_RESPONSE_ADD
,
1210 gtk_dialog_add_buttons (GTK_DIALOG(dialog
),
1211 _("_Close"), GTK_RESPONSE_REJECT
,
1212 _("_Post"), GTK_RESPONSE_ADD
,
1219 case TRANSACTION_EDIT_ADD
:
1220 gtk_window_set_icon_name(GTK_WINDOW (dialog
), ICONNAME_HB_OPE_ADD
);
1222 case TRANSACTION_EDIT_INHERIT
:
1223 gtk_window_set_icon_name(GTK_WINDOW (dialog
), ICONNAME_HB_OPE_HERIT
);
1225 case TRANSACTION_EDIT_MODIFY
:
1226 gtk_window_set_icon_name(GTK_WINDOW (dialog
), ICONNAME_HB_OPE_EDIT
);
1230 //gtk_window_set_decorated(GTK_WINDOW(dialog), TRUE);
1233 content_area
= gtk_dialog_get_content_area(GTK_DIALOG (dialog
));
1235 content_grid
= gtk_grid_new();
1236 gtk_grid_set_row_spacing (GTK_GRID (content_grid
), SPACING_LARGE
);
1237 gtk_grid_set_column_spacing (GTK_GRID (content_grid
), SPACING_LARGE
);
1238 //gtk_grid_set_column_homogeneous(GTK_GRID (content_grid), TRUE);
1239 gtk_orientable_set_orientation(GTK_ORIENTABLE(content_grid
), GTK_ORIENTATION_VERTICAL
);
1240 gtk_container_set_border_width (GTK_CONTAINER(content_grid
), SPACING_MEDIUM
);
1241 gtk_container_add (GTK_CONTAINER (content_area
), content_grid
);
1242 gtk_widget_show_all(content_grid
);
1246 data
->showtemplate
= FALSE
;
1247 if( data
->type
!= TRANSACTION_EDIT_MODIFY
&& da_archive_length() > 0 && !postmode
)
1249 GtkWidget
*box
, *menubutton
, *image
;
1251 data
->showtemplate
= TRUE
;
1253 menubutton
= gtk_menu_button_new ();
1254 data
->MB_template
= menubutton
;
1255 box
= gtk_box_new(GTK_ORIENTATION_HORIZONTAL
, SPACING_SMALL
);
1256 label
= gtk_label_new_with_mnemonic (_("Use a _template"));
1257 gtk_box_pack_start (GTK_BOX(box
), label
, FALSE
, FALSE
, 0);
1258 image
= gtk_image_new_from_icon_name ("pan-down-symbolic", GTK_ICON_SIZE_BUTTON
);
1259 gtk_box_pack_start (GTK_BOX(box
), image
, FALSE
, FALSE
, 0);
1260 gtk_container_add(GTK_CONTAINER(menubutton
), box
);
1262 gtk_menu_button_set_direction (GTK_MENU_BUTTON(menubutton
), GTK_ARROW_DOWN
);
1263 gtk_widget_set_halign (menubutton
, GTK_ALIGN_END
);
1264 gtk_widget_set_hexpand (menubutton
, TRUE
);
1265 gtk_grid_attach (GTK_GRID (content_grid
), menubutton
, 1, crow
, 1, 1);
1266 gtk_widget_show_all(menubutton
);
1269 GtkWidget
*template = deftransaction_template_popover_create(data
);
1270 GtkWidget
*popover
= create_popover (menubutton
, template, GTK_POS_BOTTOM
);
1271 gtk_widget_set_size_request (popover
, 2*HB_MINWIDTH_LIST
, HB_MINHEIGHT_LIST
);
1272 //gtk_widget_set_vexpand (popover, TRUE);
1273 //gtk_widget_set_hexpand (popover, TRUE);
1275 /*gtk_widget_set_margin_start (popover, 10);
1276 gtk_widget_set_margin_end (popover, 10);
1277 gtk_widget_set_margin_bottom (popover, 10);*/
1279 gtk_menu_button_set_popover(GTK_MENU_BUTTON(menubutton
), popover
);
1281 g_signal_connect (GTK_TREE_VIEW(data
->LV_arc
), "row-activated", G_CALLBACK (deftransaction_template_popover_onRowActivated
), NULL
);
1286 group_grid
= deftransaction_make_block1(data
);
1287 //gtk_widget_set_hexpand (GTK_WIDGET(group_grid), TRUE);
1288 gtk_grid_attach (GTK_GRID (content_grid
), group_grid
, 0, crow
, 2, 1);
1289 gtk_widget_show_all(group_grid
);
1292 group_grid = deftransaction_make_block2(data);
1293 gtk_widget_set_hexpand (GTK_WIDGET(group_grid), TRUE);
1294 gtk_grid_attach (GTK_GRID (content_grid), group_grid, 1, crow, 2, 1);
1295 gtk_widget_show_all(group_grid);*/
1298 bar
= gtk_info_bar_new ();
1299 data
->IB_warnsign
= bar
;
1300 gtk_info_bar_set_message_type (GTK_INFO_BAR (bar
), GTK_MESSAGE_WARNING
);
1301 label
= gtk_label_new (_("Warning: amount and category sign don't match"));
1302 gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (bar
))), label
, TRUE
, TRUE
, 0);
1303 gtk_grid_attach (GTK_GRID (content_grid
), bar
, 0, crow
, 2, 1);
1306 //connect all our signals
1307 g_signal_connect (dialog
, "configure-event", G_CALLBACK (deftransaction_getgeometry
), (gpointer
)data
);
1310 g_signal_connect (G_OBJECT (data
->ST_amount
), "focus-out-event", G_CALLBACK (deftransaction_amount_focusout
), NULL
);
1311 g_signal_connect (G_OBJECT (data
->ST_amount
), "icon-release", G_CALLBACK (deftransaction_toggleamount
), NULL
);
1312 g_signal_connect (G_OBJECT (data
->BT_split
), "clicked", G_CALLBACK (deftransaction_button_split_cb
), NULL
);
1314 g_signal_connect (data
->NU_mode
, "changed", G_CALLBACK (deftransaction_paymode
), NULL
);
1315 g_signal_connect (data
->CM_cheque
, "toggled", G_CALLBACK (deftransaction_paymode
), NULL
);
1317 g_signal_connect (data
->PO_pay
, "changed", G_CALLBACK (deftransaction_update_payee
), NULL
);
1318 g_signal_connect (data
->PO_acc
, "changed", G_CALLBACK (deftransaction_update_accto
), NULL
);
1319 g_signal_connect (data
->PO_accto
, "changed", G_CALLBACK (deftransaction_update_transfer
), NULL
);
1320 g_signal_connect (data
->PO_grp
, "changed", G_CALLBACK (deftransaction_update_warnsign
), NULL
);
1323 //setup, init and show window
1324 deftransaction_setup(data
);
1326 wg
= &PREFS
->txn_wg
;
1327 gtk_window_set_default_size(GTK_WINDOW(dialog
), wg
->w
, -1);
1329 //gtk_widget_show_all (dialog);
1330 //gtk_widget_hide(data->IB_warnsign);