/* HomeBank -- Free, easy, personal accounting for everyone.
- * Copyright (C) 1995-2016 Maxime DOYEN
+ * Copyright (C) 1995-2019 Maxime DOYEN
*
* This file is part of HomeBank.
*
/* our global datas */
extern struct HomeBank *GLOBALS;
+extern struct Preferences *PREFS;
-gchar *CYA_ACC_TYPE[] =
-{
- N_("(no type)"),
- N_("Bank"),
- N_("Cash"),
- N_("Asset"),
- N_("Credit card"),
- N_("Liability"),
- NULL
-};
+extern HbKvData CYA_ACC_TYPE[];
/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
-/**
- * ui_acc_comboboxentry_get_name:
- *
- * get the name of the active account or -1
- *
- * Return value: a new allocated name tobe freed with g_free
- *
- */
-gchar *
-ui_acc_comboboxentry_get_name(GtkComboBox *entry_box)
-{
-gchar *cbname;
-gchar *name = NULL;
- cbname = (gchar *)gtk_entry_get_text(GTK_ENTRY (gtk_bin_get_child(GTK_BIN (entry_box))));
- if( cbname != NULL)
- {
- name = g_strdup(cbname);
- g_strstrip(name);
- }
- return name;
-}
+
+/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
/**
gchar *name;
Account *item;
- name = ui_acc_comboboxentry_get_name(entry_box);
-
+ name = (gchar *)gtk_entry_get_text(GTK_ENTRY (gtk_bin_get_child(GTK_BIN (entry_box))));
item = da_acc_get_by_name(name);
- g_free(name);
-
if( item == NULL )
{
- //todo: ask the user here
- /*
- item = da_acc_malloc();
- item->name = g_strdup(name);
- da_acc_insert(item);
- ui_acc_comboboxentry_add(entry_box, item);
- */
+ //todo: future : ask the user here
return 0;
}
-
-
return item->key;
}
+
gboolean
ui_acc_comboboxentry_set_active(GtkComboBox *entry_box, guint32 key)
{
Account *item;
-
+
if( key > 0 )
{
item = da_acc_get(key);
- if( item != NULL)
+ if( (item != NULL) )
{
gtk_entry_set_text(GTK_ENTRY (gtk_bin_get_child(GTK_BIN (entry_box))), item->name);
return TRUE;
if( (acc->flags & AF_CLOSED) ) return;
if( (ctx->insert_type == ACC_LST_INSERT_REPORT) && (acc->flags & AF_NOREPORT) ) return;
if( (acc->key == ctx->except_key) ) return;
- if( (acc->imported == TRUE) ) return;
//todo check this
if( (ctx->kcur > 0 ) && (acc->kcur != ctx->kcur) ) return;
return retval;
}
+
+static void
+ui_acc_listview_icon_cell_data_function (GtkTreeViewColumn *col,
+ GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer user_data)
+{
+Account *entry;
+gchar *iconname = NULL;
+
+ gtk_tree_model_get(model, iter, LST_DEFACC_DATAS, &entry, -1);
+ if( entry->flags & AF_CLOSED )
+ iconname = ICONNAME_CHANGES_PREVENT;
+ g_object_set(renderer, "icon-name", iconname, NULL);
+}
+
+
static void
ui_acc_listview_name_cell_data_function (GtkTreeViewColumn *col,
GtkCellRenderer *renderer,
if( insert_type == ACC_LST_INSERT_REPORT )
{
- if( (item->flags & AF_CLOSED) ) goto next1;
+ //#1674045 ony rely on nosummary
+ //if( (item->flags & AF_CLOSED) ) goto next1;
if( (item->flags & AF_NOREPORT) ) goto next1;
}
treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
g_object_unref(store);
+ gtk_tree_view_set_grid_lines (GTK_TREE_VIEW (treeview), PREFS->grid_lines);
+
// column 1: toggle
if( withtoggle == TRUE )
{
}
// column 2: name
+ column = gtk_tree_view_column_new();
+
renderer = gtk_cell_renderer_text_new ();
g_object_set(renderer,
"ellipsize", PANGO_ELLIPSIZE_END,
"ellipsize-set", TRUE,
NULL);
- column = gtk_tree_view_column_new();
gtk_tree_view_column_pack_start(column, renderer, TRUE);
gtk_tree_view_column_set_cell_data_func(column, renderer, ui_acc_listview_name_cell_data_function, GINT_TO_POINTER(LST_DEFACC_DATAS), NULL);
+
+ renderer = gtk_cell_renderer_pixbuf_new ();
+ gtk_tree_view_column_pack_start(column, renderer, TRUE);
+ gtk_tree_view_column_set_cell_data_func(column, renderer, ui_acc_listview_icon_cell_data_function, GINT_TO_POINTER(LST_DEFACC_DATAS), NULL);
+
+
gtk_tree_view_column_set_resizable(column, TRUE);
gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
case FIELD_BANK:
g_free(item->bankname);
- item->bankname = g_strdup(gtk_entry_get_text(GTK_ENTRY(data->ST_bank)));
+ item->bankname = g_strdup(gtk_entry_get_text(GTK_ENTRY(data->ST_institution)));
break;
case FIELD_NUMBER:
{
data->change++;
- item->type = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_type));
+ item->type = hbtk_combo_box_get_active_id(GTK_COMBO_BOX_TEXT(data->CY_type));
account_set_currency(item, ui_cur_combobox_get_key(GTK_COMBO_BOX(data->CY_curr)) );
g_free(item->bankname);
- item->bankname = g_strdup(gtk_entry_get_text(GTK_ENTRY(data->ST_bank)));
+ item->bankname = g_strdup(gtk_entry_get_text(GTK_ENTRY(data->ST_institution)));
g_free(item->number);
item->number = g_strdup(gtk_entry_get_text(GTK_ENTRY(data->ST_number)));
gtk_spin_button_update(GTK_SPIN_BUTTON(data->ST_cheque2));
item->cheque2 = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(data->ST_cheque2));
-
+ item->karc= hbtk_combo_box_get_active_id(GTK_COMBO_BOX_TEXT(data->CY_template));
+ //active_id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(data->CY_template));
+ //item->karc = atoi(active_id);
}
}
+//#1743254 set frac digits as well
+static void ui_acc_manage_changed_curr_cb(GtkWidget *widget, gpointer user_data)
+{
+struct ui_acc_manage_data *data;
+guint32 key;
+Currency *cur;
+
+ DB( g_print("\n(ui_acc_manage changed_curr_cb)\n") );
+
+ data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
+
+ key = ui_cur_combobox_get_key(GTK_COMBO_BOX(data->CY_curr));
+ cur = da_cur_get (key);
+ if( cur != NULL )
+ {
+ DB( g_print("- set digits to '%s' %d\n", cur->name, cur->frac_digits) );
+ gtk_spin_button_set_digits (GTK_SPIN_BUTTON(data->ST_initial), cur->frac_digits);
+ gtk_spin_button_set_digits (GTK_SPIN_BUTTON(data->ST_overdraft), cur->frac_digits);
+ }
+
+}
+
/*
** set widgets contents from the selected account
DB( g_print(" -> set acc id=%d\n", item->key) );
- gtk_combo_box_set_active(GTK_COMBO_BOX(data->CY_type), item->type );
+ hbtk_combo_box_set_active_id(GTK_COMBO_BOX_TEXT(data->CY_type), item->type );
ui_cur_combobox_set_active(GTK_COMBO_BOX(data->CY_curr), item->kcur);
if(item->bankname != NULL)
- gtk_entry_set_text(GTK_ENTRY(data->ST_bank), item->bankname);
+ gtk_entry_set_text(GTK_ENTRY(data->ST_institution), item->bankname);
else
- gtk_entry_set_text(GTK_ENTRY(data->ST_bank), "");
+ gtk_entry_set_text(GTK_ENTRY(data->ST_institution), "");
if(item->number != NULL)
gtk_entry_set_text(GTK_ENTRY(data->ST_number), item->number);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->ST_cheque1), item->cheque1);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->ST_cheque2), item->cheque2);
+ hbtk_combo_box_set_active_id(GTK_COMBO_BOX_TEXT(data->CY_template), item->karc);
+ //g_snprintf(idbuffer, 11, "%d", item->karc);
+ //gtk_combo_box_set_active_id(GTK_COMBO_BOX(data->CY_template), idbuffer);
+
}
}
Account *item;
data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
- DB( g_print("\n(ui_acc_manage_add) (data=%x)\n", (guint)data) );
+ DB( g_print("\n(ui_acc_manage_add) data=%p\n", data) );
gchar *name = dialog_get_name(_("Account name"), NULL, GTK_WINDOW(data->window));
if(name != NULL)
item->name = name; //g_strdup_printf( _("(account %d)"), da_acc_length()+1);
item->kcur = GLOBALS->kcur;
- da_acc_append(item);
- ui_acc_listview_add(GTK_TREE_VIEW(data->LV_acc), item);
-
- data->change++;
+ g_strstrip(item->name);
+
+ if( strlen(item->name) > 0 )
+ {
+ if( da_acc_append(item) )
+ {
+ ui_acc_listview_add(GTK_TREE_VIEW(data->LV_acc), item);
+ data->change++;
+ }
+ }
}
}
}
gint result;
data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
- DB( g_print("\n(ui_acc_manage_remove) (data=%x)\n", (guint)data) );
+ DB( g_print("\n(ui_acc_manage_remove) data=%p\n", data) );
key = ui_acc_listview_get_selected_key(GTK_TREE_VIEW(data->LV_acc));
if( key > 0 )
gboolean bool;
data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
- DB( g_print("\n(ui_acc_manage_rename) (data=%x)\n", (guint)data) );
+ DB( g_print("\n(ui_acc_manage_rename) data=%p\n", data) );
key = ui_acc_listview_get_selected_key(GTK_TREE_VIEW(data->LV_acc));
if( key > 0 )
}
+static void ui_acc_manage_toggled_closed(GtkWidget *widget, gpointer user_data)
+{
+struct ui_acc_manage_data *data;
+GtkTreeModel *model;
+GtkTreeIter iter;
+GtkTreePath *path;
+Account *accitem;
+gboolean selected, bool;
+
+ data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
+ DB( g_print("\n(ui_acc_manage_toggled_closed) data=%p\n", data) );
+
+ selected = gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_acc)), &model, &iter);
+
+ if(selected)
+ {
+ gtk_tree_model_get(model, &iter, LST_DEFACC_DATAS, &accitem, -1);
+ accitem->flags &= ~(AF_CLOSED);
+ bool = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_closed));
+ if(bool) accitem->flags |= AF_CLOSED;
+
+ /* redraw the row to display/hide the icon */
+ path = gtk_tree_model_get_path(model, &iter);
+ gtk_tree_model_row_changed(model, path, &iter);
+ gtk_tree_path_free (path);
+
+ // gtk_tree_view_columns_autosize (GTK_TREE_VIEW(data->LV_arc));
+ //gtk_widget_queue_draw (GTK_WIDGET(data->LV_arc));
+ }
+
+}
+
+
static void ui_acc_manage_rowactivated (GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *col, gpointer userdata)
{
//struct account_data *data;
guint32 key;
gboolean doupdate = FALSE;
- DB( g_print("\n(ui_acc_manage_cleanup) %x\n", (guint)data) );
+ DB( g_print("\n(ui_acc_manage_cleanup) %p\n", data) );
key = ui_acc_listview_get_selected_key(GTK_TREE_VIEW(data->LV_acc));
if(key > 0)
*/
static void ui_acc_manage_setup(struct ui_acc_manage_data *data)
{
+GList *tmplist;
DB( g_print("\n(ui_acc_manage_setup)\n") );
ui_acc_listview_populate(data->LV_acc, ACC_LST_INSERT_NORMAL);
ui_cur_combobox_populate(GTK_COMBO_BOX(data->CY_curr), GLOBALS->h_cur);
//populate_view_acc(data->LV_acc, GLOBALS->acc_list, TRUE);
+
+ //populate template
+ hbtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(data->CY_template), 0, _("(none)"));
+ gtk_combo_box_set_active(GTK_COMBO_BOX(data->CY_template), 0);
+ tmplist = g_list_first(GLOBALS->arc_list);
+ while (tmplist != NULL)
+ {
+ Archive *item = tmplist->data;
+
+ if( !(item->flags & OF_AUTO) )
+ {
+ hbtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(data->CY_template), item->key, item->memo);
+ }
+ tmplist = g_list_next(tmplist);
+ }
+
}
/*
//store our dialog private data
g_object_set_data(G_OBJECT(dialog), "inst_data", (gpointer)&data);
- DB( g_print("(ui_acc_manage_) dialog=%x, inst_data=%x\n", (guint)dialog, (guint)&data) );
+ DB( g_print("(ui_acc_manage_) dialog=%p, inst_data=%p\n", dialog, &data) );
//window contents
content = gtk_dialog_get_content_area(GTK_DIALOG (dialog));
row = 1;
label = make_label_widget(_("_Type:"));
gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
- widget = make_cycle(label, CYA_ACC_TYPE);
+ //widget = make_cycle(label, CYA_ACC_TYPE);
+ widget = hbtk_combo_box_new_with_data(label, CYA_ACC_TYPE);
data.CY_type = widget;
gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
label = make_label_widget(_("Notes:"));
gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
widget = gtk_text_view_new ();
- scrollwin = gtk_scrolled_window_new (NULL, NULL);
+ //#1697171 add wrap
+ gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(widget), GTK_WRAP_WORD);
+ scrollwin = gtk_scrolled_window_new (NULL, NULL);
gtk_widget_set_size_request (scrollwin, -1, 48);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin), GTK_SHADOW_ETCHED_IN);
gtk_container_add (GTK_CONTAINER (scrollwin), widget);
gtk_widget_set_hexpand (scrollwin, TRUE);
label = make_label_widget(_("_Name:"));
gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
widget = make_string(label);
- data.ST_bank = widget;
+ data.ST_institution = widget;
gtk_widget_set_hexpand(widget, TRUE);
gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 2, 1);
data.ST_overdraft = widget;
gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
- // group :: Report exclusion
+ // group :: miscelleaneous
group_grid = gtk_grid_new ();
gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, 2, 1, 1);
+ label = make_label_group(_("Miscellaneous"));
+ gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 2, 1);
+
+ row = 1;
+ label = make_label_widget(_("Default _Template:"));
+ gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
+ widget = hbtk_combo_box_new(label);
+ data.CY_template = widget;
+ gtk_widget_set_hexpand(widget, TRUE);
+ gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 2, 1);
+
+
+ // group :: Report exclusion
+ group_grid = gtk_grid_new ();
+ gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
+ gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
+ gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, 3, 1, 1);
+
label = make_label_group(_("Report exclusion"));
gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 2, 1);
g_signal_connect (dialog, "destroy", G_CALLBACK (gtk_widget_destroyed), &dialog);
g_signal_connect (gtk_tree_view_get_selection(GTK_TREE_VIEW(data.LV_acc)), "changed", G_CALLBACK (ui_acc_manage_selection), NULL);
g_signal_connect (GTK_TREE_VIEW(data.LV_acc), "row-activated", G_CALLBACK (ui_acc_manage_rowactivated), GINT_TO_POINTER(2));
+
+ g_signal_connect (data.CY_curr , "changed", G_CALLBACK (ui_acc_manage_changed_curr_cb), NULL);
+ g_signal_connect (data.CM_closed, "toggled", G_CALLBACK (ui_acc_manage_toggled_closed), NULL);
g_signal_connect (G_OBJECT (data.BT_add), "clicked", G_CALLBACK (ui_acc_manage_add), NULL);
g_signal_connect (G_OBJECT (data.BT_rem), "clicked", G_CALLBACK (ui_acc_manage_delete), NULL);