X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fhomebank;a=blobdiff_plain;f=src%2Fdsp-account.c;fp=src%2Fdsp_account.c;h=336a5261c2147d2bcc46107362da6067b7c85b5a;hp=fd7e98933b02e28a658d092181639a94ffb08109;hb=a6c6b0df5492c2160ed97e3a376bdb2fe7c5ebc4;hpb=cd13d9691c46c2b2d6d459e9e6a76bed1c21b7a6 diff --git a/src/dsp_account.c b/src/dsp-account.c similarity index 75% rename from src/dsp_account.c rename to src/dsp-account.c index fd7e989..336a526 100644 --- a/src/dsp_account.c +++ b/src/dsp-account.c @@ -1,5 +1,5 @@ /* HomeBank -- Free, easy, personal accounting for everyone. - * Copyright (C) 1995-2018 Maxime DOYEN + * Copyright (C) 1995-2019 Maxime DOYEN * * This file is part of HomeBank. * @@ -20,10 +20,12 @@ #include "homebank.h" -#include "dsp_account.h" -#include "dsp_mainwindow.h" +#include "dsp-account.h" +#include "dsp-mainwindow.h" + +#include "list-operation.h" +#include "hub-account.h" -#include "list_operation.h" #include "ui-widgets.h" #include "ui-filter.h" #include "ui-transaction.h" @@ -47,13 +49,12 @@ extern struct Preferences *PREFS; //debug #define UI 1 -//extern gchar *CYA_FLT_SELECT[]; extern gchar *CYA_FLT_TYPE[]; extern gchar *CYA_FLT_STATUS[]; -static void register_panel_collect_filtered_txn(GtkWidget *view); +static void register_panel_collect_filtered_txn(GtkWidget *view, gboolean emptysearch); static void register_panel_listview_populate(GtkWidget *view); static void register_panel_action(GtkWidget *widget, gpointer user_data); static void register_panel_update(GtkWidget *widget, gpointer user_data); @@ -162,8 +163,8 @@ static void register_panel_action_exportpdf(GtkAction *action, gpointer user_dat struct register_panel_data *data = user_data; gchar *name, *filepath; - - + if(data->showall == FALSE) + { name = g_strdup_printf("%s.pdf", data->acc->name); filepath = g_build_filename(PREFS->path_export, name, NULL); g_free(name); @@ -178,7 +179,61 @@ gchar *name, *filepath; g_free(filepath); + } +} + + +static void register_panel_action_duplicate_mark(GtkAction *action, gpointer user_data) +{ +struct register_panel_data *data = user_data; + + DB( g_print("check duplicate\n\n") ); + + // open dialog to select date tolerance in days + // with info message + // with check/fix button and progress bar + // parse listview txn, clear/mark duplicate + // apply filter + + if(data->showall == FALSE) + { + gint daygap; + + daygap = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->NB_txn_daygap)); + data->similar = transaction_similar_mark (data->acc, daygap); + if( data->similar > 0 ) + { + gchar *text = g_strdup_printf(_("There is %d group of similar transactions"), data->similar); + gtk_label_set_text(GTK_LABEL(data->LB_duplicate), text); + g_free(text); + } + else + gtk_label_set_text(GTK_LABEL(data->LB_duplicate), _("No similar transaction were found !")); + + gtk_widget_show(data->IB_duplicate); + //#GTK+710888: hack waiting a fix + gtk_widget_queue_resize (data->IB_duplicate); + gtk_widget_queue_draw (data->LV_ope); + } + + +} + + +static void register_panel_action_duplicate_unmark(GtkAction *action, gpointer user_data) +{ +struct register_panel_data *data = user_data; + + DB( g_print("uncheck duplicate\n\n") ); + + if(data->showall == FALSE) + { + data->similar = 0; + gtk_widget_hide(data->IB_duplicate); + transaction_similar_unmark(data->acc); + gtk_widget_queue_draw (data->LV_ope); + } } @@ -259,15 +314,8 @@ gint count; { Transaction *stxn = tmplist->data; - // (open dialog to select date tolerance in days) - // ( with info message) - // ( with check/fix button and progress bar) - - //adapt this window - //-display the src txn - //-enable to display 1 of xxx if more than 1 - - transaction_xfer_search_or_add_child(GTK_WINDOW(data->window), stxn, TRUE); + //future (open dialog to select date tolerance in days) + transaction_xfer_search_or_add_child(GTK_WINDOW(data->window), stxn, 0); tmplist = g_list_next(tmplist); } @@ -284,6 +332,10 @@ static void register_panel_action_exportqif(GtkAction *action, gpointer user_dat struct register_panel_data *data = user_data; gchar *filename; + // noaction if show all account + if(data->showall) + return; + DB( g_print("(qif) test qif export\n\n") ); if( ui_file_chooser_qif(GTK_WINDOW(data->window), &filename) == TRUE ) @@ -300,6 +352,10 @@ struct register_panel_data *data = user_data; gchar *msg; gint result; + // noaction if show all account + if(data->showall) + return; + DB( g_print("action convert to euro\n") ); msg = g_strdup_printf(_("Every transaction amount will be divided by %.6f."), PREFS->euro_value); @@ -327,9 +383,13 @@ struct register_panel_data *data = user_data; gint count; gboolean usermode = TRUE; + // noaction if show all account + if(data->showall) + return; + DB( g_print("action assign\n") ); - count = transaction_auto_assign(g_queue_peek_head_link(data->acc->txn_queue), data->accnum); + count = transaction_auto_assign(g_queue_peek_head_link(data->acc->txn_queue), data->acc->key); gtk_tree_view_columns_autosize (GTK_TREE_VIEW(data->LV_ope)); GLOBALS->changes_count += count; @@ -425,11 +485,20 @@ GtkWidget *dialog; if( result == GTK_RESPONSE_ACCEPT ) { + gboolean do_sort; gint changes; - - changes = ui_multipleedit_dialog_apply (dialog, NULL); + + //#1792808: sort if date changed + changes = ui_multipleedit_dialog_apply (dialog, &do_sort); + data->do_sort = do_sort; if( changes > 0 ) + { + //#1782749 update account status + if( data->acc != NULL ) + data->acc->flags |= AF_CHANGED; + ui_mainwindow_update(GLOBALS->mainwindow, GINT_TO_POINTER(UF_TITLE+UF_SENSITIVE)); + } } gtk_widget_destroy (dialog); @@ -444,27 +513,25 @@ GtkWidget *dialog; static void register_panel_make_archive(GtkWidget *widget, gpointer user_data) { struct register_panel_data *data; +GtkTreeModel *model; +GList *selection, *list; +gint result, count; DB( g_print("\n[account] make archive\n") ); data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data"); -GtkWidget *p_dialog = NULL; -GtkTreeModel *model; -GList *selection, *list; -gint result, count; count = gtk_tree_selection_count_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_ope))); if( count > 0 ) { - p_dialog = gtk_message_dialog_new - ( + + result = ui_dialog_msg_confirm_alert( GTK_WINDOW(data->window), - GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_WARNING, - GTK_BUTTONS_YES_NO, - _("Do you want to create a template with\neach of the selected transaction ?") + NULL, + _("Do you want to create a template with\neach of the selected transaction ?"), + _("_Create") ); /* @@ -474,13 +541,8 @@ gint result, count; ); */ - result = gtk_dialog_run( GTK_DIALOG( p_dialog ) ); - gtk_widget_destroy( p_dialog ); - - - if(result == GTK_RESPONSE_YES) + if(result == GTK_RESPONSE_OK) { - model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_ope)); selection = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_ope)), &model); @@ -500,7 +562,8 @@ gint result, count; da_archive_init_from_transaction(item, ope); - GLOBALS->arc_list = g_list_append(GLOBALS->arc_list, item); + //GLOBALS->arc_list = g_list_append(GLOBALS->arc_list, item); + da_archive_append_new(item); GLOBALS->changes_count++; list = g_list_next(list); @@ -513,40 +576,64 @@ gint result, count; } +static void register_panel_cb_bar_duplicate_response(GtkWidget *info_bar, gint response_id, gpointer user_data) +{ +struct register_panel_data *data; + + DB( g_print("\n[account] bar_duplicate_response\n") ); + + data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(info_bar, GTK_TYPE_WINDOW)), "inst_data"); + + switch( response_id ) + { + case HB_RESPONSE_REFRESH: + register_panel_action_duplicate_mark(NULL, data); + break; + case GTK_RESPONSE_CLOSE: + register_panel_action_duplicate_unmark(NULL, data); + gtk_widget_hide (GTK_WIDGET (info_bar)); + break; + } +} + + static void register_panel_cb_filter_daterange(GtkWidget *widget, gpointer user_data) { struct register_panel_data *data; +gboolean future; gint range; DB( g_print("\n[account] filter_daterange\n") ); data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data"); - range = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_range)); + range = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_range)); + future = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_future)); + + data->filter->nbdaysfuture = 0; if(range != FLT_RANGE_OTHER) { - filter_preset_daterange_set(data->filter, range, data->accnum); + filter_preset_daterange_set(data->filter, range, (data->showall == FALSE) ? data->acc->key : 0); // add eventual x days into future display - if( PREFS->date_future_nbdays > 0 ) + if( future && (PREFS->date_future_nbdays > 0) ) filter_preset_daterange_add_futuregap(data->filter, PREFS->date_future_nbdays); - register_panel_collect_filtered_txn(data->LV_ope); + register_panel_collect_filtered_txn(data->LV_ope, FALSE); register_panel_listview_populate(data->LV_ope); } else { - if(ui_flt_manage_dialog_new(data->window, data->filter, FALSE) != GTK_RESPONSE_REJECT) + if(ui_flt_manage_dialog_new(GTK_WINDOW(data->window), data->filter, data->showall, TRUE) != GTK_RESPONSE_REJECT) { - register_panel_collect_filtered_txn(data->LV_ope); + register_panel_collect_filtered_txn(data->LV_ope, FALSE); register_panel_listview_populate(data->LV_ope); register_panel_update(data->LV_ope, GINT_TO_POINTER(UF_SENSITIVE+UF_BALANCE)); } } - - } + static void register_panel_cb_filter_type(GtkWidget *widget, gpointer user_data) { struct register_panel_data *data; @@ -559,7 +646,7 @@ gint type; filter_preset_type_set(data->filter, type); - register_panel_collect_filtered_txn(data->LV_ope); + register_panel_collect_filtered_txn(data->LV_ope, FALSE); register_panel_listview_populate(data->LV_ope); } @@ -576,7 +663,7 @@ gint status; filter_preset_status_set(data->filter, status); - register_panel_collect_filtered_txn(data->LV_ope); + register_panel_collect_filtered_txn(data->LV_ope, FALSE); register_panel_listview_populate(data->LV_ope); } @@ -588,8 +675,10 @@ struct register_panel_data *data; DB( g_print("\n[account] filter_reset\n") ); data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data"); - filter_default_all_set(data->filter); - filter_preset_daterange_set (data->filter, PREFS->date_range_txn, data->accnum); + filter_reset(data->filter); + + filter_preset_daterange_set (data->filter, PREFS->date_range_txn, (data->showall == FALSE) ? data->acc->key : 0); + if(PREFS->hidereconciled) filter_preset_status_set (data->filter, 1); @@ -597,7 +686,7 @@ struct register_panel_data *data; if( PREFS->date_future_nbdays > 0 ) filter_preset_daterange_add_futuregap(data->filter, PREFS->date_future_nbdays); - register_panel_collect_filtered_txn(data->LV_ope); + register_panel_collect_filtered_txn(data->LV_ope, TRUE); register_panel_listview_populate(data->LV_ope); g_signal_handler_block(data->CY_range, data->handler_id[HID_RANGE]); @@ -626,6 +715,10 @@ gushort lpos = 1; data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(view, GTK_TYPE_WINDOW)), "inst_data"); + // noaction if show all account + if(data->showall) + return; + DB( g_print("\n[account] balance refresh\n") ); balance = data->acc->initial; @@ -677,11 +770,11 @@ gushort lpos = 1; } -static void register_panel_collect_filtered_txn(GtkWidget *view) +static void register_panel_collect_filtered_txn(GtkWidget *view, gboolean emptysearch) { struct register_panel_data *data; -guint i; -GList *list; +GList *lst_acc, *lnk_acc; +GList *lnk_txn; DB( g_print("\n[register_panel] collect_filtered_txn\n") ); @@ -690,42 +783,48 @@ GList *list; if(data->gpatxn != NULL) g_ptr_array_free (data->gpatxn, TRUE); -#if MYDEBUG == 1 - guint nbtxn = g_queue_get_length (data->acc->txn_queue); - g_print(" - nb txn %d\n", nbtxn); -#endif - + //todo: why this ? data->gpatxn = g_ptr_array_sized_new(64); - //data->hidden = 0; - - list = g_queue_peek_head_link(data->acc->txn_queue); i=0; - while (list != NULL) + lst_acc = g_hash_table_get_values(GLOBALS->h_acc); + lnk_acc = g_list_first(lst_acc); + while (lnk_acc != NULL) { - Transaction *ope = list->data; + Account *acc = lnk_acc->data; - if(filter_test(data->filter, ope) == 1) - { - g_ptr_array_add(data->gpatxn, (gpointer)ope); - } - /*else - { - data->hidden++; - }*/ + // skip closed in showall mode + if( data->showall == TRUE && (acc->flags & AF_CLOSED) ) + goto next_acc; -#if MYDEBUG == 1 - - if( !(i % 1000) ) { g_print(" - progress %d/%d\n", i, nbtxn); } + // skip other than current in normal mode + if( (data->showall == FALSE) && (data->acc != NULL) && (acc->key != data->acc->key) ) + goto next_acc; -#endif - i++; - list = g_list_next(list); - } + lnk_txn = g_queue_peek_head_link(acc->txn_queue); + while (lnk_txn != NULL) + { + Transaction *ope = lnk_txn->data; - g_signal_handler_block(data->ST_search, data->handler_id[HID_SEARCH]); - gtk_entry_set_text (GTK_ENTRY(data->ST_search), ""); - g_signal_handler_unblock(data->ST_search, data->handler_id[HID_SEARCH]); + if(filter_txn_match(data->filter, ope) == 1) + { + //add to the list + g_ptr_array_add(data->gpatxn, (gpointer)ope); + } + lnk_txn = g_list_next(lnk_txn); + } + next_acc: + lnk_acc = g_list_next(lnk_acc); + } + g_list_free(lst_acc); + + //#1789698 not always empty + if( emptysearch == TRUE ) + { + g_signal_handler_block(data->ST_search, data->handler_id[HID_SEARCH]); + gtk_entry_set_text (GTK_ENTRY(data->ST_search), ""); + g_signal_handler_unblock(data->ST_search, data->handler_id[HID_SEARCH]); + } } @@ -788,7 +887,11 @@ guint i, qs_flag; LST_DSPOPE_DATAS, txn, -1); - data->totalsum += txn->amount; + if( data->showall == FALSE ) + data->totalsum += txn->amount; + else + data->totalsum += hb_amount_base (txn->amount, txn->kcur); + data->total++; } } @@ -805,6 +908,7 @@ guint i, qs_flag; daterange = filter_daterange_text_get(data->filter); gtk_widget_set_tooltip_markup(GTK_WIDGET(data->CY_range), daterange); + g_free(daterange); } @@ -892,7 +996,7 @@ gboolean valid; LST_DSPOPE_DATAS, &tmp, -1); - if( txn == tmp) + if( txn == tmp ) { gtk_list_store_remove(GTK_LIST_STORE(model), &iter); break; @@ -955,7 +1059,8 @@ Transaction *txn; } - + transaction_changed(txn); + account_balances_add(txn); /* #492755 let the child transfer unchanged */ @@ -986,6 +1091,17 @@ GList *list; } +static void register_panel_add_single_transaction(GtkWindow *window, Transaction *txn) +{ +struct register_panel_data *data; + + DB( g_print("\n[account] add single txn\n") ); + + data = g_object_get_data(G_OBJECT(window), "inst_data"); + + txn_list_add_by_value(GTK_TREE_VIEW(data->LV_ope), txn); +} + static void register_panel_action(GtkWidget *widget, gpointer user_data) { @@ -1019,7 +1135,9 @@ gboolean result; DB( g_print("(transaction) add multiple\n") ); src_txn = da_transaction_malloc(); src_txn->date = GLOBALS->today; - src_txn->kacc = data->accnum; + if( data->acc != NULL ) + src_txn->kacc = data->acc->key; + da_transaction_set_default_template(src_txn); type = TRANSACTION_EDIT_ADD; } else @@ -1031,12 +1149,12 @@ gboolean result; type = TRANSACTION_EDIT_INHERIT; } - dialog = create_deftransaction_window(GTK_WINDOW(data->window), type, FALSE); - result = GTK_RESPONSE_ADD; - while(result == GTK_RESPONSE_ADD || result == GTK_RESPONSE_ADDKEEP) + dialog = create_deftransaction_window(GTK_WINDOW(data->window), type, FALSE, (data->acc != NULL) ? data->acc->key : 0 ); + result = HB_RESPONSE_ADD; + while(result == HB_RESPONSE_ADD || result == HB_RESPONSE_ADDKEEP) { /* clone source transaction */ - if( result == GTK_RESPONSE_ADD ) + if( result == HB_RESPONSE_ADD ) { data->cur_ope = da_transaction_clone (src_txn); @@ -1047,13 +1165,13 @@ gboolean result; deftransaction_set_transaction(dialog, data->cur_ope); result = gtk_dialog_run (GTK_DIALOG (dialog)); - if(result == GTK_RESPONSE_ADD || result == GTK_RESPONSE_ADDKEEP || result == GTK_RESPONSE_ACCEPT) + if(result == HB_RESPONSE_ADD || result == HB_RESPONSE_ADDKEEP || result == GTK_RESPONSE_ACCEPT) { Transaction *add_txn; deftransaction_get(dialog, NULL); - add_txn = transaction_add(data->cur_ope); - if((data->cur_ope->kacc == data->accnum)) + add_txn = transaction_add(GTK_WINDOW(data->window), data->cur_ope); + if((data->showall == TRUE) || ( (data->acc != NULL) && (data->cur_ope->kacc == data->acc->key) ) ) { txn_list_add_by_value(GTK_TREE_VIEW(data->LV_ope), add_txn); //#1716181 also add to the ptr_array (quickfilter) @@ -1067,7 +1185,7 @@ gboolean result; src_txn->date = data->cur_ope->date; } - if( result == GTK_RESPONSE_ADD ) + if( result == HB_RESPONSE_ADD ) { da_transaction_free (data->cur_ope); } @@ -1085,6 +1203,8 @@ gboolean result; { Transaction *active_txn; + DB( g_print(" - edit\n") ); + active_txn = list_txn_get_active_transaction(GTK_TREE_VIEW(data->LV_ope)); if(active_txn) @@ -1104,17 +1224,32 @@ gboolean result; if(old_txn->date != new_txn->date) data->do_sort = TRUE; - // different account : delete from the display - if( new_txn->kacc != data->accnum ) + // manage account change + //maybe this should move to deftransaction_external_edit + if( data->acc != NULL && (new_txn->kacc != data->acc->key) ) { + Account *nacc; + delete_active_transaction(GTK_TREE_VIEW(data->LV_ope)); + //#1667501 update target account window is open + nacc = da_acc_get(new_txn->kacc); + if( nacc->window != NULL ) + { + DB( g_print("- account changed and window is open\n") ); + if( GTK_IS_WINDOW(nacc->window) ) + { + register_panel_add_single_transaction(nacc->window, new_txn); + register_panel_update(GTK_WIDGET(nacc->window), GINT_TO_POINTER(UF_BALANCE)); + } + } } //da_transaction_copy(new_txn, old_txn); register_panel_update(widget, GINT_TO_POINTER(UF_BALANCE)); - data->acc->flags |= AF_CHANGED; + transaction_changed(new_txn); + GLOBALS->changes_count++; } @@ -1125,27 +1260,20 @@ gboolean result; case ACTION_ACCOUNT_DELETE: { - GtkWidget *p_dialog = NULL; GtkTreeModel *model; GList *selection, *list; gint result; DB( g_print(" - delete\n") ); - //todo: replace with a call to ui_dialog_msg_question ? - p_dialog = gtk_message_dialog_new - ( - GTK_WINDOW(data->window), - GTK_DIALOG_MODAL, - GTK_MESSAGE_WARNING, - GTK_BUTTONS_YES_NO, - _("Do you want to delete\neach of the selected transaction ?") - ); - - result = gtk_dialog_run( GTK_DIALOG( p_dialog ) ); - gtk_widget_destroy( p_dialog ); + result = ui_dialog_msg_confirm_alert( + GTK_WINDOW(data->window), + NULL, + _("Do you want to delete\neach of the selected transaction ?"), + _("_Delete") + ); - if(result == GTK_RESPONSE_YES) + if(result == GTK_RESPONSE_OK) { model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_ope)); selection = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_ope)), &model); @@ -1166,7 +1294,7 @@ gboolean result; // 1) remove visible current and potential xfer gtk_list_store_remove(GTK_LIST_STORE(model), &iter); - if(entry->paymode == PAYMODE_INTXFER) + if(data->showall && entry->paymode == PAYMODE_INTXFER) { Transaction *child = transaction_xfer_child_strong_get(entry); if( child ) @@ -1226,7 +1354,6 @@ gboolean result; register_panel_update(widget, GINT_TO_POINTER(UF_BALANCE)); - data->acc->flags |= AF_CHANGED; GLOBALS->changes_count++; } @@ -1248,7 +1375,6 @@ gboolean result; register_panel_update(widget, GINT_TO_POINTER(UF_BALANCE)); - data->acc->flags |= AF_CHANGED; GLOBALS->changes_count++; } break; @@ -1288,7 +1414,6 @@ gboolean result; register_panel_update(widget, GINT_TO_POINTER(UF_BALANCE)); - data->acc->flags |= AF_CHANGED; GLOBALS->changes_count++; } @@ -1299,9 +1424,9 @@ gboolean result; case ACTION_ACCOUNT_FILTER: { - if(ui_flt_manage_dialog_new(data->window, data->filter, FALSE) != GTK_RESPONSE_REJECT) + if(ui_flt_manage_dialog_new(GTK_WINDOW(data->window), data->filter, data->showall, TRUE) != GTK_RESPONSE_REJECT) { - register_panel_collect_filtered_txn(data->LV_ope); + register_panel_collect_filtered_txn(data->LV_ope, TRUE); register_panel_listview_populate(data->LV_ope); register_panel_update(data->LV_ope, GINT_TO_POINTER(UF_SENSITIVE+UF_BALANCE)); @@ -1379,68 +1504,55 @@ gint count = 0; count = gtk_tree_selection_count_selected_rows(selection); DB( g_print(" - count = %d\n", count) ); - - /* - if (active = gtk_tree_selection_get_selected(selection, &model, &iter)) - { - gint *indices; - - path = gtk_tree_model_get_path(model, &iter); - indices = gtk_tree_path_get_indices(path); - - data->accnum = indices[0]; - - DB( g_print(" active is %d, sel=%d\n", indices[0], active) ); - } - */ + //showall part + sensitive = !data->showall; + gtk_action_set_visible(gtk_ui_manager_get_action(data->ui, "/MenuBar/AccountMenu/ExportPDF"), sensitive); + gtk_action_set_visible(gtk_ui_manager_get_action(data->ui, "/MenuBar/AccountMenu/ExportQIF"), sensitive); + gtk_action_set_visible(gtk_ui_manager_get_action(data->ui, "/MenuBar/AccountMenu/ExportCSV"), sensitive); + gtk_action_set_visible(gtk_ui_manager_get_action(data->ui, "/MenuBar/ToolsMenu/ChkIntXfer"), sensitive); + gtk_action_set_visible(gtk_ui_manager_get_action(data->ui, "/MenuBar/ToolsMenu/DuplicateMark"), sensitive); + //gtk_action_set_visible(gtk_ui_manager_get_action(data->ui, "/MenuBar/ToolsMenu/DuplicateClear"), sensitive); //5.3.1 if closed account : disable any change - if( data->acc->flags & AF_CLOSED ) - { - gtk_widget_set_sensitive (data->TB_bar, FALSE); - //gtk_widget_set_sensitive (data->TB_tools, FALSE); - gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/ToolBar/Assign"), FALSE); - - gtk_widget_set_sensitive (gtk_ui_manager_get_widget(data->ui, "/MenuBar/TxnMenu"), FALSE); - gtk_widget_set_sensitive (gtk_ui_manager_get_widget(data->ui, "/MenuBar/ToolsMenu"), FALSE); + sensitive = TRUE; + if( (data->showall == FALSE) && (data->acc->flags & AF_CLOSED) ) + sensitive = FALSE; - } - else - { - gtk_widget_set_sensitive (data->TB_bar, TRUE); - //gtk_widget_set_sensitive (data->TB_tools, TRUE); - gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/ToolBar/Assign"), TRUE); - - gtk_widget_set_sensitive (gtk_ui_manager_get_widget(data->ui, "/MenuBar/TxnMenu"), TRUE); - gtk_widget_set_sensitive (gtk_ui_manager_get_widget(data->ui, "/MenuBar/ToolsMenu"), TRUE); - - - // multiple: disable inherit, edit - sensitive = (count != 1 ) ? FALSE : TRUE; - gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/MenuBar/TxnMenu/Inherit"), sensitive); - gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/MenuBar/TxnMenu/Edit"), sensitive); - gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/Inherit"), sensitive); - gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/Edit"), sensitive); - - // single: disable multiedit - sensitive = (count <= 1 ) ? FALSE : TRUE; - gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/MenuBar/TxnMenu/MultiEdit"), sensitive); - gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/MultiEdit"), sensitive); - - // no selection: disable reconcile, delete - sensitive = (count > 0 ) ? TRUE : FALSE; - gtk_widget_set_sensitive (gtk_ui_manager_get_widget(data->ui, "/MenuBar/TxnMenu/TxnStatusMenu"), sensitive); - gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/MenuBar/TxnMenu/Delete"), sensitive); - gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/MenuBar/TxnMenu/Template"), sensitive); - gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/Delete"), sensitive); - gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/Cleared"), sensitive); - gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/Reconciled"), sensitive); - gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/Template"), sensitive); - - // euro convert - sensitive = PREFS->euro_active; - gtk_action_set_visible(gtk_ui_manager_get_action(data->ui, "/MenuBar/ToolsMenu/ConvToEuro"), sensitive); - } + gtk_widget_set_sensitive (data->TB_bar, sensitive); + //gtk_widget_set_sensitive (data->TB_tools, sensitive); + gtk_action_set_visible(gtk_ui_manager_get_action(data->ui, "/ToolBar/Assign"), data->showall ? FALSE : sensitive); + + gtk_widget_set_sensitive(gtk_ui_manager_get_widget(data->ui, "/MenuBar/TxnMenu"), sensitive); + gtk_widget_set_sensitive(gtk_ui_manager_get_widget(data->ui, "/MenuBar/ToolsMenu"), sensitive); + + // multiple: disable inherit, edit + sensitive = (count != 1 ) ? FALSE : TRUE; + gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/MenuBar/TxnMenu/Inherit"), sensitive); + gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/MenuBar/TxnMenu/Edit"), sensitive); + gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/Inherit"), sensitive); + gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/Edit"), sensitive); + + // single: disable multiedit + sensitive = (count <= 1 ) ? FALSE : TRUE; + gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/MenuBar/TxnMenu/MultiEdit"), sensitive); + gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/MultiEdit"), sensitive); + + // no selection: disable reconcile, delete + sensitive = (count > 0 ) ? TRUE : FALSE; + gtk_widget_set_sensitive(gtk_ui_manager_get_widget(data->ui, "/MenuBar/TxnMenu/TxnStatusMenu"), sensitive); + gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/MenuBar/TxnMenu/Delete"), sensitive); + gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/MenuBar/TxnMenu/Template"), sensitive); + gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/Delete"), sensitive); + gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/Cleared"), sensitive); + gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/Reconciled"), sensitive); + gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/Template"), sensitive); + + // euro convert + sensitive = (data->showall == TRUE) ? FALSE : PREFS->euro_active; + if( (data->acc != NULL) && currency_is_euro(data->acc->kcur) ) + sensitive = FALSE; + gtk_action_set_visible(gtk_ui_manager_get_action(data->ui, "/MenuBar/ToolsMenu/ConvToEuro"), sensitive); + } /* update toolbar & list */ @@ -1469,15 +1581,42 @@ gint count = 0; { DB( g_print(" - UF_BALANCE\n") ); - register_panel_balance_refresh(widget); - - hb_label_set_colvalue(GTK_LABEL(data->TX_balance[0]), data->acc->bal_bank, data->acc->kcur, GLOBALS->minor); - hb_label_set_colvalue(GTK_LABEL(data->TX_balance[1]), data->acc->bal_today, data->acc->kcur, GLOBALS->minor); - hb_label_set_colvalue(GTK_LABEL(data->TX_balance[2]), data->acc->bal_future, data->acc->kcur, GLOBALS->minor); + if(data->showall == FALSE) + { + Account *acc = data->acc; - ui_mainwindow_populate_accounts(GLOBALS->mainwindow, NULL); - } + register_panel_balance_refresh(widget); + hb_label_set_colvalue(GTK_LABEL(data->TX_balance[0]), acc->bal_bank, acc->kcur, GLOBALS->minor); + hb_label_set_colvalue(GTK_LABEL(data->TX_balance[1]), acc->bal_today, acc->kcur, GLOBALS->minor); + hb_label_set_colvalue(GTK_LABEL(data->TX_balance[2]), acc->bal_future, acc->kcur, GLOBALS->minor); + } + else + { + GList *lst_acc, *lnk_acc; + gdouble bank, today, future; + + bank = today = future = 0.0; + lst_acc = g_hash_table_get_values(GLOBALS->h_acc); + lnk_acc = g_list_first(lst_acc); + while (lnk_acc != NULL) + { + Account *acc = lnk_acc->data; + bank += hb_amount_base(acc->bal_bank, acc->kcur); + today += hb_amount_base(acc->bal_today, acc->kcur); + future += hb_amount_base(acc->bal_future, acc->kcur); + + lnk_acc = g_list_next(lnk_acc); + } + g_list_free(lst_acc); + + hb_label_set_colvalue(GTK_LABEL(data->TX_balance[0]), bank, GLOBALS->kcur, GLOBALS->minor); + hb_label_set_colvalue(GTK_LABEL(data->TX_balance[1]), today, GLOBALS->kcur, GLOBALS->minor); + hb_label_set_colvalue(GTK_LABEL(data->TX_balance[2]), future, GLOBALS->kcur, GLOBALS->minor); + } + ui_hub_account_populate(GLOBALS->mainwindow, NULL); + } + /* update fltinfo */ DB( g_print(" - statusbar\n") ); @@ -1491,6 +1630,11 @@ gint count = 0; gchar buf1[64]; gchar buf2[64]; gchar buf3[64]; + gchar fbufavg[64]; + guint32 kcur; + + kcur = (data->showall == TRUE) ? GLOBALS->kcur : data->acc->kcur; + if( count >= 1 ) { @@ -1499,9 +1643,7 @@ gint count = 0; GtkTreeIter iter; model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_ope)); - list = gtk_tree_selection_get_selected_rows(selection, &model); - tmplist = g_list_first(list); while (tmplist != NULL) { @@ -1510,10 +1652,20 @@ gint count = 0; gtk_tree_model_get_iter(model, &iter, tmplist->data); gtk_tree_model_get(model, &iter, LST_DSPOPE_DATAS, &item, -1); - if( item->flags & OF_INCOME ) - opeinc += item->amount; + if( data->showall == FALSE ) + { + if( item->flags & OF_INCOME ) + opeinc += item->amount; + else + opeexp += item->amount; + } else - opeexp += item->amount; + { + if( item->flags & OF_INCOME ) + opeinc += hb_amount_base(item->amount, item->kcur); + else + opeexp += hb_amount_base(item->amount, item->kcur); + } DB( g_print(" - %s, %.2f\n", item->memo, item->amount ) ); @@ -1523,23 +1675,21 @@ gint count = 0; DB( g_print(" %f - %f = %f\n", opeinc, opeexp, opeinc + opeexp) ); - hb_strfmon(buf1, 64-1, opeinc, data->acc->kcur, GLOBALS->minor); - hb_strfmon(buf2, 64-1, -opeexp, data->acc->kcur, GLOBALS->minor); - hb_strfmon(buf3, 64-1, opeinc + opeexp, data->acc->kcur, GLOBALS->minor); + + hb_strfmon(buf1, 64-1, opeinc, kcur, GLOBALS->minor); + hb_strfmon(buf2, 64-1, -opeexp, kcur, GLOBALS->minor); + hb_strfmon(buf3, 64-1, opeinc + opeexp, kcur, GLOBALS->minor); + hb_strfmon(fbufavg, 64-1, (opeinc + opeexp) / count, kcur, GLOBALS->minor); } gchar *msg; - if( count <= 0 ) + if( count <= 1 ) { - //msg = g_strdup_printf (_("transaction selected: %d, hidden: %d"), count, data->hidden); - hb_strfmon(buf3, 64-1, data->totalsum, data->acc->kcur, GLOBALS->minor); - msg = g_strdup_printf(_("%d items (%s)"), data->total, buf3); + msg = g_strdup_printf(_("%d transactions"), data->total); } else - //TRANSLATORS: detail of the 3 %s which are some amount of selected transaction, 1=total 2=income, 3=expense - //msg = g_strdup_printf (_("transaction selected: %d, hidden: %d / %s ( %s - %s)"), count, data->hidden, buf3, buf1, buf2); - msg = g_strdup_printf(_("%d items (%d selected %s)"), data->total, count, buf3); + msg = g_strdup_printf(_("%d transactions, %d selected, avg: %s, sum: %s (%s - %s)"), data->total, count, fbufavg, buf3, buf1, buf2); gtk_label_set_markup(GTK_LABEL(data->TX_selection), msg); g_free (msg); @@ -1558,7 +1708,7 @@ Transaction *ope; data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(GTK_WIDGET(treeview), GTK_TYPE_WINDOW)), "inst_data"); //5.3.1 if closed account : disable any change - if( data->acc->flags & AF_CLOSED ) + if( (data->showall == FALSE) && (data->acc->flags & AF_CLOSED) ) return; @@ -1581,9 +1731,12 @@ Transaction *ope; } else { - if(col_id >= LST_DSPOPE_DATE && col_id != LST_DSPOPE_BALANCE) + if( data->showall == FALSE ) { - register_panel_edit_multiple (data->window, ope, col_id, data); + if(col_id >= LST_DSPOPE_DATE && col_id != LST_DSPOPE_BALANCE) + { + register_panel_edit_multiple (data->window, ope, col_id, data); + } } } } @@ -1628,26 +1781,26 @@ static gint listview_context_cb (GtkWidget *widget, GdkEventButton *event, GtkWi void register_panel_window_init(GtkWidget *widget, gpointer user_data) { struct register_panel_data *data; -gchar *name; data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data"); DB( g_print("\n[account] init window\n") ); - if( data->acc->flags & AF_CLOSED ) + if( data->showall == TRUE ) { - name = g_strdup_printf(_("[closed account] %s"), data->acc->name); - gtk_label_set_text (GTK_LABEL(data->LB_name), name); - g_free(name); + gtk_label_set_text (GTK_LABEL(data->LB_name), _("All transactions")); + hb_widget_visible (data->IM_closed, FALSE); } else { gtk_label_set_text (GTK_LABEL(data->LB_name), data->acc->name); hb_widget_visible (data->IM_closed, (data->acc->flags & AF_CLOSED) ? TRUE : FALSE); + + DB( g_print(" - sort transactions\n") ); + da_transaction_queue_sort(data->acc->txn_queue); } - DB( g_print(" - sort transactions\n") ); - da_transaction_queue_sort(data->acc->txn_queue); + list_txn_set_column_acc_visible(GTK_TREE_VIEW(data->LV_ope), data->showall); //DB( g_print(" mindate=%d, maxdate=%d %x\n", data->filter->mindate,data->filter->maxdate) ); @@ -1715,8 +1868,10 @@ struct register_panel_data *data; GLOBALS->define_off--; /* unset transaction edit mutex */ - if(data->acc) + if(data->showall == FALSE) data->acc->window = NULL; + else + GLOBALS->alltxnwindow = NULL; /* free title and filter */ DB( g_print(" user_data=%p to be free\n", user_data) ); @@ -1725,7 +1880,7 @@ struct register_panel_data *data; if(data->gpatxn != NULL) g_ptr_array_free (data->gpatxn, TRUE); - da_filter_free(data->filter); + da_flt_free(data->filter); g_free(data); @@ -1752,14 +1907,13 @@ static GtkActionEntry entries[] = { { "TxnMenu" , NULL, N_("Transacti_on"), NULL, NULL, NULL }, { "TxnStatusMenu", NULL, N_("_Status"), NULL, NULL, NULL }, { "ToolsMenu" , NULL, N_("_Tools"), NULL, NULL, NULL }, - /* = = = = = = = = future version = = = = = = = = */ - { "TestingMenu" , NULL, "Testing", NULL, NULL, NULL }, - - { "Close" , ICONNAME_CLOSE , N_("_Close") , "W", N_("Close the current account"), G_CALLBACK (register_panel_action_close) }, + /* name, icon-name, label, accelerator, tooltip */ - { "Filter" , ICONNAME_HB_FILTER , N_("_Filter..."), NULL, N_("Open the list filter"), G_CALLBACK (register_panel_action_editfilter) }, - { "ConvToEuro" , NULL , N_("Convert to Euro..."), NULL, N_("Convert this account to Euro currency"), G_CALLBACK (register_panel_action_converttoeuro) }, + { "ExportPDF" , NULL , N_("Export as PDF..."), NULL, N_("Export to a PDF file"), G_CALLBACK (register_panel_action_exportpdf) }, + { "ExportQIF" , NULL , N_("Export QIF..."), NULL, N_("Export as QIF"), G_CALLBACK (register_panel_action_exportqif) }, + { "ExportCSV" , NULL , N_("Export CSV..."), NULL, N_("Export as CSV"), G_CALLBACK (register_panel_action_exportcsv) }, + { "Close" , ICONNAME_CLOSE , N_("_Close") , "W", N_("Close the current account"), G_CALLBACK (register_panel_action_close) }, { "Add" , ICONNAME_HB_OPE_ADD , N_("_Add..."), NULL, N_("Add a new transaction"), G_CALLBACK (register_panel_action_add) }, { "Inherit" , ICONNAME_HB_OPE_HERIT , N_("_Inherit..."), NULL, N_("Inherit from the active transaction"), G_CALLBACK (register_panel_action_inherit) }, @@ -1773,29 +1927,30 @@ static GtkActionEntry entries[] = { { "Template" , ICONNAME_CONVERT , N_("Create template..."), NULL, N_("Create template"), G_CALLBACK (register_panel_action_createtemplate) }, { "Delete" , ICONNAME_HB_OPE_DELETE , N_("_Delete..."), NULL, N_("Delete selected transaction(s)"), G_CALLBACK (register_panel_action_remove) }, - { "Assign" , ICONNAME_HB_ASSIGN_RUN , N_("Auto. assignments"), NULL, N_("Run automatic assignments"), G_CALLBACK (register_panel_action_assign) }, - { "ExportQIF" , NULL , N_("Export QIF..."), NULL, N_("Export as QIF"), G_CALLBACK (register_panel_action_exportqif) }, - { "ExportCSV" , NULL , N_("Export CSV..."), NULL, N_("Export as CSV"), G_CALLBACK (register_panel_action_exportcsv) }, + { "DuplicateMark", NULL , N_("Mark duplicate..."), NULL, NULL, G_CALLBACK (register_panel_action_duplicate_mark) }, +// { "DuplicateClear", NULL , N_("Unmark duplicate"), NULL, NULL, G_CALLBACK (register_panel_action_duplicate_unmark) }, - { "ChkIntXfer" , NULL , N_("Check internal xfer..."), NULL, NULL, G_CALLBACK (register_panel_action_check_internal_xfer) }, + { "ChkIntXfer" , NULL , N_("Check internal xfer"), NULL, NULL, G_CALLBACK (register_panel_action_check_internal_xfer) }, + { "Assign" , ICONNAME_HB_ASSIGN_RUN , N_("Auto. assignments"), NULL, N_("Run automatic assignments"), G_CALLBACK (register_panel_action_assign) }, -/* = = = = = = = = future version = = = = = = = = */ - { "ExportPDF" , ICONNAME_PRINT , N_("Export PDF..."), NULL, N_("Export as PDF"), G_CALLBACK (register_panel_action_exportpdf) }, + { "Filter" , ICONNAME_HB_FILTER , N_("_Filter..."), NULL, N_("Open the list filter"), G_CALLBACK (register_panel_action_editfilter) }, + { "ConvToEuro" , NULL , N_("Convert to Euro..."), NULL, N_("Convert this account to Euro currency"), G_CALLBACK (register_panel_action_converttoeuro) }, }; static guint n_entries = G_N_ELEMENTS (entries); + static const gchar *ui_info = "" "" - " " " " " " " " +" " +" " " " " " - " " " " " " @@ -1806,25 +1961,22 @@ static const gchar *ui_info = " " " " " " +" " " " " " " " " " - " " -" " -" " +" " +//" " " " " " - " " +" " +" " +" " " " " " - -" " -" " -" " - "" "" @@ -1846,12 +1998,15 @@ static const gchar *ui_info = ""; -GtkWidget *register_panel_window_new(guint32 accnum, Account *acc) +/* + * if accnum = 0 or acc is null : show all account + */ +GtkWidget *register_panel_window_new(Account *acc) { struct register_panel_data *data; struct WinGeometry *wg; -GtkWidget *window, *mainbox, *table, *sw; -GtkWidget *treeview, *label, *widget; +GtkWidget *window, *mainbox, *table, *sw, *bar; +GtkWidget *treeview, *label, *widget, *image; //GtkWidget *menu, *menu_items; GtkUIManager *ui; GtkActionGroup *actions; @@ -1867,43 +2022,46 @@ GError *error = NULL; GLOBALS->define_off++; ui_mainwindow_update(GLOBALS->mainwindow, GINT_TO_POINTER(UF_SENSITIVE)); - /* create window, etc */ - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + /* create window, etc */ + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); data->window = window; - //debug - data->wintitle = NULL; - data->accnum = accnum; - data->acc = acc; + //store our window private data + g_object_set_data(G_OBJECT(window), "inst_data", (gpointer)data); + DB( g_print(" - new window=%p, inst_data=%p\n", window, data) ); - /* set transaction edit mutex */ - if(data->acc) + data->acc = acc; + data->showall = (acc != NULL) ? FALSE : TRUE; + + if(data->showall == FALSE) + { data->acc->window = GTK_WINDOW(window); + if( data->acc->flags & AF_CLOSED ) + data->wintitle = g_strdup_printf("%s %s - HomeBank", data->acc->name, _("(closed)")); + else + data->wintitle = g_strdup_printf("%s - HomeBank", data->acc->name); + } + else + { + GLOBALS->alltxnwindow = window; + data->wintitle = g_strdup_printf(_("%s - HomeBank"), _("All transactions")); + } - //g_free(data->wintitle); - data->wintitle = g_strdup_printf("%s - HomeBank", data->acc->name); gtk_window_set_title (GTK_WINDOW (window), data->wintitle); + gtk_window_set_icon_name(GTK_WINDOW (window), ICONNAME_HB_OPE_SHOW ); // connect our dispose function - g_signal_connect (window, "delete-event", + g_signal_connect (window, "delete-event", G_CALLBACK (register_panel_dispose), (gpointer)data); // connect our dispose function - g_signal_connect (window, "destroy", + g_signal_connect (window, "destroy", G_CALLBACK (register_panel_destroy), (gpointer)data); // connect our dispose function - g_signal_connect (window, "configure-event", + g_signal_connect (window, "configure-event", G_CALLBACK (register_panel_getgeometry), (gpointer)data); - //store our window private data - g_object_set_data(G_OBJECT(window), "inst_data", (gpointer)data); - DB( g_print(" - new window=%p, inst_data=%p\n", window, data) ); - - //set the window icon - gtk_window_set_icon_name(GTK_WINDOW (window), ICONNAME_HB_OPE_SHOW ); - - #if UI == 1 //start test uimanager @@ -1956,12 +2114,30 @@ GError *error = NULL; #endif mainbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + //gtk_container_set_border_width(GTK_CONTAINER(mainbox), SPACING_SMALL); gtk_container_add (GTK_CONTAINER (window), mainbox); widget = gtk_ui_manager_get_widget (ui, "/MenuBar"); //data->menu = widget; gtk_box_pack_start (GTK_BOX (mainbox), widget, FALSE, FALSE, 0); + // info bar for duplicate + bar = gtk_info_bar_new_with_buttons (_("_Refresh"), HB_RESPONSE_REFRESH, NULL); + data->IB_duplicate = bar; + gtk_box_pack_start (GTK_BOX (mainbox), bar, FALSE, FALSE, 0); + + gtk_info_bar_set_message_type (GTK_INFO_BAR (bar), GTK_MESSAGE_WARNING); + gtk_info_bar_set_show_close_button (GTK_INFO_BAR (bar), TRUE); + label = gtk_label_new ("This is an info bar with message type GTK_MESSAGE_WARNING"); + data->LB_duplicate = label; + gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); + gtk_label_set_xalign (GTK_LABEL (label), 0); + gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (bar))), label, FALSE, FALSE, 0); + + widget = make_numeric(NULL, 0, HB_DATE_MAX_GAP); + data->NB_txn_daygap = widget; + gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (bar))), widget, FALSE, FALSE, 0); + table = gtk_grid_new(); gtk_grid_set_row_spacing (GTK_GRID (table), SPACING_SMALL); gtk_grid_set_column_spacing (GTK_GRID (table), SPACING_MEDIUM); @@ -2001,7 +2177,7 @@ GError *error = NULL; gtk_grid_attach (GTK_GRID(table), widget, 8, 0, 1, 1); //quick search - widget = make_search (NULL); + widget = make_search (); data->ST_search = widget; gtk_widget_set_size_request(widget, HB_MINWIDTH_SEARCH, -1); gtk_grid_attach (GTK_GRID(table), widget, 9, 0, 1, 1); @@ -2016,25 +2192,32 @@ GError *error = NULL; gtk_container_set_border_width (GTK_CONTAINER(table), SPACING_SMALL); gtk_box_pack_start (GTK_BOX (mainbox), table, FALSE, FALSE, 0); - label = make_label_widget(_("_Range:")); gtk_grid_attach (GTK_GRID(table), label, 0, 0, 1, 1); data->CY_range = make_daterange(label, TRUE); gtk_grid_attach (GTK_GRID(table), data->CY_range, 1, 0, 1, 1); + widget = gtk_toggle_button_new(); + image = gtk_image_new_from_icon_name (ICONNAME_HB_OPE_FUTURE, GTK_ICON_SIZE_MENU); + g_object_set (widget, "image", image, NULL); + gtk_widget_set_tooltip_text (widget, _("Toggle show future transaction")); + data->CM_future = widget; + gtk_grid_attach (GTK_GRID(table), widget, 2, 0, 1, 1); + label = make_label_widget(_("_Type:")); - gtk_grid_attach (GTK_GRID(table), label, 2, 0, 1, 1); + gtk_grid_attach (GTK_GRID(table), label, 3, 0, 1, 1); data->CY_type = make_cycle(label, CYA_FLT_TYPE); - gtk_grid_attach (GTK_GRID(table), data->CY_type, 3, 0, 1, 1); + gtk_grid_attach (GTK_GRID(table), data->CY_type, 4, 0, 1, 1); label = make_label_widget(_("_Status:")); - gtk_grid_attach (GTK_GRID(table), label, 4, 0, 1, 1); + gtk_grid_attach (GTK_GRID(table), label, 5, 0, 1, 1); data->CY_status = make_cycle(label, CYA_FLT_STATUS); - gtk_grid_attach (GTK_GRID(table), data->CY_status, 5, 0, 1, 1); + gtk_grid_attach (GTK_GRID(table), data->CY_status, 6, 0, 1, 1); - widget = gtk_button_new_with_mnemonic (_("Reset _filters")); + //widget = gtk_button_new_with_mnemonic (_("Reset _filters")); + widget = gtk_button_new_with_mnemonic (_("_Reset")); data->BT_reset = widget; - gtk_grid_attach (GTK_GRID(table), widget, 6, 0, 1, 1); + gtk_grid_attach (GTK_GRID(table), widget, 7, 0, 1, 1); //TRANSLATORS: this is for Euro specific users, a toggle to display in 'Minor' currency widget = gtk_check_button_new_with_mnemonic (_("Euro _minor")); @@ -2102,15 +2285,21 @@ GError *error = NULL; #endif //todo: should move this - gtk_widget_grab_focus(GTK_WIDGET(data->LV_ope)); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_minor),GLOBALS->minor); + //setup g_object_set_data(G_OBJECT(gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_ope))), "minor", data->CM_minor); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_future), (PREFS->date_future_nbdays > 0) ? TRUE : FALSE ); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_minor), GLOBALS->minor); + gtk_widget_grab_focus(GTK_WIDGET(data->LV_ope)); // connect signals - data->handler_id[HID_RANGE] = g_signal_connect (data->CY_range , "changed", G_CALLBACK (register_panel_cb_filter_daterange), NULL); + g_signal_connect (data->IB_duplicate , "response", G_CALLBACK (register_panel_cb_bar_duplicate_response), NULL); + + data->handler_id[HID_RANGE] = g_signal_connect (data->CY_range , "changed", G_CALLBACK (register_panel_cb_filter_daterange), NULL); data->handler_id[HID_TYPE] = g_signal_connect (data->CY_type , "changed", G_CALLBACK (register_panel_cb_filter_type), NULL); data->handler_id[HID_STATUS] = g_signal_connect (data->CY_status, "changed", G_CALLBACK (register_panel_cb_filter_status), NULL); + g_signal_connect (data->CM_future, "toggled", G_CALLBACK (register_panel_cb_filter_daterange), NULL); + g_signal_connect (data->BT_reset , "clicked", G_CALLBACK (register_panel_cb_filter_reset), NULL); g_signal_connect (data->CM_minor , "toggled", G_CALLBACK (register_panel_toggle_minor), NULL); @@ -2148,13 +2337,18 @@ GError *error = NULL; gtk_window_maximize(GTK_WINDOW(window)); gtk_widget_show_all (window); + gtk_widget_hide(data->IB_duplicate); + + /* hide showfuture */ + hb_widget_visible (data->CM_future, PREFS->date_future_nbdays > 0 ? TRUE : FALSE); + /* make sure splash is up */ while (gtk_events_pending ()) gtk_main_iteration (); /* setup to moove later */ - data->filter = da_filter_malloc(); + data->filter = da_flt_malloc(); DB( g_print(" - filter ok %p\n", data->filter) );