1 /* HomeBank -- Free, easy, personal accounting for everyone.
2 * Copyright (C) 1995-2019 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"
32 /****************************************************************************/
34 /****************************************************************************/
43 /* our global datas */
44 extern struct HomeBank
*GLOBALS
;
45 extern struct Preferences
*PREFS
;
48 gchar
*CYA_OPERATION
[] = {
49 N_("Add transaction"),
50 N_("Inherit transaction"),
51 N_("Modify transaction")
55 gchar
*CYA_TXN_STATUS
[] = {
64 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
66 static void deftransaction_template_popover_populate(struct deftransaction_data
*data
, GList
*srclist
);
68 static void deftransaction_update(GtkWidget
*widget
, gpointer user_data
)
70 struct deftransaction_data
*data
;
73 DB( g_print("\n[ui-transaction] update\n") );
75 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
77 //# 1419476 empty category when no split either...
78 if( (data
->ope
->flags
& (OF_SPLIT
)) )
80 //# 1416624 empty category when split
81 ui_cat_comboboxentry_set_active(GTK_COMBO_BOX(data
->PO_cat
), 0);
84 /* disable amount+category if split is set */
85 sensitive
= (data
->ope
->flags
& (OF_SPLIT
)) ? FALSE
: TRUE
;
86 gtk_widget_set_sensitive(data
->ST_amount
, sensitive
);
87 gtk_widget_set_sensitive(data
->PO_cat
, sensitive
);
91 //1336928 combobox tags
92 static void deftransaction_update_tags(GtkWidget
*widget
, gpointer user_data
)
94 struct deftransaction_data
*data
;
97 DB( g_print("\n[ui-transaction] update tags\n") );
99 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
101 newtag
= gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(data
->CY_tags
));
102 ui_gtk_entry_tag_name_append(GTK_ENTRY(data
->ST_tags
), newtag
);
105 //revert back to ----
106 g_signal_handlers_block_by_func (G_OBJECT (data
->CY_tags
), G_CALLBACK (deftransaction_update_tags
), NULL
);
107 hbtk_combo_box_set_active_id(GTK_COMBO_BOX_TEXT(data
->CY_tags
), 0);
108 g_signal_handlers_unblock_by_func (G_OBJECT (data
->CY_tags
), G_CALLBACK (deftransaction_update_tags
), NULL
);
112 static void deftransaction_update_warnsign(GtkWidget
*widget
, gpointer user_data
)
114 struct deftransaction_data
*data
;
115 gboolean warning
= FALSE
;
120 DB( g_print("\n[ui-transaction] update warning sign\n") );
122 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
124 cat
= ui_cat_comboboxentry_get(GTK_COMBO_BOX(data
->PO_cat
));
125 if(cat
!= NULL
&& cat
->key
> 0)
127 amount
= hb_amount_round(gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->ST_amount
)), 2);
130 amttype
= (amount
> 0) ? 1 : -1;
131 warning
= (category_type_get(cat
) != amttype
) ? TRUE
: FALSE
;
137 gtk_widget_show_all(data
->IB_warnsign
);
138 //#GTK+710888: hack waiting a fix
139 gtk_widget_queue_resize (data
->IB_warnsign
);
142 gtk_widget_hide(data
->IB_warnsign
);
147 static void deftransaction_update_transfer(GtkWidget
*widget
, gpointer user_data
)
149 struct deftransaction_data
*data
;
153 DB( g_print("\n[ui-transaction] update transfer\n") );
155 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
159 kacc
= ui_acc_comboboxentry_get_key(GTK_COMBO_BOX(data
->PO_acc
));
161 if(kacc
== 0) { sensitive
= FALSE
; goto end
; }
164 * - target account selected
168 if( gtk_combo_box_get_active(GTK_COMBO_BOX(data
->NU_mode
)) == PAYMODE_INTXFER
)
170 Account
*srcacc
, *dstacc
;
172 kdst
= ui_acc_comboboxentry_get_key(GTK_COMBO_BOX(data
->PO_accto
));
174 if(kdst
== 0) { sensitive
= FALSE
; goto end
; }
180 srcacc
= da_acc_get(kacc
);
181 dstacc
= da_acc_get(kdst
);
182 if( srcacc
&& dstacc
)
184 if(srcacc
->kcur
!= dstacc
->kcur
)
192 DB( g_print(" sensitive %d\n", sensitive
) );
195 //gtk_widget_set_sensitive(gtk_dialog_get_action_area(GTK_DIALOG (data->window)), sensitive);
196 gtk_dialog_set_response_sensitive(GTK_DIALOG (data
->window
), GTK_RESPONSE_ACCEPT
, sensitive
);
197 gtk_dialog_set_response_sensitive(GTK_DIALOG (data
->window
), HB_RESPONSE_ADD
, sensitive
);
198 gtk_dialog_set_response_sensitive(GTK_DIALOG (data
->window
), HB_RESPONSE_ADDKEEP
, sensitive
);
203 static void deftransaction_update_payee(GtkWidget
*widget
, gpointer user_data
)
205 struct deftransaction_data
*data
;
210 DB( g_print("\n[ui-transaction] update payee\n") );
212 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
214 pay
= ui_pay_comboboxentry_get(GTK_COMBO_BOX(data
->PO_pay
));
217 // only set for empty category
218 // #1635053 and also paymode unset
219 // #1817278 and independently
220 cat
= ui_cat_comboboxentry_get(GTK_COMBO_BOX(data
->PO_cat
));
221 if( (cat
== NULL
|| cat
->key
== 0) )
223 g_signal_handlers_block_by_func (G_OBJECT (data
->PO_cat
), G_CALLBACK (deftransaction_update_warnsign
), NULL
);
224 ui_cat_comboboxentry_set_active(GTK_COMBO_BOX(data
->PO_cat
), pay
->kcat
);
225 g_signal_handlers_unblock_by_func (G_OBJECT (data
->PO_cat
), G_CALLBACK (deftransaction_update_warnsign
), NULL
);
228 paymode
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->NU_mode
));
229 if( (paymode
== PAYMODE_NONE
) )
231 gtk_combo_box_set_active(GTK_COMBO_BOX(data
->NU_mode
), pay
->paymode
);
237 static void deftransaction_set_cheque(GtkWidget
*widget
, gpointer user_data
)
239 struct deftransaction_data
*data
;
246 DB( g_print("\n[ui-transaction] set_cheque\n") );
248 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
250 amount
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->ST_amount
));
253 kacc
= ui_acc_comboboxentry_get_key(GTK_COMBO_BOX(data
->PO_acc
));
257 acc
= da_acc_get( kacc
);
260 DB( g_print(" - should fill for acc %d '%s'\n", kacc
, acc
->name
) );
262 cheque
= ( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->CM_cheque
))==TRUE
? acc
->cheque2
: acc
->cheque1
);
263 cheque_str
= g_strdup_printf("%d", cheque
+ 1);
264 gtk_entry_set_text(GTK_ENTRY(data
->ST_info
), cheque_str
);
272 gtk_entry_set_text(GTK_ENTRY(data
->ST_info
), "");
279 //#1676162 update the nb digits of amount
280 static void deftransaction_set_amount_nbdigits(GtkWidget
*widget
, guint32 kacc
)
282 struct deftransaction_data
*data
;
284 DB( g_print("\n[ui-transaction] set_amount_nbdigits\n") );
286 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
288 Account
*srcacc
= da_acc_get(kacc
);
291 Currency
*cur
= da_cur_get(srcacc
->kcur
);
293 DB( g_print("- acc is %d '%s', curr=%d\n", srcacc
->key
, srcacc
->name
, srcacc
->kcur
) );
297 DB( g_print("- set digits to '%s' %d\n", cur
->name
, cur
->frac_digits
) );
298 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(data
->ST_amount
), cur
->frac_digits
);
301 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(data
->ST_amount
), 2);
307 static void deftransaction_update_accto(GtkWidget
*widget
, gpointer user_data
)
309 struct deftransaction_data
*data
;
312 DB( g_print("\n[ui-transaction] update accto\n") );
314 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
316 kacc
= ui_acc_comboboxentry_get_key(GTK_COMBO_BOX(data
->PO_acc
));
318 DB( g_print(" acc is %d\n", kacc
) );
320 deftransaction_set_amount_nbdigits(widget
, kacc
);
321 //g_signal_handlers_block_by_func (G_OBJECT (data->PO_accto), G_CALLBACK (deftransaction_update_transfer), NULL);
322 //ui_acc_comboboxentry_set_active(GTK_COMBO_BOX(data->PO_accto), 0);
323 //g_signal_handlers_unblock_by_func (G_OBJECT (data->PO_accto), G_CALLBACK (deftransaction_update_transfer), NULL);
325 ui_acc_comboboxentry_populate_except(GTK_COMBO_BOX(data
->PO_accto
), GLOBALS
->h_acc
, kacc
, ACC_LST_INSERT_NORMAL
);
327 deftransaction_update_transfer(widget
, user_data
);
332 void deftransaction_set_amount_from_split(GtkWidget
*widget
, gdouble amount
)
334 struct deftransaction_data
*data
;
336 DB( g_print("\n[ui-transaction] set_amount_from_split\n") );
338 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
340 DB( g_print("- amount=%.2f\n", amount
) );
342 data
->ope
->amount
= amount
;
343 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data
->ST_amount
), amount
);
345 deftransaction_update(widget
, NULL
);
350 static void deftransaction_set(GtkWidget
*widget
, gpointer user_data
)
352 struct deftransaction_data
*data
;
356 DB( g_print("\n[ui-transaction] set\n") );
358 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
362 DB( g_print(" - ope=%p data=%p tags:%p\n", data
->ope
, data
, entry
->tags
) );
364 //DB( g_print(" set date to %d\n", entry->date) );
365 //g_object_set(GTK_DATE_ENTRY(data->PO_date), "date", (guint32)entry->ope_Date);
366 gtk_date_entry_set_date(GTK_DATE_ENTRY(data
->PO_date
), (guint
)entry
->date
);
368 txt
= (entry
->memo
!= NULL
) ? entry
->memo
: "";
369 gtk_entry_set_text(GTK_ENTRY(data
->ST_memo
), txt
);
370 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data
->ST_amount
), entry
->amount
);
371 //gtk_combo_box_set_active(GTK_COMBO_BOX(data->CY_amount), (entry->ope_Flags & OF_INCOME) ? 1 : 0);
373 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data
->CM_cheque
), (entry
->flags
& OF_CHEQ2
) ? 1 : 0);
375 txt
= (entry
->info
!= NULL
) ? entry
->info
: "";
376 gtk_entry_set_text(GTK_ENTRY(data
->ST_info
), txt
);
377 ui_cat_comboboxentry_set_active(GTK_COMBO_BOX(data
->PO_cat
), entry
->kcat
);
378 ui_pay_comboboxentry_set_active(GTK_COMBO_BOX(data
->PO_pay
), entry
->kpay
);
380 tagstr
= tags_tostring(entry
->tags
);
381 DB( g_print(" - tags: '%s'\n", txt
) );
382 txt
= (tagstr
!= NULL
) ? tagstr
: "";
383 gtk_entry_set_text(GTK_ENTRY(data
->ST_tags
), txt
);
386 hbtk_radio_set_active(GTK_CONTAINER(data
->RA_status
), entry
->status
);
388 //as we trigger an event on this
389 //let's place it at the end to avoid missvalue on the trigger function
390 g_signal_handlers_block_by_func (G_OBJECT (data
->PO_acc
), G_CALLBACK (deftransaction_update_accto
), NULL
);
392 ui_acc_comboboxentry_set_active(GTK_COMBO_BOX(data
->PO_acc
), entry
->kacc
);
393 ui_acc_comboboxentry_set_active(GTK_COMBO_BOX(data
->PO_accto
), entry
->kxferacc
);
395 g_signal_handlers_unblock_by_func (G_OBJECT (data
->PO_acc
), G_CALLBACK (deftransaction_update_accto
), NULL
);
397 gtk_combo_box_set_active(GTK_COMBO_BOX(data
->NU_mode
), entry
->paymode
);
399 DB( g_print(" - acc is: %d\n", gtk_combo_box_get_active(GTK_COMBO_BOX(data
->PO_acc
)) ) );
403 void deftransaction_get(GtkWidget
*widget
, gpointer user_data
)
405 struct deftransaction_data
*data
;
411 DB( g_print("\n[ui-transaction] get\n") );
413 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
417 DB( g_print(" - ope = %p\n", entry
) );
419 //DB( g_print(" get date to %d\n", entry->ope_Date) );
420 entry
->date
= gtk_date_entry_get_date(GTK_DATE_ENTRY(data
->PO_date
));
421 //g_object_get(GTK_DATE_ENTRY(data->PO_date), "date", entry->ope_Date);
423 //free any previous string
429 txt
= (gchar
*)gtk_entry_get_text(GTK_ENTRY(data
->ST_memo
));
430 // ignore if entry is empty
433 entry
->memo
= g_strdup(txt
);
435 //#1716182 add into memo autocomplete
436 if( da_transaction_insert_memo(entry
) )
438 GtkEntryCompletion
*completion
;
442 completion
= gtk_entry_get_completion (GTK_ENTRY(data
->ST_memo
));
443 model
= gtk_entry_completion_get_model (completion
);
444 gtk_list_store_insert_with_values(GTK_LIST_STORE(model
), &iter
, -1,
451 value
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->ST_amount
));
452 entry
->amount
= value
;
454 /* for internal transfer add, amount must be expense */
457 if( entry->paymode == PAYMODE_INTXFER && data->type == OPERATION_EDIT_ADD )
459 if( entry->amount > 0 )
464 //free any previous string
470 txt
= (gchar
*)gtk_entry_get_text(GTK_ENTRY(data
->ST_info
));
471 // ignore if entry is empty
474 entry
->info
= g_strdup(txt
);
477 entry
->paymode
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->NU_mode
));
478 entry
->kcat
= ui_cat_comboboxentry_get_key_add_new(GTK_COMBO_BOX(data
->PO_cat
));
479 entry
->kpay
= ui_pay_comboboxentry_get_key_add_new(GTK_COMBO_BOX(data
->PO_pay
));
480 entry
->kacc
= ui_acc_comboboxentry_get_key(GTK_COMBO_BOX(data
->PO_acc
));
481 entry
->kxferacc
= ui_acc_comboboxentry_get_key(GTK_COMBO_BOX(data
->PO_accto
));
484 txt
= (gchar
*)gtk_entry_get_text(GTK_ENTRY(data
->ST_tags
));
485 DB( g_print(" - tags: '%s'\n", txt
) );
487 entry
->tags
= tags_parse(txt
);
489 entry
->status
= hbtk_radio_get_active(GTK_CONTAINER(data
->RA_status
));
491 //#1615245: moved here, after get combo entry key
492 if( entry
->paymode
!= PAYMODE_INTXFER
)
494 //#677351: revert kxferacc to 0
500 entry
->flags
&= (OF_SPLIT
); //(split is set in hb_transaction)
502 if( data
->type
== TRANSACTION_EDIT_ADD
|| data
->type
== TRANSACTION_EDIT_INHERIT
)
503 entry
->flags
|= OF_ADDED
;
505 if( data
->type
== TRANSACTION_EDIT_MODIFY
)
506 entry
->flags
|= OF_CHANGED
;
508 active
= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->CM_cheque
));
509 if(active
== 1) entry
->flags
|= OF_CHEQ2
;
511 //active = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_amount));
512 active
= entry
->amount
> 0 ? TRUE
: FALSE
;
513 if(active
== TRUE
) entry
->flags
|= OF_INCOME
;
518 static gboolean
deftransaction_amount_focusout(GtkWidget
*widget
, GdkEventFocus
*event
, gpointer user_data
)
520 struct deftransaction_data
*data
;
524 DB( g_print("\n[ui-transaction] amount focus-out-event %d\n", gtk_widget_is_focus(widget
)) );
526 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
528 //#1681532 not reproduced, so prevent
529 if( GTK_IS_COMBO_BOX(data
->NU_mode
) )
531 paymode
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->NU_mode
));
532 amount
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->ST_amount
));
534 // for internal transfer add, amount must be expense by default
535 if( paymode
== PAYMODE_INTXFER
&& data
->type
== TRANSACTION_EDIT_ADD
)
538 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data
->ST_amount
), amount
*= -1);
541 if( paymode
== PAYMODE_CHECK
)
543 deftransaction_set_cheque(widget
, NULL
);
546 deftransaction_update_warnsign(widget
, NULL
);
552 static void deftransaction_toggleamount(GtkWidget
*widget
, GtkEntryIconPosition icon_pos
, GdkEvent
*event
, gpointer user_data
)
554 struct deftransaction_data
*data
;
559 DB( g_print("\n[ui-transaction] toggleamount\n") );
561 if(icon_pos
== GTK_ENTRY_ICON_PRIMARY
)
563 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
565 gtk_spin_button_update(GTK_SPIN_BUTTON(data
->ST_amount
));
567 value
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->ST_amount
));
569 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data
->ST_amount
), value
);
571 if( data
->ope
->flags
& OF_SPLIT
)
573 count
= da_splits_length(data
->ope
->splits
);
574 DB( g_print("- count = %d\n", count
) );
577 split
= da_splits_get(data
->ope
->splits
, i
);
582 deftransaction_update_warnsign(widget
, NULL
);
588 static void deftransaction_button_split_cb(GtkWidget
*widget
, gpointer user_data
)
590 struct deftransaction_data
*data
;
595 DB( g_print("\n[ui-transaction] doing split\n") );
597 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
601 amount
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->ST_amount
));
602 ui_split_dialog(data
->window
, &ope
->splits
, amount
, &deftransaction_set_amount_from_split
);
604 //eval split to garantee disabled items
605 ope
->flags
&= ~(OF_SPLIT
);
606 nbsplit
= da_splits_length(ope
->splits
);
608 data
->ope
->flags
|= (OF_SPLIT
);
610 deftransaction_update(data
->window
, NULL
);
614 static void deftransaction_paymode(GtkWidget
*widget
, gpointer user_data
)
616 struct deftransaction_data
*data
;
621 DB( g_print("\n[ui-transaction] paymode change\n") );
623 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
625 payment
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->NU_mode
));
628 /* todo: prefill the cheque number ? */
629 if( data
->type
!= TRANSACTION_EDIT_MODIFY
)
631 if(payment
== PAYMODE_CHECK
)
633 deftransaction_set_cheque(widget
, user_data
);
638 if(payment
== PAYMODE_CHECK
)
641 sensitive
= (payment
== PAYMODE_INTXFER
) ? FALSE
: TRUE
;
642 gtk_widget_set_sensitive(data
->BT_split
, sensitive
);
644 sensitive
= page
== 1 ? TRUE
: FALSE
;
645 hb_widget_visible(data
->CM_cheque
, sensitive
);
647 if(payment
== PAYMODE_INTXFER
)
650 // for internal transfer add, amount must be expense by default
651 gdouble amount
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->ST_amount
));
652 if( data
->type
== TRANSACTION_EDIT_ADD
)
655 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data
->ST_amount
), amount
*= -1);
658 //if( data->type == TRANSACTION_EDIT_MODIFY )
662 gtk_label_set_text_with_mnemonic (GTK_LABEL(data
->LB_accto
), _("From acc_ount:"));
666 gtk_label_set_text_with_mnemonic (GTK_LABEL(data
->LB_accto
), _("To acc_ount:"));
673 deftransaction_update_accto(widget
, user_data
);
674 DB( g_print(" payment: %d, page: %d\n", payment
, page
) );
676 sensitive
= page
== 2 ? TRUE
: FALSE
;
677 hb_widget_visible(data
->LB_accto
, sensitive
);
678 hb_widget_visible(data
->PO_accto
, sensitive
);
684 ** called from outside (register/report detail)
686 gint
deftransaction_external_edit(GtkWindow
*parent
, Transaction
*old_txn
, Transaction
*new_txn
)
691 DB( g_print("\n[ui-transaction] external edit (from out)\n") );
694 dialog
= create_deftransaction_window(GTK_WINDOW(parent
), TRANSACTION_EDIT_MODIFY
, FALSE
, 0);
695 deftransaction_set_transaction(dialog
, new_txn
);
697 result
= gtk_dialog_run (GTK_DIALOG (dialog
));
698 if(result
== GTK_RESPONSE_ACCEPT
)
700 deftransaction_get(dialog
, NULL
);
702 account_balances_sub(old_txn
);
703 account_balances_add(new_txn
);
705 /* ok different case here
709 check for existing child or add it
711 sync (acc change is inside now)
717 * always manage account change
721 if( new_txn
->paymode
== PAYMODE_INTXFER
)
723 if( old_txn
->paymode
!= PAYMODE_INTXFER
)
725 // this call can popup a user dialog to choose
726 transaction_xfer_search_or_add_child(GTK_WINDOW(dialog
), new_txn
, new_txn
->kxferacc
);
732 //use old in case of dst_acc change
733 child
= transaction_xfer_child_strong_get(old_txn
);
734 //#1584342 was faultly old_txn
735 transaction_xfer_child_sync(new_txn
, child
);
740 //#1250061 : manage ability to break an internal xfer
741 if(old_txn
->paymode
== PAYMODE_INTXFER
)
745 DB( g_print(" - should break internal xfer\n") );
747 break_result
= ui_dialog_msg_confirm_alert(
750 _("Do you want to break the internal transfer ?\n\n"
751 "Proceeding will delete the target transaction."),
755 if(break_result
== GTK_RESPONSE_OK
)
757 //we must use old_txn to ensure get the child
758 //#1663789 but we must clean new as well
759 transaction_xfer_remove_child(old_txn
);
761 new_txn
->kxferacc
= 0;
763 else //force paymode to internal xfer
765 new_txn
->paymode
= PAYMODE_INTXFER
;
770 //1638035: manage account change
771 if( old_txn
->kacc
!= new_txn
->kacc
)
773 //todo: maybe we should restrict this also to same currency account
774 //=> no pb for normal, and intxfer is restricted by ui (in theory)
775 transaction_acc_move(new_txn
, old_txn
->kacc
, new_txn
->kacc
);
779 deftransaction_dispose(dialog
, NULL
);
780 gtk_widget_destroy (dialog
);
786 void deftransaction_set_transaction(GtkWidget
*widget
, Transaction
*ope
)
788 struct deftransaction_data
*data
;
790 DB( g_print("\n[ui-transaction] set transaction (from out)\n") );
792 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
796 DB( g_print(" - ope=%p data=%p\n", data
->ope
, data
) );
798 DB( g_print(" - call init\n") );
800 deftransaction_set(widget
, NULL
);
801 deftransaction_paymode(widget
, NULL
);
802 deftransaction_update(widget
, NULL
);
803 deftransaction_update_warnsign(widget
, NULL
);
808 static void deftransaction_setup(struct deftransaction_data
*data
)
811 DB( g_print("\n[ui-transaction] setup\n") );
813 ui_pay_comboboxentry_populate(GTK_COMBO_BOX(data
->PO_pay
), GLOBALS
->h_pay
);
814 ui_cat_comboboxentry_populate(GTK_COMBO_BOX(data
->PO_cat
), GLOBALS
->h_cat
);
815 ui_acc_comboboxentry_populate(GTK_COMBO_BOX(data
->PO_acc
), GLOBALS
->h_acc
, ACC_LST_INSERT_NORMAL
);
816 ui_acc_comboboxentry_populate(GTK_COMBO_BOX(data
->PO_accto
), GLOBALS
->h_acc
, ACC_LST_INSERT_NORMAL
);
818 if( data
->showtemplate
)
820 deftransaction_template_popover_populate (data
, GLOBALS
->arc_list
);
821 gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(data
->modelfilter
));
824 ui_tag_combobox_populate(GTK_COMBO_BOX_TEXT(data
->CY_tags
));
829 create_popover (GtkWidget
*parent
,
835 popover
= gtk_popover_new (parent
);
836 gtk_popover_set_position (GTK_POPOVER (popover
), pos
);
837 gtk_container_add (GTK_CONTAINER (popover
), child
);
838 gtk_container_set_border_width (GTK_CONTAINER (popover
), SPACING_SMALL
);
839 gtk_widget_show (child
);
841 /* gtk_widget_set_margin_start (popover, SPACING_MEDIUM);
842 gtk_widget_set_margin_end (popover, SPACING_MEDIUM);
843 gtk_widget_set_margin_top (popover, SPACING_MEDIUM);
844 gtk_widget_set_margin_bottom (popover, SPACING_MEDIUM);*/
850 static void deftransaction_template_popover_onRowActivated(GtkTreeView
*treeview
,
852 GtkTreeViewColumn
*col
,
855 struct deftransaction_data
*data
;
859 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(GTK_WIDGET(treeview
), GTK_TYPE_WINDOW
)), "inst_data");
860 model
= gtk_tree_view_get_model(treeview
);
862 if (gtk_tree_model_get_iter(model
, &iter
, path
))
867 gtk_tree_model_get(GTK_TREE_MODEL(model
), &iter
, LST_DSPTPL_DATAS
, &arc
, -1);
870 da_transaction_init_from_template(txn
, arc
);
872 DB( g_print(" calls\n") );
874 deftransaction_set(GTK_WIDGET(treeview
), NULL
);
875 deftransaction_paymode(GTK_WIDGET(treeview
), NULL
);
876 deftransaction_update(GTK_WIDGET(treeview
), NULL
);
878 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(data
->MB_template
), FALSE
);
884 static void deftransaction_template_popover_populate(struct deftransaction_data
*data
, GList
*srclist
)
890 //insert all glist item into treeview
892 gtk_list_store_clear(GTK_LIST_STORE(model
));
894 list
= g_list_first(srclist
);
897 Archive
*entry
= list
->data
;
899 gtk_list_store_append (GTK_LIST_STORE(model
), &iter
);
900 gtk_list_store_set (GTK_LIST_STORE(model
), &iter
,
901 LST_DSPTPL_DATAS
, entry
,
902 LST_DSPTPL_NAME
, entry
->memo
,
905 //DB( g_print(" populate_treeview: %d %08x\n", i, list->data) );
907 list
= g_list_next(list
);
913 deftransaction_template_popover_refilter (GtkWidget
*widget
, gpointer user_data
)
915 struct deftransaction_data
*data
= user_data
;
917 DB( g_print(" text changed\n") );
919 gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(data
->modelfilter
));
923 static gboolean
deftransaction_template_popover_func_visible (GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer user_data
)
925 struct deftransaction_data
*data
= user_data
;
928 gboolean visible
= TRUE
;
932 showsched
= gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(data
->CM_showsched
));
933 showallacc
= gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(data
->CM_showallacc
));
935 gchar
*needle
= g_ascii_strdown(gtk_entry_get_text(GTK_ENTRY(data
->ST_search
)), -1);
937 gtk_tree_model_get (model
, iter
,
938 LST_DSPTPL_DATAS
, &entry
,
939 LST_DSPTPL_NAME
, &str
, -1);
943 if( !showallacc
&& (data
->kacc
!= 0) && (entry
->kacc
!= data
->kacc
) )
947 if( (entry
->flags
& OF_AUTO
) && !showsched
)
953 gchar
*haystack
= g_ascii_strdown(str
, -1);
955 if (str
&& g_strrstr (haystack
, needle
) == NULL
)
960 DB( g_print("filter: '%s' '%s' %d\n", str
, needle
, visible
) );
973 static GtkWidget
*deftransaction_template_popover_create(struct deftransaction_data
*data
)
976 GtkCellRenderer
*renderer
;
977 GtkTreeViewColumn
*column
;
978 GtkWidget
*box
, *widget
, *scrollwin
, *treeview
;
980 box
= gtk_box_new(GTK_ORIENTATION_VERTICAL
, SPACING_SMALL
);
982 widget
= make_search();
983 data
->ST_search
= widget
;
984 gtk_box_pack_start (GTK_BOX(box
), widget
, FALSE
, FALSE
, 0);
987 scrollwin
= gtk_scrolled_window_new(NULL
,NULL
);
988 gtk_box_pack_start (GTK_BOX(box
), scrollwin
, TRUE
, TRUE
, 0);
989 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin
), GTK_SHADOW_ETCHED_IN
);
990 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin
), GTK_POLICY_AUTOMATIC
, GTK_POLICY_AUTOMATIC
);
992 store
= gtk_list_store_new(NUM_LST_DSPTPL
,
996 data
->model
= GTK_TREE_MODEL(store
);
998 data
->modelfilter
= GTK_TREE_MODEL_FILTER(gtk_tree_model_filter_new(GTK_TREE_MODEL(data
->model
), NULL
));
999 gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(data
->modelfilter
), deftransaction_template_popover_func_visible
, data
, NULL
);
1002 treeview
= gtk_tree_view_new_with_model(GTK_TREE_MODEL(data
->modelfilter
));
1003 data
->LV_arc
= treeview
;
1004 gtk_container_add(GTK_CONTAINER(scrollwin
), treeview
);
1006 gtk_widget_grab_focus(treeview
);
1008 /* column for bug numbers */
1009 renderer
= gtk_cell_renderer_text_new ();
1010 column
= gtk_tree_view_column_new_with_attributes (NULL
,
1015 //gtk_tree_view_column_set_resizable (column, TRUE);
1016 gtk_tree_view_append_column (GTK_TREE_VIEW(treeview
), column
);
1017 gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(treeview
), FALSE
);
1019 widget
= gtk_check_button_new_with_mnemonic(_("Show _scheduled"));
1020 data
->CM_showsched
= widget
;
1021 gtk_box_pack_start (GTK_BOX(box
), widget
, FALSE
, FALSE
, 0);
1023 widget
= gtk_check_button_new_with_mnemonic(_("Show _all accounts"));
1024 data
->CM_showallacc
= widget
;
1025 gtk_box_pack_start (GTK_BOX(box
), widget
, FALSE
, FALSE
, 0);
1027 gtk_widget_show_all (box
);
1029 //#1796564 hide show all template if no account
1030 gtk_widget_set_visible (data
->CM_showallacc
, data
->kacc
== 0 ? FALSE
: TRUE
);
1033 g_signal_connect (data
->CM_showsched
, "toggled", G_CALLBACK (deftransaction_template_popover_refilter
), data
);
1034 g_signal_connect (data
->CM_showallacc
, "toggled", G_CALLBACK (deftransaction_template_popover_refilter
), data
);
1035 g_signal_connect (data
->ST_search
, "search-changed", G_CALLBACK (deftransaction_template_popover_refilter
), data
);
1042 static GtkWidget
*deftransaction_create_template(struct deftransaction_data
*data
)
1044 GtkWidget
*box
, *menubutton
, *image
, *label
;
1046 menubutton
= gtk_menu_button_new ();
1047 data
->MB_template
= menubutton
;
1048 box
= gtk_box_new(GTK_ORIENTATION_HORIZONTAL
, SPACING_SMALL
);
1049 label
= gtk_label_new_with_mnemonic (_("Use a _template"));
1050 gtk_box_pack_start (GTK_BOX(box
), label
, FALSE
, FALSE
, 0);
1051 image
= gtk_image_new_from_icon_name ("pan-down-symbolic", GTK_ICON_SIZE_BUTTON
);
1052 gtk_box_pack_start (GTK_BOX(box
), image
, FALSE
, FALSE
, 0);
1053 gtk_container_add(GTK_CONTAINER(menubutton
), box
);
1055 gtk_menu_button_set_direction (GTK_MENU_BUTTON(menubutton
), GTK_ARROW_DOWN
);
1056 gtk_widget_set_halign (menubutton
, GTK_ALIGN_END
);
1057 gtk_widget_set_hexpand (menubutton
, TRUE
);
1058 gtk_widget_show_all(menubutton
);
1061 GtkWidget
*template = deftransaction_template_popover_create(data
);
1062 GtkWidget
*popover
= create_popover (menubutton
, template, GTK_POS_BOTTOM
);
1063 gtk_widget_set_size_request (popover
, 2*HB_MINWIDTH_LIST
, HB_MINHEIGHT_LIST
);
1064 //gtk_widget_set_vexpand (popover, TRUE);
1065 //gtk_widget_set_hexpand (popover, TRUE);
1067 /*gtk_widget_set_margin_start (popover, 10);
1068 gtk_widget_set_margin_end (popover, 10);
1069 gtk_widget_set_margin_bottom (popover, 10);*/
1071 gtk_menu_button_set_popover(GTK_MENU_BUTTON(menubutton
), popover
);
1073 g_signal_connect (GTK_TREE_VIEW(data
->LV_arc
), "row-activated", G_CALLBACK (deftransaction_template_popover_onRowActivated
), NULL
);
1081 deftransaction_getgeometry(GtkWidget
*widget
, GdkEventConfigure
*event
, gpointer user_data
)
1083 struct WinGeometry
*wg
;
1085 DB( g_print("\n[ui-transaction] get geometry\n") );
1088 wg
= &PREFS
->txn_wg
;
1089 gtk_window_get_size(GTK_WINDOW(widget
), &wg
->w
, NULL
);
1091 DB( g_print(" window: w=%d\n", wg
->w
) );
1097 void deftransaction_dispose(GtkWidget
*widget
, gpointer user_data
)
1099 struct deftransaction_data
*data
;
1101 DB( g_print("\n[ui-transaction] dispose\n") );
1103 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
1105 deftransaction_getgeometry(data
->window
, NULL
, data
);
1111 GtkWidget
*create_deftransaction_window (GtkWindow
*parent
, gint type
, gboolean postmode
, guint32 kacc
)
1113 struct deftransaction_data
*data
;
1114 struct WinGeometry
*wg
;
1115 GtkWidget
*dialog
, *content
, *mainvbox
;
1117 GtkWidget
*group_grid
, *hbox
, *label
, *widget
;
1120 DB( g_print("\n[ui-transaction] new\n") );
1122 data
= g_malloc0(sizeof(struct deftransaction_data
));
1125 dialog = gtk_dialog_new_with_buttons (_(CYA_OPERATION[data->type]),
1126 GTK_WINDOW (parent),
1131 dialog
= gtk_dialog_new();
1132 gtk_window_set_title (GTK_WINDOW(dialog
), _(CYA_OPERATION
[type
]));
1133 gtk_window_set_transient_for (GTK_WINDOW(dialog
), GTK_WINDOW(parent
));
1138 //store our window private data
1139 g_object_set_data(G_OBJECT(dialog
), "inst_data", (gpointer
)data
);
1140 DB( g_print(" - window=%p, inst_data=%p\n", dialog
, data
) );
1142 data
->window
= dialog
;
1146 // if you add/remove response_id also change into deftransaction_update_transfer
1147 if(type
== TRANSACTION_EDIT_MODIFY
)
1149 gtk_dialog_add_buttons (GTK_DIALOG(dialog
),
1150 _("_Cancel"), GTK_RESPONSE_REJECT
,
1151 _("_OK"), GTK_RESPONSE_ACCEPT
,
1158 gtk_dialog_add_buttons (GTK_DIALOG(dialog
),
1159 _("_Close"), GTK_RESPONSE_REJECT
,
1160 _("_Add & keep"), HB_RESPONSE_ADDKEEP
,
1161 _("_Add"), HB_RESPONSE_ADD
,
1166 gtk_dialog_add_buttons (GTK_DIALOG(dialog
),
1167 _("_Close"), GTK_RESPONSE_REJECT
,
1168 _("_Post"), HB_RESPONSE_ADD
,
1175 case TRANSACTION_EDIT_ADD
:
1176 gtk_window_set_icon_name(GTK_WINDOW (dialog
), ICONNAME_HB_OPE_ADD
);
1178 case TRANSACTION_EDIT_INHERIT
:
1179 gtk_window_set_icon_name(GTK_WINDOW (dialog
), ICONNAME_HB_OPE_HERIT
);
1181 case TRANSACTION_EDIT_MODIFY
:
1182 gtk_window_set_icon_name(GTK_WINDOW (dialog
), ICONNAME_HB_OPE_EDIT
);
1186 //gtk_window_set_decorated(GTK_WINDOW(dialog), TRUE);
1189 content
= gtk_dialog_get_content_area(GTK_DIALOG (dialog
));
1190 mainvbox
= gtk_box_new (GTK_ORIENTATION_VERTICAL
, SPACING_SMALL
);
1191 gtk_box_pack_start (GTK_BOX (content
), mainvbox
, TRUE
, TRUE
, 0);
1192 gtk_container_set_border_width (GTK_CONTAINER(mainvbox
), SPACING_MEDIUM
);
1195 group_grid
= gtk_grid_new ();
1196 gtk_grid_set_row_spacing (GTK_GRID (group_grid
), SPACING_SMALL
);
1197 gtk_grid_set_column_spacing (GTK_GRID (group_grid
), SPACING_MEDIUM
);
1198 gtk_box_pack_start (GTK_BOX (mainvbox
), group_grid
, FALSE
, FALSE
, 0);
1201 label
= make_label_widget(_("_Date:"));
1202 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1203 widget
= gtk_date_entry_new();
1204 data
->PO_date
= widget
;
1205 gtk_widget_set_halign(widget
, GTK_ALIGN_START
);
1206 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 1, 1);
1207 gtk_widget_set_tooltip_text(widget
, _("Date accepted here are:\nday,\nday/month or month/day,\nand complete date into your locale"));
1209 data
->showtemplate
= FALSE
;
1210 if( data
->type
!= TRANSACTION_EDIT_MODIFY
&& da_archive_length() > 0 && !postmode
)
1212 data
->showtemplate
= TRUE
;
1213 widget
= deftransaction_create_template(data
);
1214 gtk_widget_set_halign (widget
, GTK_ALIGN_END
);
1215 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 2, row
, 1, 1);
1219 label
= make_label_widget(_("_Amount:"));
1220 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1221 hbox
= gtk_box_new (GTK_ORIENTATION_HORIZONTAL
, 0);
1222 gtk_widget_set_hexpand(hbox
, TRUE
);
1223 gtk_grid_attach (GTK_GRID (group_grid
), hbox
, 1, row
, 1, 1);
1225 widget
= make_amount(label
);
1226 data
->ST_amount
= widget
;
1227 gtk_entry_set_icon_from_icon_name(GTK_ENTRY(widget
), GTK_ENTRY_ICON_PRIMARY
, ICONNAME_HB_TOGGLE_SIGN
);
1228 gtk_entry_set_icon_tooltip_text(GTK_ENTRY(widget
), GTK_ENTRY_ICON_PRIMARY
, _("Toggle amount sign"));
1229 gtk_box_pack_start (GTK_BOX (hbox
), widget
, TRUE
, TRUE
, 0);
1231 widget
= make_image_button(ICONNAME_HB_BUTTON_SPLIT
, _("Transaction splits"));
1232 data
->BT_split
= widget
;
1233 gtk_box_pack_start (GTK_BOX (hbox
), widget
, FALSE
, FALSE
, 0);
1237 label
= make_label_widget(_("A_ccount:"));
1238 data
->LB_accfrom
= label
;
1239 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1240 widget
= ui_acc_comboboxentry_new(label
);
1241 data
->PO_acc
= widget
;
1242 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 2, 1);
1245 label
= make_label_widget(_("To acc_ount:"));
1246 data
->LB_accto
= label
;
1247 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1248 widget
= ui_acc_comboboxentry_new(label
);
1249 data
->PO_accto
= widget
;
1250 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 2, 1);
1254 label
= make_label_widget(_("Pa_yment:"));
1255 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1256 widget
= make_paymode(label
);
1257 data
->NU_mode
= widget
;
1258 gtk_widget_set_halign(widget
, GTK_ALIGN_START
);
1259 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 1, 1);
1261 gtk_widget_set_margin_top(label
, SPACING_SMALL
);
1262 gtk_widget_set_margin_top(widget
, SPACING_SMALL
);
1265 widget
= gtk_check_button_new_with_mnemonic(_("Of notebook _2"));
1266 data
->CM_cheque
= widget
;
1267 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 2, row
, 1, 1);
1270 label
= make_label_widget(_("_Info:"));
1271 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1272 widget
= make_string(label
);
1273 data
->ST_info
= widget
;
1274 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 1, 1);
1276 gtk_widget_set_margin_bottom(label
, SPACING_SMALL
);
1277 gtk_widget_set_margin_bottom(widget
, SPACING_SMALL
);
1281 label
= make_label_widget(_("_Payee:"));
1282 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1283 widget
= ui_pay_comboboxentry_new(label
);
1284 data
->PO_pay
= widget
;
1285 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 2, 1);
1286 gtk_widget_set_tooltip_text(widget
, _("Autocompletion and direct seizure\nis available"));
1289 label
= make_label_widget(_("_Category:"));
1290 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1291 widget
= ui_cat_comboboxentry_new(label
);
1292 data
->PO_cat
= widget
;
1293 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 2, 1);
1294 gtk_widget_set_tooltip_text(widget
, _("Autocompletion and direct seizure\nis available"));
1296 gtk_widget_set_margin_bottom(label
, SPACING_SMALL
);
1297 gtk_widget_set_margin_bottom(widget
, SPACING_SMALL
);
1301 label
= make_label_widget(_("_Status:"));
1302 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1303 widget
= hbtk_radio_new (CYA_TXN_STATUS
, TRUE
);
1304 data
->RA_status
= widget
;
1305 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 2, 1);
1308 label
= make_label_widget(_("M_emo:"));
1309 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1310 widget
= make_memo_entry(label
);
1311 data
->ST_memo
= widget
;
1312 gtk_widget_set_hexpand(widget
, TRUE
);
1313 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 2, 1);
1316 label
= make_label_widget(_("Ta_gs:"));
1317 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, row
, 1, 1);
1318 hbox
= gtk_box_new (GTK_ORIENTATION_HORIZONTAL
, 0);
1319 gtk_widget_set_hexpand(hbox
, TRUE
);
1320 gtk_grid_attach (GTK_GRID (group_grid
), hbox
, 1, row
, 2, 1);
1322 widget
= make_string(label
);
1323 data
->ST_tags
= widget
;
1324 gtk_box_pack_start (GTK_BOX (hbox
), widget
, TRUE
, TRUE
, 0);
1326 widget
= ui_tag_combobox_new(NULL
);
1327 data
->CY_tags
= widget
;
1328 gtk_box_pack_start (GTK_BOX (hbox
), widget
, FALSE
, FALSE
, 0);
1330 gtk_widget_show_all(mainvbox
);
1332 bar
= gtk_info_bar_new ();
1333 data
->IB_warnsign
= bar
;
1334 gtk_info_bar_set_message_type (GTK_INFO_BAR (bar
), GTK_MESSAGE_WARNING
);
1335 label
= gtk_label_new (_("Warning: amount and category sign don't match"));
1336 gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (bar
))), label
, TRUE
, TRUE
, 0);
1337 gtk_box_pack_start (GTK_BOX (mainvbox
), bar
, TRUE
, TRUE
, 0);
1340 //connect all our signals
1341 //g_signal_connect (dialog, "configure-event", G_CALLBACK (deftransaction_getgeometry), (gpointer)data);
1344 g_signal_connect (data
->PO_acc
, "changed", G_CALLBACK (deftransaction_update_accto
), NULL
);
1345 g_signal_connect (data
->PO_accto
, "changed", G_CALLBACK (deftransaction_update_transfer
), NULL
);
1347 g_signal_connect (G_OBJECT (data
->ST_amount
), "focus-out-event", G_CALLBACK (deftransaction_amount_focusout
), NULL
);
1348 g_signal_connect (G_OBJECT (data
->ST_amount
), "icon-release", G_CALLBACK (deftransaction_toggleamount
), NULL
);
1349 g_signal_connect (G_OBJECT (data
->BT_split
), "clicked", G_CALLBACK (deftransaction_button_split_cb
), NULL
);
1351 g_signal_connect (data
->NU_mode
, "changed", G_CALLBACK (deftransaction_paymode
), NULL
);
1352 g_signal_connect (data
->CM_cheque
, "toggled", G_CALLBACK (deftransaction_paymode
), NULL
);
1354 g_signal_connect (data
->PO_pay
, "changed", G_CALLBACK (deftransaction_update_payee
), NULL
);
1355 g_signal_connect (data
->PO_cat
, "changed", G_CALLBACK (deftransaction_update_warnsign
), NULL
);
1357 g_signal_connect (data
->CY_tags
, "changed", G_CALLBACK (deftransaction_update_tags
), NULL
);
1359 //setup, init and show window
1360 deftransaction_setup(data
);
1362 wg
= &PREFS
->txn_wg
;
1363 gtk_window_set_default_size(GTK_WINDOW(dialog
), wg
->w
, -1);
1365 //gtk_widget_show_all (dialog);
1366 //gtk_widget_hide(data->IB_warnsign);