/* HomeBank -- Free, easy, personal accounting for everyone.
- * Copyright (C) 1995-2014 Maxime DOYEN
+ * Copyright (C) 1995-2016 Maxime DOYEN
*
* This file is part of HomeBank.
*
#include "ui-account.h"
#include "ui-category.h"
#include "ui-payee.h"
+#include "ui-split.h"
#include "gtk-dateentry.h"
/* our global datas */
extern struct HomeBank *GLOBALS;
+extern struct Preferences *PREFS;
+gchar *CYA_ARCHIVE_TYPE[] = {
+ N_("Scheduled"),
+ N_("Template"),
+ NULL
+};
+
gchar *CYA_UNIT[] = { N_("Day"), N_("Week"), N_("Month"), N_("Year"), NULL };
gchar *CYA_SCHED_WEEKEND[] = { N_("Possible"), N_("Before"), N_("After"), NULL };
+extern gchar *CYA_TXN_STATUS[];
static GtkWidget *ui_arc_listview_new(void);
+static void ui_arc_listview_populate(GtkWidget *view, gint type)
+{
+GtkTreeModel *model;
+GtkTreeIter iter;
+GList *list;
+gint i;
+
+ DB( g_print("ui_arc_listview_populate()\n") );
+
+ DB( g_print(" - type=%d\n", type) );
+
+
+ //insert all glist item into treeview
+ model = gtk_tree_view_get_model(GTK_TREE_VIEW(view));
+
+
+ gtk_list_store_clear (GTK_LIST_STORE(model));
+
+ i=0;
+ list = g_list_first(GLOBALS->arc_list);
+ while (list != NULL)
+ {
+ Archive *item = list->data;
+
+ if( (type == ARC_TYPE_SCHEDULED) && !(item->flags & OF_AUTO) )
+ goto next;
+
+ if( (type == ARC_TYPE_TEMPLATE) && (item->flags & OF_AUTO) )
+ goto next;
+
+ gtk_list_store_append (GTK_LIST_STORE(model), &iter);
+ gtk_list_store_set (GTK_LIST_STORE(model), &iter,
+ LST_DEFARC_DATAS, item, //data struct
+ LST_DEFARC_OLDPOS, i, //oldpos
+ -1);
+
+ //DB( g_print(" populate_treeview: %d %08x\n", i, list->data) );
+next:
+ i++; list = g_list_next(list);
+ }
+
+}
+
+
+static void ui_arc_listview_select_by_pointer(GtkTreeView *treeview, gpointer user_data)
+{
+GtkTreeModel *model;
+GtkTreeIter iter;
+GtkTreeSelection *selection;
+gboolean valid;
+Archive *arc = user_data;
+
+ model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
+
+ valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter);
+ while (valid)
+ {
+ Archive *tmp_arc;
+
+ gtk_tree_model_get (model, &iter, LST_DEFARC_DATAS, &tmp_arc, -1);
+ if( arc == tmp_arc )
+ {
+ gtk_tree_selection_select_iter (selection, &iter);
+ break;
+ }
+
+ valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
+ }
+}
+
+
/*
**
** The function should return:
*/
static gint ui_arc_listview_compare_func (GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer userdata)
{
+gint sortcol = GPOINTER_TO_INT(userdata);
Archive *entry1, *entry2;
+gint retval = 0;
gtk_tree_model_get(model, a, LST_DEFARC_DATAS, &entry1, -1);
gtk_tree_model_get(model, b, LST_DEFARC_DATAS, &entry2, -1);
- return hb_string_utf8_compare(entry1->wording, entry2->wording);
+ switch (sortcol)
+ {
+ case LST_DEFARC_SORT_MEMO:
+ retval = (entry1->flags & GF_INCOME) - (entry2->flags & GF_INCOME);
+ if(!retval)
+ {
+ retval = hb_string_utf8_compare(entry1->wording, entry2->wording);
+ }
+ break;
+ case LST_DEFARC_SORT_PAYEE:
+ {
+ Payee *p1, *p2;
+
+ p1 = da_pay_get(entry1->kpay);
+ p2 = da_pay_get(entry2->kpay);
+ if( p1 != NULL && p2 != NULL )
+ {
+ retval = hb_string_utf8_compare(p1->name, p2->name);
+ }
+ }
+ break;
+ default:
+ g_return_val_if_reached(0);
+ }
+ return retval;
}
static void ui_arc_listview_auto_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
{
Archive *item;
-GdkPixbuf *pixbuf = NULL;
+gchar *iconname = NULL;
// get the transaction
gtk_tree_model_get(model, iter, LST_DEFARC_DATAS, &item, -1);
- if( item->flags & OF_AUTO )
- pixbuf = GLOBALS->lst_pixbuf[LST_PIXBUF_AUTO];
+ iconname = ( item->flags & OF_AUTO ) ? ICONNAME_HB_OPE_AUTO : NULL;
- g_object_set(renderer, "pixbuf", pixbuf, NULL);
+ g_object_set(renderer, "icon-name", iconname, NULL);
}
/*
** draw some text from the stored data structure
*/
-static void ui_arc_listview_text_cell_data_function (GtkTreeViewColumn *col,
+static void ui_arc_listview_cell_data_function_memo (GtkTreeViewColumn *col,
GtkCellRenderer *renderer,
GtkTreeModel *model,
GtkTreeIter *iter,
+static void ui_arc_listview_cell_data_function_payee (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
+{
+Archive *arc;
+Payee *pay;
+
+ gtk_tree_model_get(model, iter,
+ LST_DEFARC_DATAS, &arc,
+ -1);
+
+ if(arc)
+ {
+
+ pay = da_pay_get(arc->kpay);
+
+ if(pay != NULL)
+ g_object_set(renderer, "text", pay->name, NULL);
+ }
+ else
+ g_object_set(renderer, "text", NULL, NULL);
+
+}
+
/*
**
*/
G_TYPE_BOOLEAN
);
- //sortable
- gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), LST_DEFARC_DATAS, ui_arc_listview_compare_func, GINT_TO_POINTER(LST_DEFARC_DATAS), NULL);
-
-
//treeview
view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
g_object_unref(store);
- /* icon column */
+ gtk_tree_view_set_grid_lines (GTK_TREE_VIEW (view), PREFS->grid_lines);
+
+ /* column: Memo */
+ renderer = gtk_cell_renderer_text_new ();
+ g_object_set(renderer,
+ "ellipsize", PANGO_ELLIPSIZE_END,
+ "ellipsize-set", TRUE,
+ NULL);
+
column = gtk_tree_view_column_new();
- renderer = gtk_cell_renderer_pixbuf_new ();
- gtk_cell_renderer_set_fixed_size(renderer, GLOBALS->lst_pixbuf_maxwidth, -1);
+ gtk_tree_view_column_set_title(column, _("Memo"));
gtk_tree_view_column_pack_start(column, renderer, TRUE);
- gtk_tree_view_column_set_cell_data_func(column, renderer, ui_arc_listview_auto_cell_data_function, NULL, NULL);
+ gtk_tree_view_column_set_cell_data_func(column, renderer, ui_arc_listview_cell_data_function_memo, GINT_TO_POINTER(LST_DEFARC_SORT_MEMO), NULL);
+ gtk_tree_view_column_set_sort_column_id (column, LST_DEFARC_SORT_MEMO);
+ gtk_tree_view_column_set_alignment (column, 0.5);
+ gtk_tree_view_column_set_min_width(column, HB_MINWIDTH_LIST);
+ gtk_tree_view_column_set_resizable(column, TRUE);
gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
- /* text column */
- column = gtk_tree_view_column_new();
+ /* column: Payee */
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_set_title(column, _("Payee"));
gtk_tree_view_column_pack_start(column, renderer, TRUE);
- gtk_tree_view_column_set_cell_data_func(column, renderer, ui_arc_listview_text_cell_data_function, GINT_TO_POINTER(1), NULL);
+ gtk_tree_view_column_set_cell_data_func(column, renderer, ui_arc_listview_cell_data_function_payee, GINT_TO_POINTER(LST_DEFARC_SORT_PAYEE), NULL);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ //gtk_tree_view_column_add_attribute(column, renderer, "text", 1);
+ gtk_tree_view_column_set_sort_column_id (column, LST_DEFARC_SORT_PAYEE);
+ gtk_tree_view_column_set_alignment (column, 0.5);
+ gtk_tree_view_column_set_min_width(column, HB_MINWIDTH_LIST);
gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
- gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(view), FALSE);
+
+ /* column: Scheduled icon */
+ column = gtk_tree_view_column_new();
+ renderer = gtk_cell_renderer_pixbuf_new ();
+ //gtk_cell_renderer_set_fixed_size(renderer, GLOBALS->lst_pixbuf_maxwidth, -1);
+ gtk_tree_view_column_pack_start(column, renderer, TRUE);
+ gtk_tree_view_column_set_cell_data_func(column, renderer, ui_arc_listview_auto_cell_data_function, NULL, NULL);
+ gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
+
+
+ //sortable
+ gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), LST_DEFARC_SORT_MEMO, ui_arc_listview_compare_func, GINT_TO_POINTER(LST_DEFARC_SORT_MEMO), NULL);
+ gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), LST_DEFARC_SORT_PAYEE, ui_arc_listview_compare_func, GINT_TO_POINTER(LST_DEFARC_SORT_PAYEE), NULL);
+
+
+ gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), LST_DEFARC_SORT_MEMO, GTK_SORT_ASCENDING);
+
+ //gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(view), FALSE);
//gtk_tree_view_set_reorderable (GTK_TREE_VIEW(view), TRUE);
return(view);
struct ui_arc_manage_data *data;
GtkTreeModel *model;
GtkTreeIter iter;
-
Archive *item;
+gint type;
data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
DB( g_print("\n[ui_scheduled] add\n") );
model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_arc));
item = da_archive_malloc();
- item->wording = g_strdup_printf(_("(archive %d)"), g_list_length(GLOBALS->arc_list) + 1);
+ item->wording = g_strdup_printf(_("(template %d)"), g_list_length(GLOBALS->arc_list) + 1);
item->unit = 2;
+ type = radio_get_active(GTK_CONTAINER(data->RA_type)) == 1 ? ARC_TYPE_TEMPLATE : ARC_TYPE_SCHEDULED;
+ if( type == ARC_TYPE_SCHEDULED )
+ item->flags |= OF_AUTO;
+
GLOBALS->arc_list = g_list_append(GLOBALS->arc_list, item);
gtk_list_store_append (GTK_LIST_STORE(model), &iter);
}
/*
-** remove the selected account to our treeview and temp GList
+** delete the selected account to our treeview and temp GList
*/
-static void ui_arc_manage_remove(GtkWidget *widget, gpointer user_data)
+static void ui_arc_manage_delete(GtkWidget *widget, gpointer user_data)
{
struct ui_arc_manage_data *data;
GtkTreeSelection *selection;
GtkTreeModel *model;
GtkTreeIter iter;
Archive *item;
+gint result;
data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
- DB( g_print("\n[ui_scheduled] remove (data=%p)\n", data) );
+ DB( g_print("\n[ui_scheduled] delete (data=%p)\n", data) );
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_arc));
//if true there is a selected node
if (gtk_tree_selection_get_selected(selection, &model, &iter))
{
+ gchar *title;
+ gchar *secondtext;
+
gtk_tree_model_get(model, &iter, LST_DEFARC_DATAS, &item, -1);
- gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
- GLOBALS->arc_list = g_list_remove(GLOBALS->arc_list, item);
+ title = g_strdup_printf (
+ _("Are you sure you want to permanently delete '%s'?"), item->wording);
- data->change++;
- //DB( g_print(" remove =%08x (pos=%d)\n", entry, g_list_index(data->tmp_list, entry) ) );
+ secondtext = _("If you delete a scheduled/template, it will be permanently lost.");
+
+ result = ui_dialog_msg_confirm_alert(
+ GTK_WINDOW(data->window),
+ title,
+ secondtext,
+ _("_Delete")
+ );
+
+ g_free(title);
+
+ if( result == GTK_RESPONSE_OK )
+ {
+ gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
+
+ GLOBALS->arc_list = g_list_remove(GLOBALS->arc_list, item);
+
+ data->change++;
+
+ }
+ //DB( g_print(" delete =%08x (pos=%d)\n", entry, g_list_index(data->tmp_list, entry) ) );
}
}
gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->ST_amount), item->amount);
- g_signal_handler_block(data->CM_valid, data->handler_id[HID_ARC_VALID]);
+
+
+ radio_set_active(GTK_CONTAINER(data->RA_status), item->status );
+
+
+ /*g_signal_handler_block(data->CM_valid, data->handler_id[HID_ARC_VALID]);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_valid), (item->flags & OF_VALID) ? 1 : 0);
g_signal_handler_unblock(data->CM_valid, data->handler_id[HID_ARC_VALID]);
g_signal_handler_block(data->CM_remind, data->handler_id[HID_ARC_REMIND]);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_remind), (item->flags & OF_REMIND) ? 1 : 0);
g_signal_handler_unblock(data->CM_remind, data->handler_id[HID_ARC_REMIND]);
-
+ */
+
gtk_combo_box_set_active(GTK_COMBO_BOX(data->NU_mode), item->paymode);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_cheque), (item->flags & OF_CHEQ2) ? 1 : 0);
gtk_combo_box_set_active(GTK_COMBO_BOX(data->CY_unit), item->unit);
- gtk_dateentry_set_date(GTK_DATE_ENTRY(data->PO_next), item->nextdate);
+ gtk_date_entry_set_date(GTK_DATE_ENTRY(data->PO_next), item->nextdate);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_limit), (item->flags & OF_LIMIT) ? 1 : 0);
*/
static void ui_arc_manage_getlast(struct ui_arc_manage_data *data)
{
+Archive *item;
gchar *txt;
-gboolean bool;
gdouble value;
gint active;
-Archive *item;
+
DB( g_print("\n[ui_scheduled] getlast\n") );
{
DB( g_print(" -> %s\n", item->wording) );
+ gtk_tree_view_columns_autosize (GTK_TREE_VIEW(data->LV_arc));
+
txt = (gchar *)gtk_entry_get_text(GTK_ENTRY(data->ST_word));
// ignore if entry is empty
if (txt && *txt)
item->wording = g_strdup(txt);
}
- gtk_tree_view_columns_autosize (GTK_TREE_VIEW(data->LV_arc));
-
+ gtk_spin_button_update(GTK_SPIN_BUTTON(data->ST_amount));
value = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->ST_amount));
item->amount = value;
- item->flags = 0;
+ item->paymode = gtk_combo_box_get_active(GTK_COMBO_BOX(data->NU_mode));
+ item->kcat = ui_cat_comboboxentry_get_key_add_new(GTK_COMBO_BOX(data->PO_grp));
+ item->kpay = ui_pay_comboboxentry_get_key_add_new(GTK_COMBO_BOX(data->PO_pay));
+ item->kacc = ui_acc_comboboxentry_get_key(GTK_COMBO_BOX(data->PO_acc));
+ item->kxferacc = ui_acc_comboboxentry_get_key(GTK_COMBO_BOX(data->PO_accto));
- active = item->amount > 0 ? TRUE : FALSE;
- //active = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_amount));
- if(active == 1) item->flags |= OF_INCOME;
+ item->status = radio_get_active(GTK_CONTAINER(data->RA_status));
+
+ //#1615245: moved here, after get combo entry key
+ if( item->paymode != PAYMODE_INTXFER )
+ {
+ //#677351: revert kxferacc to 0
+ item->kxferacc = 0;
+ }
- bool = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_cheque));
- if(bool) item->flags |= OF_CHEQ2;
+ /* flags */
+ //item->flags = 0;
+ item->flags &= (OF_SPLIT); //(split is set in hb_archive)
- bool = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_valid));
- if(bool) item->flags |= OF_VALID;
+ active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_cheque));
+ if(active == 1) item->flags |= OF_CHEQ2;
- bool = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_remind));
- if(bool == 1) item->flags |= OF_REMIND;
+ //active = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_amount));
+ active = item->amount > 0 ? TRUE : FALSE;
+ if(active == TRUE) item->flags |= OF_INCOME;
- item->paymode = gtk_combo_box_get_active(GTK_COMBO_BOX(data->NU_mode));
- item->kcat = ui_cat_comboboxentry_get_key_add_new(GTK_COMBO_BOX(data->PO_grp));
- item->kpay = ui_pay_comboboxentry_get_key_add_new(GTK_COMBO_BOX(data->PO_pay));
- item->kacc = ui_acc_comboboxentry_get_key(GTK_COMBO_BOX(data->PO_acc));
- item->kxferacc = ui_acc_comboboxentry_get_key(GTK_COMBO_BOX(data->PO_accto));
- DB( g_print(" -> PO_acc %d\n", item->kacc) );
- DB( g_print(" -> PO_accto %d\n", item->kxferacc) );
+ /* -- automated -- */
- bool = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_auto));
- if(bool) item->flags |= OF_AUTO;
+ active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_auto));
+ if(active == 1) item->flags |= OF_AUTO;
+ gtk_spin_button_update(GTK_SPIN_BUTTON(data->NB_every));
item->every = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(data->NB_every));
item->unit = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_unit));
- item->nextdate = gtk_dateentry_get_date(GTK_DATE_ENTRY(data->PO_next));
+ item->nextdate = gtk_date_entry_get_date(GTK_DATE_ENTRY(data->PO_next));
- bool = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_limit));
- if(bool) item->flags |= OF_LIMIT;
+ active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_limit));
+ if(active == 1) item->flags |= OF_LIMIT;
+ gtk_spin_button_update(GTK_SPIN_BUTTON(data->NB_limit));
item->limit = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(data->NB_limit));
item->weekend = radio_get_active(GTK_CONTAINER(data->CY_weekend));
data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
- DB( g_print("\n[ui_scheduled] widget=%p, data=%p\n", widget, data) );
+ //DB( g_print(" widget=%p, data=%p\n", widget, data) );
payment = gtk_combo_box_get_active(GTK_COMBO_BOX(data->NU_mode));
hb_widget_visible(data->LB_accto, sensitive);
hb_widget_visible(data->PO_accto, sensitive);
+ DB( g_print(" visible: %d\n", sensitive) );
+
}
/*
static void ui_arc_manage_scheduled(GtkWidget *widget, gpointer user_data)
{
struct ui_arc_manage_data *data;
-gboolean sensitive;
+Archive *arcitem;
+GtkTreeModel *model;
+GtkTreeIter iter;
+GtkTreePath *path;
+gboolean selected, sensitive;
DB( g_print("\n[ui_scheduled] scheduled\n") );
data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
- //scheduled
- sensitive = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_auto)) ? TRUE : FALSE;
+ sensitive = FALSE;
+
+
+ selected = gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_arc)), &model, &iter);
+ if(selected)
+ {
+ gtk_tree_model_get(model, &iter, LST_DEFARC_DATAS, &arcitem, -1);
+
+ arcitem->flags &= ~(OF_AUTO);
+ sensitive = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_auto)) ? TRUE : FALSE;
+ if(sensitive)
+ arcitem->flags |= OF_AUTO;
+ }
+
+
+
+ gtk_widget_set_sensitive(data->LB_next, sensitive);
gtk_widget_set_sensitive(data->PO_next, sensitive);
+
+ gtk_widget_set_sensitive(data->LB_every, sensitive);
gtk_widget_set_sensitive(data->NB_every, sensitive);
+
+ gtk_widget_set_sensitive(data->LB_weekend, sensitive);
+ gtk_widget_set_sensitive(data->CY_weekend, sensitive);
+
gtk_widget_set_sensitive(data->CY_unit, sensitive);
gtk_widget_set_sensitive(data->CM_limit, sensitive);
- gtk_widget_set_sensitive(data->CY_weekend, sensitive);
+ gtk_widget_set_sensitive(data->LB_posts, sensitive);
+
+
sensitive = (sensitive == TRUE) ? gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_limit)) : sensitive;
gtk_widget_set_sensitive(data->NB_limit, sensitive);
-
+ if(selected)
+ {
+ /* 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_arc_manage_update_post_split(GtkWidget *widget, gdouble amount)
+{
+ struct ui_arc_manage_data *data;
+ gboolean sensitive = TRUE;
+
+ DB( g_print("(ui_arc_manage) update _post_split\n") );
+
+ data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
+
+ DB( g_print("- amount=%.2f\n", amount) );
+
+ data->lastarcitem->amount = amount;
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->ST_amount), amount);
+
+ data->lastarcitem->flags &= ~(OF_SPLIT); //First set flag that Splits are cleared
+
+ if (da_splits_count(data->lastarcitem->splits) > 0)
+ {
+ /* disable category if split is set */
+ data->lastarcitem->flags |= OF_SPLIT; //Then set flag that Splits are active
+ sensitive = FALSE;
+ ui_cat_comboboxentry_set_active(GTK_COMBO_BOX(data->PO_grp), 0);
+ }
+ gtk_widget_set_sensitive(data->ST_amount, sensitive);
+ //# 1416624 empty category when split
+ if( (data->lastarcitem->flags & (OF_SPLIT)) )
+ ui_cat_comboboxentry_set_active(GTK_COMBO_BOX(data->PO_grp), 0);
+ gtk_widget_set_sensitive(data->PO_grp, sensitive);
+
+}
/*
** update the widgets status and contents from action/selection value
*/
GtkTreeModel *model;
GtkTreeIter iter;
gboolean selected, sensitive;
+gboolean split_sensitive = TRUE;
Archive *arcitem;
DB( g_print(" selected = %d\n", selected) );
sensitive = (selected == TRUE) ? TRUE : FALSE;
- gtk_widget_set_sensitive(data->PO_pay, sensitive);
- gtk_widget_set_sensitive(data->ST_word, sensitive);
- gtk_widget_set_sensitive(data->ST_amount, sensitive);
- gtk_widget_set_sensitive(data->BT_amount, sensitive);
- //gtk_widget_set_sensitive(data->BT_split, sensitive);
-
- gtk_widget_set_sensitive(data->CM_valid, sensitive);
- gtk_widget_set_sensitive(data->CM_remind, sensitive);
- gtk_widget_set_sensitive(data->CM_cheque, sensitive);
-
- gtk_widget_set_sensitive(data->NU_mode, sensitive);
- gtk_widget_set_sensitive(data->PO_grp, sensitive);
- gtk_widget_set_sensitive(data->PO_acc, sensitive);
- gtk_widget_set_sensitive(data->PO_accto, sensitive);
+ gtk_widget_set_sensitive(data->GR_txnleft, sensitive);
gtk_widget_set_sensitive(data->CM_auto, sensitive);
}
data->lastarcitem = arcitem;
+ if (da_splits_count(data->lastarcitem->splits) > 0)
+ {
+
+ data->lastarcitem->flags |= OF_SPLIT; //Then set flag that Splits are active
+ split_sensitive = FALSE;
+ ui_cat_comboboxentry_set_active(GTK_COMBO_BOX(data->PO_grp), 0);
+ }
+
+ gtk_widget_set_sensitive(data->ST_amount, split_sensitive);
+ gtk_widget_set_sensitive(data->PO_grp, split_sensitive);
+
DB( g_print(" - call set\n") );
ui_arc_manage_set(widget, NULL);
}
data->lastarcitem = NULL;
}
+ //gtk_widget_set_sensitive(data->LB_schedinsert, sensitive);
+
+
DB( g_print(" - call scheduled\n") );
ui_arc_manage_scheduled(widget, NULL);
DB( g_print(" - call paymode\n") );
}
-static void ui_arc_manage_togglestatus(GtkWidget *widget, gpointer user_data)
+
+/*
+**
+*/
+static void ui_arc_manage_toggleamount(GtkWidget *widget, GtkEntryIconPosition icon_pos, GdkEvent *event, gpointer user_data)
{
struct ui_arc_manage_data *data;
+gdouble value;
- DB( g_print("\n[ui_scheduled] togglestatus\n") );
-
- data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
+ DB( g_print("\n[ui_scheduled] toggleamount\n") );
- //valid & remind are exclusive
- switch( GPOINTER_TO_INT(user_data) )
+ if(icon_pos == GTK_ENTRY_ICON_PRIMARY)
{
- case HID_ARC_VALID:
- if( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_valid)) )
- {
- g_signal_handler_block(data->CM_remind, data->handler_id[HID_ARC_REMIND]);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_remind), FALSE);
- g_signal_handler_unblock(data->CM_remind, data->handler_id[HID_ARC_REMIND]);
- }
- break;
- case HID_ARC_REMIND:
- if( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_remind)) )
- {
- g_signal_handler_block(data->CM_valid, data->handler_id[HID_ARC_VALID]);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_valid), FALSE);
- g_signal_handler_unblock(data->CM_valid, data->handler_id[HID_ARC_VALID]);
- }
- }
+ data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
+ gtk_spin_button_update(GTK_SPIN_BUTTON(data->ST_amount));
+ value = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->ST_amount));
+ value *= -1;
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->ST_amount), value);
+ /*
+ value = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->ST_amount));
+ type = gtk_widget_get_sensitive(data->CY_amount);
-}
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->ST_amount), value * type);
+ */
+ }
+}
-/*
-**
-*/
-static void ui_arc_manage_toggleamount(GtkWidget *widget, gpointer user_data)
+static void defarchive_button_split_cb(GtkWidget *widget, gpointer user_data)
{
struct ui_arc_manage_data *data;
-gdouble value;
+gdouble amount;
- DB( g_print("\n[ui_scheduled] toggleamount\n") );
+ DB( g_print("\n[ui_scheduled] doing split\n") );
data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
- value = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->ST_amount));
- value *= -1;
- gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->ST_amount), value);
-
+ amount = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->ST_amount));
- /*
- value = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->ST_amount));
- type = gtk_widget_get_sensitive(data->CY_amount);
+ ui_split_dialog(data->window, data->lastarcitem->splits, amount, &ui_arc_manage_update_post_split);
- gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->ST_amount), value * type);
- */
}
-/*
-**
-*/
static void ui_arc_manage_selection(GtkTreeSelection *treeselection, gpointer user_data)
{
DB( g_print("\n[ui_scheduled] selection\n") );
ui_arc_manage_update(GTK_WIDGET(gtk_tree_selection_get_tree_view (treeselection)), NULL);
}
-/*
-**
-*/
+
+static void ui_arc_manage_populate_listview(struct ui_arc_manage_data *data)
+{
+gint type;
+
+ DB( g_print("\n[ui_scheduled] populate listview\n") );
+
+ type = radio_get_active(GTK_CONTAINER(data->RA_type)) == 1 ? ARC_TYPE_TEMPLATE : ARC_TYPE_SCHEDULED;
+ ui_arc_listview_populate(data->LV_arc, type);
+ gtk_tree_view_expand_all (GTK_TREE_VIEW(data->LV_arc));
+}
+
+
+
+
static gboolean ui_arc_manage_cleanup(struct ui_arc_manage_data *data, gint result)
{
gboolean doupdate = FALSE;
*/
static void ui_arc_manage_setup(struct ui_arc_manage_data *data)
{
-GtkTreeModel *model;
-GtkTreeIter iter;
-GList *list;
-gint i;
DB( g_print("\n[ui_scheduled] setup\n") );
//hb-glist_populate_treeview(data->tmp_list, data->LV_arc, LST_DEFARC_DATAS, LST_DEFARC_OLDPOS);
//insert all glist item into treeview
- model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_arc));
- i=0;
- list = g_list_first(GLOBALS->arc_list);
- while (list != NULL)
- {
- Archive *item = list->data;
-
- gtk_list_store_append (GTK_LIST_STORE(model), &iter);
- gtk_list_store_set (GTK_LIST_STORE(model), &iter,
- LST_DEFARC_DATAS, item, //data struct
- LST_DEFARC_OLDPOS, i, //oldpos
- -1);
-
- //DB( g_print(" populate_treeview: %d %08x\n", i, list->data) );
-
- i++; list = g_list_next(list);
- }
-
+ ui_arc_manage_populate_listview(data);
+
DB( g_print(" - populate boxentries\n") );
ui_pay_comboboxentry_populate(GTK_COMBO_BOX(data->PO_pay) , GLOBALS->h_pay);
ui_cat_comboboxentry_populate(GTK_COMBO_BOX(data->PO_grp) , GLOBALS->h_cat);
ui_acc_comboboxentry_populate(GTK_COMBO_BOX(data->PO_acc) , GLOBALS->h_acc, ACC_LST_INSERT_NORMAL);
ui_acc_comboboxentry_populate(GTK_COMBO_BOX(data->PO_accto), GLOBALS->h_acc, ACC_LST_INSERT_NORMAL);
-
-
}
static GtkWidget *ui_arc_manage_create_left_txn(struct ui_arc_manage_data *data)
{
-GtkWidget *table, *hbox, *label, *widget;
+GtkWidget *group_grid, *hbox, *label, *widget, *image;
gint row;
-
- table = gtk_table_new (2, 3, FALSE);
- gtk_table_set_row_spacings (GTK_TABLE (table), HB_TABROW_SPACING);
- gtk_table_set_col_spacings (GTK_TABLE (table), HB_TABCOL_SPACING);
+
+ // group :: Transaction detail
+ group_grid = gtk_grid_new ();
+ data->GR_txnleft = group_grid;
+ gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
+ gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
row = 0;
- label = make_label(_("Transaction detail"), 0.0, 0.5);
- gimp_label_set_attributes(GTK_LABEL(label), PANGO_ATTR_WEIGHT, PANGO_WEIGHT_BOLD, -1);
- gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 3, row, row+1);
-
- row++;
- label = make_label(_("_Amount:"), 0.0, 0.5);
- gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-
- hbox = gtk_hbox_new (FALSE, 0);
-
- widget = gtk_button_new_with_label("+/-");
- data->BT_amount = widget;
- gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
- gtk_widget_set_tooltip_text(widget, _("Toggle amount sign"));
-
- widget = make_amount(label);
- data->ST_amount = widget;
- gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
-
- gtk_table_attach (GTK_TABLE (table), hbox, 2, 3, row, row+1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+ label = make_label_widget(_("_Amount:"));
+ gtk_grid_attach (GTK_GRID (group_grid), label, 0, row, 1, 1);
+ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+ gtk_grid_attach (GTK_GRID (group_grid), hbox, 1, row, 1, 1);
+
+ widget = make_amount(label);
+ data->ST_amount = widget;
+ gtk_entry_set_icon_from_icon_name(GTK_ENTRY(widget), GTK_ENTRY_ICON_PRIMARY, ICONNAME_HB_TOGGLE_SIGN);
+ gtk_entry_set_icon_tooltip_text(GTK_ENTRY(widget), GTK_ENTRY_ICON_PRIMARY, _("Toggle amount sign"));
+ gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
+
+ image = gtk_image_new_from_icon_name (ICONNAME_HB_BUTTON_SPLIT, GTK_ICON_SIZE_MENU);
+ widget = gtk_button_new();
+ g_object_set (widget, "image", image, NULL);
+ data->BT_split = widget;
+ gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
+ gtk_widget_set_tooltip_text(widget, _("Transaction splits"));
row++;
- label = make_label(_("Pay_ment:"), 0.0, 0.5);
- gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+ label = make_label_widget(_("Pay_ment:"));
+ gtk_grid_attach (GTK_GRID (group_grid), label, 0, row, 1, 1);
widget = make_paymode(label);
data->NU_mode = widget;
- gtk_table_attach (GTK_TABLE (table), widget, 2, 3, row, row+1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+ gtk_widget_set_halign (widget, GTK_ALIGN_START);
+ gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 1, 1);
row++;
widget = gtk_check_button_new_with_mnemonic(_("Of notebook _2"));
data->CM_cheque = widget;
- gtk_table_attach (GTK_TABLE (table), widget, 1, 3, row, row+1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+ gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 2, 1);
/* info should be here some day */
row++;
- label = make_label(_("A_ccount:"), 0.0, 0.5);
- gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+ label = make_label_widget(_("A_ccount:"));
+ gtk_grid_attach (GTK_GRID (group_grid), label, 0, row, 1, 1);
widget = ui_acc_comboboxentry_new(label);
data->PO_acc = widget;
- gtk_table_attach (GTK_TABLE (table), widget, 2, 3, row, row+1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+ gtk_widget_set_hexpand (widget, TRUE);
+ gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 1, 1);
row++;
- label = make_label(_("_To account:"), 0.0, 0.5);
+ label = make_label_widget(_("_To account:"));
data->LB_accto = label;
- gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+ gtk_grid_attach (GTK_GRID (group_grid), label, 0, row, 1, 1);
widget = ui_acc_comboboxentry_new(label);
data->PO_accto = widget;
- gtk_table_attach (GTK_TABLE (table), widget, 2, 3, row, row+1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-
- return table;
-}
-
-
-static GtkWidget *ui_arc_manage_create_right_txn(struct ui_arc_manage_data *data)
-{
-GtkWidget *table, *label, *widget;
-gint row;
-
- table = gtk_table_new (2, 3, FALSE);
- gtk_table_set_row_spacings (GTK_TABLE (table), HB_TABROW_SPACING);
- gtk_table_set_col_spacings (GTK_TABLE (table), HB_TABCOL_SPACING);
-
- row = 0;
- // keep this to avoid a shift
- label = make_label(NULL, 0.0, 0.5);
- gimp_label_set_attributes(GTK_LABEL(label), PANGO_ATTR_WEIGHT, PANGO_WEIGHT_BOLD, -1);
- gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 3, row, row+1);
+ gtk_widget_set_hexpand (widget, TRUE);
+ gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 1, 1);
row++;
- label = make_label(_("_Payee:"), 0.0, 0.5);
- gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+ label = make_label_widget(_("_Payee:"));
+ gtk_grid_attach (GTK_GRID (group_grid), label, 0, row, 1, 1);
widget = ui_pay_comboboxentry_new(label);
data->PO_pay = widget;
- gtk_table_attach (GTK_TABLE (table), widget, 2, 3, row, row+1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+ gtk_widget_set_hexpand (widget, TRUE);
+ gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 1, 1);
row++;
- label = make_label(_("_Category:"), 0.0, 0.5);
- gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+ label = make_label_widget(_("_Category:"));
+ gtk_grid_attach (GTK_GRID (group_grid), label, 0, row, 1, 1);
widget = ui_cat_comboboxentry_new(label);
data->PO_grp = widget;
- gtk_table_attach (GTK_TABLE (table), widget, 2, 3, row, row+1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+ gtk_widget_set_hexpand (widget, TRUE);
+ gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 1, 1);
row++;
- label = make_label(_("_Memo:"), 0.0, 0.5);
- gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+ label = make_label_widget(_("_Status:"));
+ gtk_grid_attach (GTK_GRID (group_grid), label, 0, row, 1, 1);
+ widget = make_radio(CYA_TXN_STATUS, TRUE, GTK_ORIENTATION_HORIZONTAL);
+ data->RA_status = widget;
+ gtk_widget_set_halign (widget, GTK_ALIGN_START);
+ gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 1, 1);
+
+ row++;
+ label = make_label_widget(_("_Memo:"));
+ gtk_grid_attach (GTK_GRID (group_grid), label, 0, row, 1, 1);
widget = make_string(label);
+ gtk_widget_set_hexpand (widget, TRUE);
data->ST_word = widget;
- gtk_table_attach (GTK_TABLE (table), widget, 2, 3, row, row+1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+ gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 1, 1);
/* tags should be here some day */
- row++;
- widget = gtk_check_button_new_with_mnemonic (_("_Reconciled"));
- data->CM_valid = widget;
- gtk_table_attach (GTK_TABLE (table), widget, 1, 3, row, row+1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-
- row++;
- widget = gtk_check_button_new_with_mnemonic (_("Re_mind"));
- data->CM_remind = widget;
- gtk_table_attach (GTK_TABLE (table), widget, 1, 3, row, row+1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-
- return table;
+ return group_grid;
}
static GtkWidget *ui_arc_manage_create_scheduling(struct ui_arc_manage_data *data)
{
-GtkWidget *table, *hbox, *label, *widget;
+GtkWidget *group_grid, *hbox, *label, *widget;
gint row;
- table = gtk_table_new (2, 3, FALSE);
- gtk_table_set_row_spacings (GTK_TABLE (table), HB_TABROW_SPACING);
- gtk_table_set_col_spacings (GTK_TABLE (table), HB_TABCOL_SPACING);
+ // group :: Scheduled insertion
+ 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);
- row = 0;
- label = make_label(_("Scheduled insertion"), 0.0, 0.5);
- gimp_label_set_attributes(GTK_LABEL(label), PANGO_ATTR_WEIGHT, PANGO_WEIGHT_BOLD, -1);
- gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 3, row, row+1);
+ label = make_label_group(_("Scheduled insertion"));
+ data->LB_schedinsert = label;
+ gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
- row++;
+ row = 1;
widget = gtk_check_button_new_with_mnemonic(_("_Activate"));
data->CM_auto = widget;
- gtk_table_attach (GTK_TABLE (table), widget, 1, 3, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+ gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 2, 1);
row++;
- label = make_label(_("Next _date:"), 0.0, 0.5);
- gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
- widget = gtk_dateentry_new();
+ label = gtk_label_new_with_mnemonic (_("Next _date:"));
+ data->LB_next = label;
+ gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
+ widget = gtk_date_entry_new();
data->PO_next = widget;
- gtk_table_attach (GTK_TABLE (table), widget, 2, 3, row, row+1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+ gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
row++;
- label = make_label(_("Ever_y:"), 0.0, 0.5);
- gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+ label = make_label_widget(_("Ever_y:"));
+ data->LB_every = label;
+ gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
- hbox = gtk_hbox_new(FALSE, HB_BOX_SPACING);
- gtk_table_attach (GTK_TABLE (table), hbox, 2, 3, row, row+1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_SMALL);
+ gtk_grid_attach (GTK_GRID (group_grid), hbox, 2, row, 1, 1);
widget = make_numeric(label, 1, 100);
data->NB_every = widget;
gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
row++;
- label = make_label(_("Week end:"), 0.0, 0.5);
- gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+ label = make_label_widget(_("Week end:"));
+ data->LB_weekend = label;
+ gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
- widget = make_radio(NULL, CYA_SCHED_WEEKEND, GTK_ORIENTATION_HORIZONTAL);
+ widget = make_radio(CYA_SCHED_WEEKEND, FALSE, GTK_ORIENTATION_HORIZONTAL);
data->CY_weekend = widget;
- gtk_table_attach (GTK_TABLE (table), widget, 2, 3, row, row+1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+ gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
row++;
- hbox = gtk_hbox_new(FALSE, HB_BOX_SPACING);
- gtk_table_attach (GTK_TABLE (table), hbox, 1, 3, row, row+1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_SMALL);
+ gtk_grid_attach (GTK_GRID (group_grid), hbox, 1, row, 3, 1);
widget = gtk_check_button_new_with_mnemonic(_("_Stop after:"));
data->CM_limit = widget;
gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
label = gtk_label_new_with_mnemonic (_("posts"));
+ data->LB_posts = label;
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
- return table;
+ return group_grid;
+}
+
+static void ui_arc_manage_type_changed_cb (GtkToggleButton *button, gpointer user_data)
+{
+ ui_arc_manage_populate_listview(user_data);
+ //g_print(" toggle type=%d\n", gtk_toggle_button_get_active(button));
}
-GtkWidget *ui_arc_manage_dialog (void)
+GtkWidget *ui_arc_manage_dialog (Archive *ext_arc)
{
struct ui_arc_manage_data data;
-GtkWidget *window, *content, *mainbox, *hbox, *vbox, *table;
-GtkWidget *widget, *treeview, *scrollwin;
-GtkWidget *alignment, *hpaned;
-gint row;
+GtkWidget *dialog, *content_area, *table, *bbox;
+GtkWidget *content_grid, *group_grid, *hgrid, *treeview, *scrollwin;
+GtkWidget *widget, *hpaned;
+gint w, h, row;
- window = gtk_dialog_new_with_buttons (_("Manage scheduled/template transactions"),
+ dialog = gtk_dialog_new_with_buttons (_("Manage scheduled/template transactions"),
GTK_WINDOW(GLOBALS->mainwindow),
0,
- GTK_STOCK_CLOSE,
+ _("_Close"),
GTK_RESPONSE_ACCEPT,
NULL);
- //homebank_window_set_icon_from_file(GTK_WINDOW (window), "archive.svg");
- gtk_window_set_icon_name(GTK_WINDOW (window), HB_STOCK_ARCHIVE);
+ data.window = dialog;
+
+ gtk_window_set_icon_name(GTK_WINDOW (dialog), ICONNAME_HB_ARCHIVE);
+
+ //set a nice dialog size
+ gtk_window_get_size(GTK_WINDOW(GLOBALS->mainwindow), &w, &h);
+ gtk_window_set_default_size (GTK_WINDOW(dialog), -1, h/PHI);
- //store our window private data
- g_object_set_data(G_OBJECT(window), "inst_data", (gpointer)&data);
- DB( g_print("\n[ui_scheduled] window=%p, inst_data=%p\n", window, &data) );
+
+ //store our dialog private data
+ g_object_set_data(G_OBJECT(dialog), "inst_data", (gpointer)&data);
+ DB( g_print("\n[ui_scheduled] dialog=%p, inst_data=%p\n", dialog, &data) );
+
+ //dialog content
+ content_area = gtk_dialog_get_content_area(GTK_DIALOG (dialog)); // return a vbox
+
+ //our table
+ table = gtk_grid_new ();
+ gtk_grid_set_row_spacing (GTK_GRID (table), SPACING_MEDIUM);
+ gtk_grid_set_column_spacing (GTK_GRID (table), SPACING_MEDIUM);
+ g_object_set(table, "margin", SPACING_MEDIUM, NULL);
+ gtk_box_pack_start (GTK_BOX (content_area), table, TRUE, TRUE, 0);
+
+ row = 0;
+ bbox = make_radio(CYA_ARCHIVE_TYPE, TRUE, GTK_ORIENTATION_HORIZONTAL);
+ data.RA_type = bbox;
+ gtk_widget_set_halign (bbox, GTK_ALIGN_CENTER);
+ gtk_grid_attach (GTK_GRID (table), bbox, 0, row, 2, 1);
- //window contents
- content = gtk_dialog_get_content_area(GTK_DIALOG (window));
- mainbox = gtk_hbox_new (FALSE, HB_BOX_SPACING);
- gtk_box_pack_start (GTK_BOX (content), mainbox, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER(mainbox), HB_MAINBOX_SPACING);
+ widget = radio_get_nth_widget(GTK_CONTAINER(bbox), 1);
+ if(widget)
+ g_signal_connect (widget, "toggled", G_CALLBACK (ui_arc_manage_type_changed_cb), &data);
- hpaned = gtk_hpaned_new();
- gtk_box_pack_start (GTK_BOX (mainbox), hpaned, TRUE, TRUE, 0);
+ row++;
+ hpaned = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
+ //gtk_container_set_border_width (GTK_CONTAINER(hpaned), SPACING_MEDIUM);
+ gtk_grid_attach (GTK_GRID (table), hpaned, 0, row, 2, 1);
+
/* left area */
- table = gtk_table_new (2, 2, FALSE);
- gtk_table_set_row_spacings (GTK_TABLE (table), HB_TABROW_SPACING);
- gtk_table_set_col_spacings (GTK_TABLE (table), HB_TABCOL_SPACING);
- gtk_paned_pack1 (GTK_PANED(hpaned), table, FALSE, FALSE);
+ hgrid = gtk_grid_new ();
+ gtk_grid_set_row_spacing (GTK_GRID (hgrid), SPACING_SMALL);
+ gtk_grid_set_column_spacing (GTK_GRID (hgrid), SPACING_MEDIUM);
+ gtk_widget_set_margin_right(hgrid, SPACING_SMALL);
+ gtk_paned_pack1 (GTK_PANED(hpaned), hgrid, FALSE, FALSE);
// listview
- row = 0;
scrollwin = gtk_scrolled_window_new(NULL,NULL);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin), GTK_SHADOW_ETCHED_IN);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
data.LV_arc = treeview;
gtk_widget_set_size_request(treeview, HB_MINWIDTH_LIST, -1);
gtk_container_add(GTK_CONTAINER(scrollwin), treeview);
- gtk_table_attach_defaults (GTK_TABLE (table), scrollwin, 0, 2, row, row+1);
-
- // tools buttons
- row++;
- widget = gtk_button_new_from_stock(GTK_STOCK_ADD);
+ gtk_widget_set_hexpand (scrollwin, TRUE);
+ gtk_widget_set_vexpand (scrollwin, TRUE);
+ gtk_grid_attach (GTK_GRID (hgrid), scrollwin, 0, 0, 2, 1);
+
+ widget = gtk_button_new_with_mnemonic(_("_Add"));
data.BT_add = widget;
- gtk_table_attach (GTK_TABLE (table), widget, 0, 1, row, row+1, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (0), 0, 0);
- widget = gtk_button_new_from_stock(GTK_STOCK_REMOVE);
+ gtk_grid_attach (GTK_GRID (hgrid), widget, 0, 1, 1, 1);
+
+ widget = gtk_button_new_with_mnemonic(_("_Delete"));
data.BT_rem = widget;
- gtk_table_attach (GTK_TABLE (table), widget, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (0), 0, 0);
+ gtk_grid_attach (GTK_GRID (hgrid), widget, 1, 1, 1, 1);
+
/* right area */
- vbox = gtk_vbox_new (FALSE, HB_BOX_SPACING);
- //gtk_box_pack_start (GTK_BOX (mainbox), vbox, TRUE, TRUE, 0);
- gtk_paned_pack2 (GTK_PANED(hpaned), vbox, FALSE, FALSE);
+ content_grid = gtk_grid_new();
+ gtk_grid_set_row_spacing (GTK_GRID (content_grid), SPACING_LARGE);
+ gtk_orientable_set_orientation(GTK_ORIENTABLE(content_grid), GTK_ORIENTATION_VERTICAL);
+ //gtk_container_set_border_width (GTK_CONTAINER(content_grid), SPACING_MEDIUM);
+ gtk_widget_set_margin_left(content_grid, SPACING_SMALL);
+ gtk_paned_pack2 (GTK_PANED(hpaned), content_grid, FALSE, FALSE);
+
+ group_grid = ui_arc_manage_create_left_txn(&data);
+ //gtk_widget_set_hexpand (GTK_WIDGET(group_grid), FALSE);
+ gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, 0, 1, 1);
- hbox = gtk_hbox_new (TRUE, HB_HSPACE_SPACING);
- gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
-
-
- widget = ui_arc_manage_create_left_txn(&data);
- // gtk_alignment_new(xalign, yalign, xscale, yscale)
- alignment = gtk_alignment_new(0.0, 0.0, 1.0, 0.0);
- gtk_container_add(GTK_CONTAINER(alignment), widget);
- gtk_box_pack_start (GTK_BOX (hbox), alignment, TRUE, TRUE, 0);
-
- widget = ui_arc_manage_create_right_txn(&data);
- // gtk_alignment_new(xalign, yalign, xscale, yscale)
- alignment = gtk_alignment_new(0.0, 0.0, 1.0, 0.0);
- gtk_container_add(GTK_CONTAINER(alignment), widget);
- gtk_box_pack_start (GTK_BOX (hbox), alignment, TRUE, TRUE, 0);
-
/* sheduling */
- widget = ui_arc_manage_create_scheduling(&data);
- // gtk_alignment_new(xalign, yalign, xscale, yscale)
- alignment = gtk_alignment_new(0.0, 0.0, 0.20, 0.0);
- gtk_container_add(GTK_CONTAINER(alignment), widget);
- gtk_box_pack_start (GTK_BOX (vbox), alignment, TRUE, TRUE, 0);
+ group_grid = ui_arc_manage_create_scheduling(&data);
+ gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, 1, 1, 1);
/* set default periodicity to month */
//todo: move elsewhere
gtk_combo_box_set_active(GTK_COMBO_BOX(data.CY_unit), 2);
-
+ gtk_widget_show_all(content_area);
+ gtk_widget_hide(data.CM_cheque);
+ gtk_widget_hide(data.PO_accto);
//connect all our signals
- g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window);
+ g_signal_connect (dialog, "destroy", G_CALLBACK (gtk_widget_destroyed), &dialog);
g_signal_connect (gtk_tree_view_get_selection(GTK_TREE_VIEW(data.LV_arc)), "changed", G_CALLBACK (ui_arc_manage_selection), NULL);
- g_signal_connect (G_OBJECT (data.BT_amount), "clicked", G_CALLBACK (ui_arc_manage_toggleamount), NULL);
+ g_signal_connect (G_OBJECT (data.ST_amount), "icon-release", G_CALLBACK (ui_arc_manage_toggleamount), NULL);
g_signal_connect (G_OBJECT (data.BT_add), "clicked", G_CALLBACK (ui_arc_manage_add), NULL);
- g_signal_connect (G_OBJECT (data.BT_rem), "clicked", G_CALLBACK (ui_arc_manage_remove), NULL);
+ g_signal_connect (G_OBJECT (data.BT_rem), "clicked", G_CALLBACK (ui_arc_manage_delete), NULL);
data.handler_id[HID_ARC_MEMO] = g_signal_connect (G_OBJECT (data.ST_word), "changed", G_CALLBACK (ui_arc_manage_rename), NULL);
g_signal_connect (data.NU_mode, "changed", G_CALLBACK (ui_arc_manage_paymode), NULL);
g_signal_connect (data.PO_acc, "changed", G_CALLBACK (ui_arc_manage_update_accto), NULL);
- data.handler_id[HID_ARC_VALID] = g_signal_connect (data.CM_valid , "toggled", G_CALLBACK (ui_arc_manage_togglestatus), GINT_TO_POINTER(HID_ARC_VALID));
- data.handler_id[HID_ARC_REMIND] = g_signal_connect (data.CM_remind, "toggled", G_CALLBACK (ui_arc_manage_togglestatus), GINT_TO_POINTER(HID_ARC_REMIND));
+ //data.handler_id[HID_ARC_VALID] = g_signal_connect (data.CM_valid , "toggled", G_CALLBACK (ui_arc_manage_togglestatus), GINT_TO_POINTER(HID_ARC_VALID));
+ //data.handler_id[HID_ARC_REMIND] = g_signal_connect (data.CM_remind, "toggled", G_CALLBACK (ui_arc_manage_togglestatus), GINT_TO_POINTER(HID_ARC_REMIND));
g_signal_connect (data.CM_auto, "toggled", G_CALLBACK (ui_arc_manage_scheduled), NULL);
g_signal_connect (data.CM_limit, "toggled", G_CALLBACK (ui_arc_manage_scheduled), NULL);
- //setup, init and show window
+ g_signal_connect (G_OBJECT (data.BT_split), "clicked", G_CALLBACK (defarchive_button_split_cb), NULL);
+
+ //setup, init and show dialog
ui_arc_manage_setup(&data);
ui_arc_manage_update(data.LV_arc, NULL);
- gtk_widget_show_all (window);
+ gtk_widget_show (dialog);
+
+ if(ext_arc != NULL)
+ ui_arc_listview_select_by_pointer(GTK_TREE_VIEW(data.LV_arc), ext_arc);
//wait for the user
- gint result = gtk_dialog_run (GTK_DIALOG (window));
+ gint result = gtk_dialog_run (GTK_DIALOG (dialog));
switch (result)
{
// cleanup and destroy
ui_arc_manage_cleanup(&data, result);
- gtk_widget_destroy (window);
+ gtk_widget_destroy (dialog);
return NULL;
}