/* HomeBank -- Free, easy, personal accounting for everyone.
* Copyright (C) 1995-2019 Maxime DOYEN
*
* This file is part of HomeBank.
*
* HomeBank is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* HomeBank is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
#include "homebank.h"
#include "ui-filter.h"
#include "ui-account.h"
#include "ui-payee.h"
#include "ui-category.h"
#include "gtk-dateentry.h"
/****************************************************************************/
/* Debug macros */
/****************************************************************************/
#define MYDEBUG 0
#if MYDEBUG
#define DB(x) (x);
#else
#define DB(x);
#endif
/* our global datas */
extern struct HomeBank *GLOBALS;
extern gchar *CYA_FLT_TYPE[];
extern gchar *CYA_FLT_STATUS[];
extern gchar *CYA_FLT_RANGE[];
extern gchar *CYA_SELECT[];
extern char *paymode_label_names[];
extern gchar *nainex_label_names[];
/* = = = = = = = = = = = = = = = = = = = = */
static void ui_flt_panel_category_get(struct ui_flt_manage_data *data)
{
gint i;
DB( g_print("(ui_flt_panel_category) get\n") );
if(data->filter !=NULL)
{
GtkTreeModel *model;
//GtkTreeSelection *selection;
GtkTreeIter iter, child;
gint n_child;
gboolean valid;
gboolean toggled;
// category
DB( g_print(" category\n") );
model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_cat));
//selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_cat));
i=0; valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter);
while (valid)
{
Category *catitem;
gtk_tree_model_get (model, &iter,
LST_DEFCAT_TOGGLE, &toggled,
LST_DEFCAT_DATAS, &catitem,
-1);
//data->filter->cat[i] = gtk_tree_selection_iter_is_selected(selection, &iter);
//data->filter->cat[i] = toggled;
catitem->flt_select = toggled;
n_child = gtk_tree_model_iter_n_children (GTK_TREE_MODEL(model), &iter);
gtk_tree_model_iter_children (GTK_TREE_MODEL(model), &child, &iter);
while(n_child > 0)
{
i++;
gtk_tree_model_get (model, &child,
LST_DEFCAT_TOGGLE, &toggled,
LST_DEFCAT_DATAS, &catitem,
-1);
//data->filter->cat[i] = toggled;
//data->filter->cat[i] = gtk_tree_selection_iter_is_selected(selection, &child);
catitem->flt_select = toggled;
n_child--;
gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &child);
}
/* Make iter point to the next row in the list store */
i++; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
}
}
}
static void ui_flt_panel_category_set(struct ui_flt_manage_data *data)
{
DB( g_print("(ui_flt_panel_category) set\n") );
if(data->filter != NULL)
{
GtkTreeModel *model;
//GtkTreeSelection *selection;
GtkTreeIter iter, child;
gint n_child;
gboolean valid;
gint i;
// category
DB( g_print(" category\n") );
model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_cat));
//selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_cat));
i=0; valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter);
while (valid)
{
Category *catitem;
gtk_tree_model_get (model, &iter,
LST_DEFCAT_DATAS, &catitem,
-1);
if(catitem->flt_select == TRUE)
gtk_tree_store_set (GTK_TREE_STORE (model), &iter, LST_DEFCAT_TOGGLE, TRUE, -1);
n_child = gtk_tree_model_iter_n_children (GTK_TREE_MODEL(model), &iter);
gtk_tree_model_iter_children (GTK_TREE_MODEL(model), &child, &iter);
while(n_child > 0)
{
i++;
gtk_tree_model_get (model, &child,
LST_DEFCAT_DATAS, &catitem,
-1);
if(catitem->flt_select == TRUE)
gtk_tree_store_set (GTK_TREE_STORE (model), &child, LST_DEFCAT_TOGGLE, TRUE, -1);
n_child--;
gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &child);
}
/* Make iter point to the next row in the list store */
i++; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
}
}
}
static void ui_flt_manage_cat_select(GtkWidget *widget, gpointer user_data)
{
struct ui_flt_manage_data *data;
gint select = GPOINTER_TO_INT(user_data);
GtkTreeModel *model;
GtkTreeIter iter, child;
gboolean valid;
gint n_child;
gboolean toggle;
DB( g_print("(ui_flt_manage) pay select\n") );
data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_cat));
valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter);
while (valid)
{
switch(select)
{
case BUTTON_ALL:
gtk_tree_store_set (GTK_TREE_STORE (model), &iter, LST_DEFCAT_TOGGLE, TRUE, -1);
break;
case BUTTON_NONE:
gtk_tree_store_set (GTK_TREE_STORE (model), &iter, LST_DEFCAT_TOGGLE, FALSE, -1);
break;
case BUTTON_INVERT:
gtk_tree_model_get (model, &iter, LST_DEFCAT_TOGGLE, &toggle, -1);
toggle ^= 1;
gtk_tree_store_set (GTK_TREE_STORE (model), &iter, LST_DEFCAT_TOGGLE, toggle, -1);
break;
}
n_child = gtk_tree_model_iter_n_children (GTK_TREE_MODEL(model), &iter);
gtk_tree_model_iter_children (GTK_TREE_MODEL(model), &child, &iter);
while(n_child > 0)
{
switch(select)
{
case BUTTON_ALL:
gtk_tree_store_set (GTK_TREE_STORE (model), &child, LST_DEFCAT_TOGGLE, TRUE, -1);
break;
case BUTTON_NONE:
gtk_tree_store_set (GTK_TREE_STORE (model), &child, LST_DEFCAT_TOGGLE, FALSE, -1);
break;
case BUTTON_INVERT:
gtk_tree_model_get (model, &child, LST_DEFCAT_TOGGLE, &toggle, -1);
toggle ^= 1;
gtk_tree_store_set (GTK_TREE_STORE (model), &child, LST_DEFCAT_TOGGLE, toggle, -1);
break;
}
n_child--;
gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &child);
}
valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
}
}
static gboolean
ui_flt_panel_category_activate_link (GtkWidget *label,
const gchar *uri,
gpointer data)
{
DB( g_print(" comboboxlink '%s' \n", uri) );
if (g_strcmp0 (uri, "all") == 0)
{
ui_flt_manage_cat_select(label, GINT_TO_POINTER(BUTTON_ALL) );
}
else
if (g_strcmp0 (uri, "non") == 0)
{
ui_flt_manage_cat_select(label, GINT_TO_POINTER(BUTTON_NONE) );
}
else
if (g_strcmp0 (uri, "inv") == 0)
{
ui_flt_manage_cat_select(label, GINT_TO_POINTER(BUTTON_INVERT) );
}
return TRUE;
}
static GtkWidget *
ui_flt_panel_category_new (struct ui_flt_manage_data *data)
{
GtkWidget *scrollwin, *hbox, *vbox, *label;
vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL);
label = make_label (_("Categories"), 0, 0);
gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_SCALE, PANGO_SCALE_LARGE, -1);
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_MEDIUM);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
label = make_label (_("Select:"), 0, 0.5);
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
label = make_clicklabel("all", _("All"));
data->BT_cat[BUTTON_ALL] = label;
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_category_activate_link), NULL);
label = make_clicklabel("non", _("None"));
data->BT_cat[BUTTON_NONE] = label;
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_category_activate_link), NULL);
label = make_clicklabel("inv", _("Invert"));
data->BT_cat[BUTTON_INVERT] = label;
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_category_activate_link), NULL);
scrollwin = gtk_scrolled_window_new(NULL,NULL);
gtk_box_pack_start (GTK_BOX (vbox), scrollwin, TRUE, TRUE, 0);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin), GTK_SHADOW_ETCHED_IN);
//gtk_container_set_border_width (GTK_CONTAINER(scrollwin), SPACING_SMALL);
data->LV_cat = (GtkWidget *)ui_cat_listview_new(TRUE, FALSE);
gtk_container_add(GTK_CONTAINER(scrollwin), data->LV_cat);
return(vbox);
}
/* = = = = = = = = = = = = = = = = */
static void ui_flt_manage_pay_select(GtkWidget *widget, gpointer user_data)
{
struct ui_flt_manage_data *data;
gint select = GPOINTER_TO_INT(user_data);
GtkTreeModel *model;
GtkTreeIter iter;
gboolean valid;
gboolean toggle;
DB( g_print("(ui_flt_manage) pay select\n") );
data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_pay));
valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter);
while (valid)
{
switch(select)
{
case BUTTON_ALL:
gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFPAY_TOGGLE, TRUE, -1);
break;
case BUTTON_NONE:
gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFPAY_TOGGLE, FALSE, -1);
break;
case BUTTON_INVERT:
gtk_tree_model_get (model, &iter, LST_DEFPAY_TOGGLE, &toggle, -1);
toggle ^= 1;
gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFPAY_TOGGLE, toggle, -1);
break;
}
valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
}
}
static gboolean
ui_flt_panel_payee_activate_link (GtkWidget *label,
const gchar *uri,
gpointer data)
{
DB( g_print(" comboboxlink '%s' \n", uri) );
if (g_strcmp0 (uri, "all") == 0)
{
ui_flt_manage_pay_select(label, GINT_TO_POINTER(BUTTON_ALL) );
}
else
if (g_strcmp0 (uri, "non") == 0)
{
ui_flt_manage_pay_select(label, GINT_TO_POINTER(BUTTON_NONE) );
}
else
if (g_strcmp0 (uri, "inv") == 0)
{
ui_flt_manage_pay_select(label, GINT_TO_POINTER(BUTTON_INVERT) );
}
return TRUE;
}
static GtkWidget *
ui_flt_panel_payee_new (struct ui_flt_manage_data *data)
{
GtkWidget *scrollwin, *hbox, *vbox, *label;
vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL);
label = make_label (_("Payees"), 0, 0);
gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_SCALE, PANGO_SCALE_LARGE, -1);
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_MEDIUM);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
label = make_label (_("Select:"), 0, 0.5);
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
label = make_clicklabel("all", _("All"));
data->BT_pay[BUTTON_ALL] = label;
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_payee_activate_link), NULL);
label = make_clicklabel("non", _("None"));
data->BT_pay[BUTTON_NONE] = label;
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_payee_activate_link), NULL);
label = make_clicklabel("inv", _("Invert"));
data->BT_pay[BUTTON_INVERT] = label;
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_payee_activate_link), NULL);
scrollwin = gtk_scrolled_window_new(NULL,NULL);
gtk_box_pack_start (GTK_BOX (vbox), scrollwin, TRUE, TRUE, 0);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin), GTK_SHADOW_ETCHED_IN);
//gtk_container_set_border_width (GTK_CONTAINER(scrollwin), SPACING_SMALL);
data->LV_pay = (GtkWidget *)ui_pay_listview_new(TRUE, FALSE);
gtk_container_add(GTK_CONTAINER(scrollwin), data->LV_pay);
return(vbox);
}
/* = = = = = = = = = = = = = = = = */
static void ui_flt_manage_acc_select(GtkWidget *widget, gpointer user_data)
{
struct ui_flt_manage_data *data;
gint select = GPOINTER_TO_INT(user_data);
GtkTreeModel *model;
GtkTreeIter iter;
gboolean valid;
gboolean toggle;
DB( g_print("(ui_flt_manage) acc select\n") );
data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_acc));
valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter);
while (valid)
{
switch(select)
{
case BUTTON_ALL:
gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFACC_TOGGLE, TRUE, -1);
break;
case BUTTON_NONE:
gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFACC_TOGGLE, FALSE, -1);
break;
case BUTTON_INVERT:
gtk_tree_model_get (model, &iter, LST_DEFACC_TOGGLE, &toggle, -1);
toggle ^= 1;
gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFACC_TOGGLE, toggle, -1);
break;
}
valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
}
}
static gboolean
ui_flt_panel_account_activate_link (GtkWidget *label,
const gchar *uri,
gpointer data)
{
DB( g_print(" comboboxlink '%s' \n", uri) );
if (g_strcmp0 (uri, "all") == 0)
{
ui_flt_manage_acc_select(label, GINT_TO_POINTER(BUTTON_ALL) );
}
else
if (g_strcmp0 (uri, "non") == 0)
{
ui_flt_manage_acc_select(label, GINT_TO_POINTER(BUTTON_NONE) );
}
else
if (g_strcmp0 (uri, "inv") == 0)
{
ui_flt_manage_acc_select(label, GINT_TO_POINTER(BUTTON_INVERT) );
}
return TRUE;
}
static GtkWidget *
ui_flt_panel_account_new (struct ui_flt_manage_data *data)
{
GtkWidget *scrollwin, *hbox, *vbox, *label;
vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL);
label = make_label (_("Accounts"), 0, 0);
gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_SCALE, PANGO_SCALE_LARGE, -1);
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_MEDIUM);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
label = make_label (_("Select:"), 0, 0.5);
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
label = make_clicklabel("all", _("All"));
data->BT_acc[BUTTON_ALL] = label;
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_account_activate_link), NULL);
label = make_clicklabel("non", _("None"));
data->BT_acc[BUTTON_NONE] = label;
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_account_activate_link), NULL);
label = make_clicklabel("inv", _("Invert"));
data->BT_acc[BUTTON_INVERT] = label;
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_account_activate_link), NULL);
scrollwin = gtk_scrolled_window_new(NULL,NULL);
gtk_box_pack_start (GTK_BOX (vbox), scrollwin, TRUE, TRUE, 0);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin), GTK_SHADOW_ETCHED_IN);
//gtk_container_set_border_width (GTK_CONTAINER(scrollwin), SPACING_SMALL);
data->LV_acc = (GtkWidget *)ui_acc_listview_new(TRUE);
gtk_container_add(GTK_CONTAINER(scrollwin), data->LV_acc);
return(vbox);
}
/* = = = = = = = = = = = = = = = = */
/*
**
*/
static void ui_flt_manage_option_update(GtkWidget *widget, gpointer user_data)
{
struct ui_flt_manage_data *data;
gint active, i;
gboolean sensitive;
DB( g_print("(ui_flt_manage) update\n") );
data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
// status
active = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_option[FILTER_STATUS]));
sensitive = active == 0 ? FALSE : TRUE;
gtk_widget_set_sensitive(data->CM_reconciled, sensitive);
gtk_widget_set_sensitive(data->CM_cleared, sensitive);
// date
active = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_option[FILTER_DATE]));
sensitive = active == 0 ? FALSE : TRUE;
gtk_widget_set_sensitive(data->PO_mindate, sensitive);
gtk_widget_set_sensitive(data->PO_maxdate, sensitive);
gtk_widget_set_sensitive(data->CY_month, sensitive);
gtk_widget_set_sensitive(data->NB_year, sensitive);
// amount
active = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_option[FILTER_AMOUNT]));
sensitive = active == 0 ? FALSE : TRUE;
gtk_widget_set_sensitive(data->ST_minamount, sensitive);
gtk_widget_set_sensitive(data->ST_maxamount, sensitive);
// text
active = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_option[FILTER_TEXT]));
sensitive = active == 0 ? FALSE : TRUE;
gtk_widget_set_sensitive(data->CM_exact, sensitive);
gtk_widget_set_sensitive(data->ST_memo, sensitive);
gtk_widget_set_sensitive(data->ST_info, sensitive);
gtk_widget_set_sensitive(data->ST_tag, sensitive);
//paymode
active = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_option[FILTER_PAYMODE]));
sensitive = active == 0 ? FALSE : TRUE;
for(i=0;iCM_paymode[i], sensitive);
}
//account
if(data->show_account == TRUE)
{
active = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_option[FILTER_ACCOUNT]));
sensitive = active == 0 ? FALSE : TRUE;
gtk_widget_set_sensitive(data->LV_acc, sensitive);
for(i=0;iBT_acc[i], sensitive);
}
}
//payee
active = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_option[FILTER_PAYEE]));
sensitive = active == 0 ? FALSE : TRUE;
gtk_widget_set_sensitive(data->LV_pay, sensitive);
for(i=0;iBT_pay[i], sensitive);
}
//category
active = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_option[FILTER_CATEGORY]));
sensitive = active == 0 ? FALSE : TRUE;
gtk_widget_set_sensitive(data->LV_cat, sensitive);
for(i=0;iBT_cat[i], sensitive);
}
}
/*
**
*/
static void ui_flt_manage_get(struct ui_flt_manage_data *data)
{
gint i;
gchar *txt;
DB( g_print("(ui_flt_manage) get\n") );
if(data->filter !=NULL)
{
GtkTreeModel *model;
//GtkTreeSelection *selection;
GtkTreeIter iter;
gboolean valid;
gboolean toggled;
for(i=0;ishow_account == FALSE && i == FILTER_ACCOUNT)
continue;
data->filter->option[i] = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_option[i]));
}
//date
DB( g_print(" date\n") );
data->filter->mindate = gtk_date_entry_get_date(GTK_DATE_ENTRY(data->PO_mindate));
data->filter->maxdate = gtk_date_entry_get_date(GTK_DATE_ENTRY(data->PO_maxdate));
//status
DB( g_print(" status\n") );
data->filter->reconciled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_reconciled));
data->filter->cleared = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_cleared));
data->filter->forceadd = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_forceadd));
data->filter->forcechg = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_forcechg));
data->filter->forceremind = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_forceremind));
//paymode
DB( g_print(" paymode\n") );
for(i=0;ifilter->paymode[i] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_paymode[i]));
//amount
data->filter->minamount = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->ST_minamount));
data->filter->maxamount = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->ST_maxamount));
//text:memo
data->filter->exact = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_exact));
//free any previous string
if( data->filter->memo )
{
g_free(data->filter->memo);
data->filter->memo = NULL;
}
txt = (gchar *)gtk_entry_get_text(GTK_ENTRY(data->ST_memo));
if (txt && *txt) // ignore if entry is empty
{
data->filter->memo = g_strdup(txt);
}
//text:info
//free any previous string
if( data->filter->info )
{
g_free(data->filter->info);
data->filter->info = NULL;
}
txt = (gchar *)gtk_entry_get_text(GTK_ENTRY(data->ST_info));
// ignore if entry is empty
if (txt && *txt)
{
data->filter->info = g_strdup(txt);
}
//text:tag
//free any previous string
if( data->filter->tag )
{
g_free(data->filter->tag);
data->filter->tag = NULL;
}
txt = (gchar *)gtk_entry_get_text(GTK_ENTRY(data->ST_tag));
// ignore if entry is empty
if (txt && *txt)
{
data->filter->tag = g_strdup(txt);
}
// account
if(data->show_account == TRUE)
{
DB( g_print(" account\n") );
model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_acc));
//selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_acc));
i=0; valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter);
while (valid)
{
Account *accitem;
gtk_tree_model_get (model, &iter,
LST_DEFACC_TOGGLE, &toggled,
LST_DEFACC_DATAS, &accitem,
-1);
//data->filter->acc[i] = gtk_tree_selection_iter_is_selected(selection, &iter);
accitem->flt_select = toggled;
/* Make iter point to the next row in the list store */
i++; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
}
}
// payee
DB( g_print(" payee\n") );
model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_pay));
//selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_pay));
i=0; valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter);
while (valid)
{
Payee *payitem;
gtk_tree_model_get (model, &iter,
LST_DEFPAY_TOGGLE, &toggled,
LST_DEFPAY_DATAS, &payitem,
-1);
//data->filter->pay[i] = gtk_tree_selection_iter_is_selected(selection, &iter);
payitem->flt_select = toggled;
/* Make iter point to the next row in the list store */
i++; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
}
// category
DB( g_print(" category\n") );
ui_flt_panel_category_get(data);
// active tab
g_strlcpy(data->filter->last_tab, gtk_stack_get_visible_child_name(GTK_STACK(data->stack)), 8);
DB( g_print(" page is '%s'\n", data->filter->last_tab) );
}
}
/*
**
*/
static void ui_flt_manage_set(struct ui_flt_manage_data *data)
{
DB( g_print("(ui_flt_manage) set\n") );
if(data->filter != NULL)
{
GtkTreeModel *model;
//GtkTreeSelection *selection;
GtkTreeIter iter;
GDate *date;
gboolean valid;
gint i;
DB( g_print(" options\n") );
for(i=0;ishow_account == FALSE && i == FILTER_ACCOUNT)
continue;
gtk_combo_box_set_active(GTK_COMBO_BOX(data->CY_option[i]), data->filter->option[i]);
}
//DB( g_print(" setdate %d to %x\n", data->filter->mindate, data->PO_mindate) );
//DB( g_print(" setdate %d to %x\n", 0, data->PO_mindate) );
//date
DB( g_print(" date\n") );
gtk_date_entry_set_date(GTK_DATE_ENTRY(data->PO_mindate), data->filter->mindate);
gtk_date_entry_set_date(GTK_DATE_ENTRY(data->PO_maxdate), data->filter->maxdate);
date = g_date_new_julian(data->filter->maxdate);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->NB_year), g_date_get_year(date));
g_date_free(date);
//status
DB( g_print(" status\n") );
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_reconciled), data->filter->reconciled);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_forceadd), data->filter->forceadd);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_forcechg), data->filter->forcechg);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_forceremind), data->filter->forceremind);
//paymode
DB( g_print(" paymode\n") );
for(i=0;iCM_paymode[i]), data->filter->paymode[i]);
//amount
gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->ST_minamount), data->filter->minamount);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->ST_maxamount), data->filter->maxamount);
//text
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_exact), data->filter->exact);
gtk_entry_set_text(GTK_ENTRY(data->ST_info), (data->filter->info != NULL) ? data->filter->info : "");
gtk_entry_set_text(GTK_ENTRY(data->ST_memo), (data->filter->memo != NULL) ? data->filter->memo : "");
gtk_entry_set_text(GTK_ENTRY(data->ST_tag), (data->filter->tag != NULL) ? data->filter->tag : "");
//account
if(data->show_account == TRUE)
{
DB( g_print(" account\n") );
model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_acc));
//selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_acc));
i=0; valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter);
while (valid)
{
Account *accitem;
gtk_tree_model_get (model, &iter,
LST_DEFACC_DATAS, &accitem,
-1);
if(accitem->flt_select == TRUE)
//gtk_tree_selection_select_iter(selection, &iter);
gtk_list_store_set (GTK_LIST_STORE (model), &iter,
LST_DEFACC_TOGGLE, TRUE, -1);
/* Make iter point to the next row in the list store */
i++; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
}
}
// payee
DB( g_print(" payee\n") );
model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_pay));
//selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_pay));
i=0; valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter);
while (valid)
{
Payee *payitem;
gtk_tree_model_get (model, &iter,
LST_DEFPAY_DATAS, &payitem,
-1);
if(payitem->flt_select == TRUE)
gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFPAY_TOGGLE, TRUE, -1);
/* Make iter point to the next row in the list store */
i++; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
}
// category
DB( g_print(" category\n") );
ui_flt_panel_category_set(data);
}
}
/*
**
*/
static void ui_flt_manage_clear(GtkWidget *widget, gpointer user_data)
{
struct ui_flt_manage_data *data;
data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(GTK_WIDGET(widget), GTK_TYPE_WINDOW)), "inst_data");
DB( g_print("(ui_flt_manage) clear\n") );
filter_reset(data->filter);
ui_flt_manage_set(data);
}
/*
**
*/
static void ui_flt_manage_setup(struct ui_flt_manage_data *data)
{
DB( g_print("(ui_flt_manage) setup\n") );
if(data->show_account == TRUE && data->LV_acc != NULL)
{
//gtk_tree_selection_set_mode(GTK_TREE_SELECTION(gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_acc))), GTK_SELECTION_MULTIPLE);
ui_acc_listview_populate(data->LV_acc, ACC_LST_INSERT_REPORT);
//populate_view_acc(data->LV_acc, GLOBALS->acc_list, FALSE);
}
if(data->LV_pay)
{
//gtk_tree_selection_set_mode(GTK_TREE_SELECTION(gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_pay))), GTK_SELECTION_MULTIPLE);
ui_pay_listview_populate(data->LV_pay, NULL);
//populate_view_pay(data->LV_pay, GLOBALS->pay_list, FALSE);
}
if(data->LV_cat)
{
//gtk_tree_selection_set_mode(GTK_TREE_SELECTION(gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_cat))), GTK_SELECTION_MULTIPLE);
//populate_view_cat(data->LV_cat, GLOBALS->cat_list, FALSE);
ui_cat_listview_populate(data->LV_cat, CAT_TYPE_ALL);
gtk_tree_view_expand_all (GTK_TREE_VIEW(data->LV_cat));
}
}
static GtkWidget *ui_flt_manage_page_category (struct ui_flt_manage_data *data)
{
GtkWidget *container, *panel, *hbox, *label;
container = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL);
gtk_container_set_border_width (GTK_CONTAINER (container), SPACING_MEDIUM);
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_SMALL);
gtk_box_pack_start (GTK_BOX (container), hbox, FALSE, FALSE, 0);
label = make_label_widget(_("_Option:"));
gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
data->CY_option[FILTER_CATEGORY] = make_nainex(label);
gtk_box_pack_start (GTK_BOX (hbox), data->CY_option[FILTER_CATEGORY], TRUE, TRUE, 0);
panel = ui_flt_panel_category_new(data);
gtk_box_pack_start (GTK_BOX (container), panel, TRUE, TRUE, 0);
return(container);
}
static GtkWidget *ui_flt_manage_page_payee (struct ui_flt_manage_data *data)
{
GtkWidget *container, *panel, *hbox, *label;
container = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL);
gtk_container_set_border_width (GTK_CONTAINER (container), SPACING_MEDIUM);
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_SMALL);
gtk_box_pack_start (GTK_BOX (container), hbox, FALSE, FALSE, 0);
label = make_label_widget(_("_Option:"));
gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
data->CY_option[FILTER_PAYEE] = make_nainex(label);
gtk_box_pack_start (GTK_BOX (hbox), data->CY_option[FILTER_PAYEE], TRUE, TRUE, 0);
panel = ui_flt_panel_payee_new(data);
gtk_box_pack_start (GTK_BOX (container), panel, TRUE, TRUE, 0);
return(container);
}
/*
** account filter
*/
static GtkWidget *ui_flt_manage_page_account (struct ui_flt_manage_data *data)
{
GtkWidget *container, *panel, *hbox, *label;
container = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL);
gtk_container_set_border_width (GTK_CONTAINER (container), SPACING_MEDIUM);
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_SMALL);
gtk_box_pack_start (GTK_BOX (container), hbox, FALSE, FALSE, 0);
label = make_label_widget(_("_Option:"));
gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
data->CY_option[FILTER_ACCOUNT] = make_nainex(label);
gtk_box_pack_start (GTK_BOX (hbox), data->CY_option[FILTER_ACCOUNT], TRUE, TRUE, 0);
panel = ui_flt_panel_account_new(data);
gtk_box_pack_start (GTK_BOX (container), panel, TRUE, TRUE, 0);
return(container);
}
static void get_period_minmax(guint month, guint year, guint32 *mindate, guint32 *maxdate)
{
GDate *date;
date = g_date_new();
if(month)
{
// mindate is month 1, year :: maxdate is last day of month, year
g_date_set_dmy(date, 1, month, year);
*mindate = g_date_get_julian(date);
g_date_add_days(date, g_date_get_days_in_month(month, year));
*maxdate = g_date_get_julian(date)-1;
}
else
{
g_date_set_dmy(date, 1, 1, year);
*mindate = g_date_get_julian(date);
g_date_set_dmy(date, 31, 12, year);
*maxdate = g_date_get_julian(date);
}
g_date_free(date);
}
static void ui_flt_manage_period_change(GtkWidget *widget, gpointer user_data)
{
struct ui_flt_manage_data *data;
gint month, year;
DB( g_print("(ui_flt_manage) period change\n") );
data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
month = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_month));
year = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->NB_year));
DB( g_print(" month=%d, year=%d\n", month, year) );
if(month != 0)
get_period_minmax(month-1, year, &data->filter->mindate, &data->filter->maxdate);
else
get_period_minmax(0, year, &data->filter->mindate, &data->filter->maxdate);
gtk_date_entry_set_date(GTK_DATE_ENTRY(data->PO_mindate), data->filter->mindate);
gtk_date_entry_set_date(GTK_DATE_ENTRY(data->PO_maxdate), data->filter->maxdate);
}
static GtkWidget *ui_flt_manage_part_date(struct ui_flt_manage_data *data)
{
GtkWidget *table, *label;
gint row;
table = gtk_grid_new ();
gtk_grid_set_row_spacing (GTK_GRID (table), SPACING_SMALL);
gtk_grid_set_column_spacing (GTK_GRID (table), SPACING_MEDIUM);
gtk_container_set_border_width(GTK_CONTAINER(table), SPACING_MEDIUM);
row = 0;
label = make_label_widget(_("_Option:"));
//----------------------------------------- l, r, t, b
gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
data->CY_option[FILTER_DATE] = make_nainex(label);
gtk_grid_attach (GTK_GRID (table), data->CY_option[FILTER_DATE], 2, row, 1, 1);
row++;
label = make_label (_("Dates"), 0, 0);
gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_SCALE, PANGO_SCALE_LARGE, -1);
gtk_grid_attach (GTK_GRID (table), label, 0, row, 3, 1);
row++;
label = make_label_widget(_("_From:"));
gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1);
data->PO_mindate = gtk_date_entry_new();
gtk_grid_attach (GTK_GRID (table), data->PO_mindate, 1, row, 2, 1);
row++;
label = make_label_widget(_("_To:"));
gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1);
data->PO_maxdate = gtk_date_entry_new();
gtk_grid_attach (GTK_GRID (table), data->PO_maxdate, 1, row, 2, 1);
row++;
label = make_label_widget(_("_Month:"));
gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1);
data->CY_month = make_cycle(label, CYA_SELECT);
gtk_grid_attach (GTK_GRID (table), data->CY_month, 1, row, 2, 1);
row++;
label = make_label_widget(_("_Year:"));
gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1);
data->NB_year = make_year(label);
gtk_grid_attach (GTK_GRID (table), data->NB_year, 1, row, 2, 1);
return table;
}
static GtkWidget *ui_flt_manage_part_text(struct ui_flt_manage_data *data)
{
GtkWidget *table, *label;
gint row;
table = gtk_grid_new ();
gtk_grid_set_row_spacing (GTK_GRID (table), SPACING_SMALL);
gtk_grid_set_column_spacing (GTK_GRID (table), SPACING_MEDIUM);
gtk_container_set_border_width(GTK_CONTAINER(table), SPACING_MEDIUM);
row = 0;
label = make_label_widget(_("_Option:"));
//----------------------------------------- l, r, t, b
gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
data->CY_option[FILTER_TEXT] = make_nainex(label);
gtk_grid_attach (GTK_GRID (table), data->CY_option[FILTER_TEXT], 2, row, 1, 1);
row++;
label = make_label (_("Texts"), 0, 0);
gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_SCALE, PANGO_SCALE_LARGE, -1);
gtk_grid_attach (GTK_GRID (table), label, 0, row, 3, 1);
row++;
label = make_label_widget(_("_Memo:"));
gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1);
data->ST_memo = make_string(label);
gtk_widget_set_hexpand (data->ST_memo, TRUE);
gtk_grid_attach (GTK_GRID (table), data->ST_memo, 1, row, 2, 1);
row++;
label = make_label_widget(_("_Info:"));
//----------------------------------------- l, r, t, b
gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1);
data->ST_info = make_string(label);
gtk_widget_set_hexpand (data->ST_info, TRUE);
gtk_grid_attach (GTK_GRID (table), data->ST_info, 1, row, 2, 1);
row++;
label = make_label_widget(_("_Tag:"));
//----------------------------------------- l, r, t, b
gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1);
data->ST_tag = make_string(label);
gtk_widget_set_hexpand (data->ST_tag, TRUE);
gtk_grid_attach (GTK_GRID (table), data->ST_tag, 1, row, 2, 1);
row++;
data->CM_exact = gtk_check_button_new_with_mnemonic (_("Case _sensitive"));
gtk_grid_attach (GTK_GRID (table), data->CM_exact, 1, row, 2, 1);
return table;
}
static GtkWidget *ui_flt_manage_part_amount(struct ui_flt_manage_data *data)
{
GtkWidget *table, *label;
gint row;
table = gtk_grid_new ();
gtk_grid_set_row_spacing (GTK_GRID (table), SPACING_SMALL);
gtk_grid_set_column_spacing (GTK_GRID (table), SPACING_MEDIUM);
gtk_container_set_border_width(GTK_CONTAINER(table), SPACING_MEDIUM);
row = 0;
label = make_label_widget(_("_Option:"));
//----------------------------------------- l, r, t, b
gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
data->CY_option[FILTER_AMOUNT] = make_nainex(label);
gtk_grid_attach (GTK_GRID (table), data->CY_option[FILTER_AMOUNT], 2, row, 1, 1);
row++;
label = make_label (_("Amounts"), 0, 0);
gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_SCALE, PANGO_SCALE_LARGE, -1);
gtk_grid_attach (GTK_GRID (table), label, 0, row, 3, 1);
row++;
label = make_label_widget(_("_From:"));
//----------------------------------------- l, r, t, b
gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1);
data->ST_minamount = make_amount(label);
gtk_grid_attach (GTK_GRID (table), data->ST_minamount, 1, row, 2, 1);
row++;
label = make_label_widget(_("_To:"));
gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1);
data->ST_maxamount = make_amount(label);
gtk_grid_attach (GTK_GRID (table), data->ST_maxamount, 1, row, 2, 1);
return table;
}
static GtkWidget *ui_flt_manage_part_status(struct ui_flt_manage_data *data)
{
GtkWidget *table, *label, *vbox, *widget;
gint row;
table = gtk_grid_new ();
gtk_grid_set_row_spacing (GTK_GRID (table), SPACING_SMALL);
gtk_grid_set_column_spacing (GTK_GRID (table), SPACING_MEDIUM);
gtk_container_set_border_width(GTK_CONTAINER(table), SPACING_MEDIUM);
row = 0;
label = make_label_widget(_("_Option:"));
//----------------------------------------- l, r, t, b
gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
data->CY_option[FILTER_STATUS] = make_nainex(label);
gtk_grid_attach (GTK_GRID (table), data->CY_option[FILTER_STATUS], 2, row, 1, 1);
row++;
label = make_label (_("Statuses"), 0, 0);
gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_SCALE, PANGO_SCALE_LARGE, -1);
gtk_grid_attach (GTK_GRID (table), label, 0, row, 3, 1);
row++;
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_grid_attach (GTK_GRID (table), vbox, 2, row, 1, 1);
widget = gtk_check_button_new_with_mnemonic (_("reconciled"));
data->CM_reconciled = widget;
gtk_box_pack_start (GTK_BOX (vbox), widget, TRUE, TRUE, 0);
widget = gtk_check_button_new_with_mnemonic (_("cleared"));
data->CM_cleared = widget;
gtk_box_pack_start (GTK_BOX (vbox), widget, TRUE, TRUE, 0);
row++;
label = make_label_widget(_("Force:"));
data->LB_force = label;
gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
data->GR_force = vbox;
gtk_grid_attach (GTK_GRID (table), vbox, 2, row, 1, 1);
widget = gtk_check_button_new_with_mnemonic (_("display 'Added'"));
data->CM_forceadd = widget;
gtk_box_pack_start (GTK_BOX (vbox), widget, TRUE, TRUE, 0);
widget = gtk_check_button_new_with_mnemonic (_("display 'Edited'"));
data->CM_forcechg = widget;
gtk_box_pack_start (GTK_BOX (vbox), widget, TRUE, TRUE, 0);
widget = gtk_check_button_new_with_mnemonic (_("display 'Remind'"));
data->CM_forceremind = widget;
gtk_box_pack_start (GTK_BOX (vbox), widget, TRUE, TRUE, 0);
return table;
}
static GtkWidget *ui_flt_manage_part_paymode(struct ui_flt_manage_data *data)
{
GtkWidget *table, *label, *table1, *image;
gint i, row;
table = gtk_grid_new ();
gtk_grid_set_row_spacing (GTK_GRID (table), SPACING_SMALL);
gtk_grid_set_column_spacing (GTK_GRID (table), SPACING_MEDIUM);
gtk_container_set_border_width(GTK_CONTAINER(table), SPACING_MEDIUM);
row = 0;
label = make_label_widget(_("_Option:"));
//----------------------------------------- l, r, t, b
gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
data->CY_option[FILTER_PAYMODE] = make_nainex(label);
gtk_grid_attach (GTK_GRID (table), data->CY_option[FILTER_PAYMODE], 2, row, 1, 1);
row++;
label = make_label (_("Payments"), 0, 0);
gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_SCALE, PANGO_SCALE_LARGE, -1);
gtk_grid_attach (GTK_GRID (table), label, 0, row, 3, 1);
row++;
table1 = gtk_grid_new ();
gtk_grid_set_row_spacing (GTK_GRID (table1), SPACING_SMALL);
gtk_grid_set_column_spacing (GTK_GRID (table1), SPACING_SMALL);
gtk_grid_attach (GTK_GRID (table), table1, 1, row, 2, 1);
for(i=0;iCM_paymode[i] = gtk_check_button_new();
gtk_grid_attach (GTK_GRID (table1), data->CM_paymode[i], 1, row, 1, 1);
label = make_label(_(paymode_label_names[i]), 0.0, 0.5);
gtk_grid_attach (GTK_GRID (table1), label, 2, row, 1, 1);
}
return table;
}
/*
**
*/
gint ui_flt_manage_dialog_new(GtkWindow *parentwindow, Filter *filter, gboolean show_account, gboolean txnmode)
{
struct ui_flt_manage_data data;
GtkWidget *window, *content, *mainbox, *box, *sidebar, *stack, *page;
//gint w, h;
//data = g_malloc0(sizeof(struct ui_flt_manage_data));
//if(!data) return NULL;
memset(&data, 0, sizeof(struct ui_flt_manage_data));
data.filter = filter;
window = gtk_dialog_new_with_buttons (_("Edit filter"),
GTK_WINDOW (parentwindow),
0,
_("_Reset"),
55,
_("_Cancel"),
GTK_RESPONSE_REJECT,
_("_OK"),
GTK_RESPONSE_ACCEPT,
NULL);
gtk_window_set_icon_name(GTK_WINDOW (window), ICONNAME_HB_FILTER);
//set a nice dialog size
//gtk_window_get_size(GTK_WINDOW(parentwindow), &w, &h);
//gtk_window_set_default_size (GTK_WINDOW(window), -1, 0.8*h);
//store our window private data
g_object_set_data(G_OBJECT(window), "inst_data", (gpointer)&data);
DB( g_print("(ui_flt_manage) window=%p, inst_data=%p\n", window, &data) );
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
content = gtk_dialog_get_content_area(GTK_DIALOG (window));
mainbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, SPACING_SMALL);
gtk_box_pack_start (GTK_BOX (content), mainbox, TRUE, TRUE, 0);
//gtk_container_set_border_width (GTK_CONTAINER(mainbox), SPACING_MEDIUM);
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
gtk_box_pack_start (GTK_BOX (mainbox), box, TRUE, TRUE, 0);
sidebar = gtk_stack_sidebar_new ();
gtk_box_pack_start (GTK_BOX (box), sidebar, FALSE, FALSE, 0);
stack = gtk_stack_new ();
gtk_stack_set_transition_type (GTK_STACK (stack), GTK_STACK_TRANSITION_TYPE_SLIDE_UP_DOWN);
gtk_stack_sidebar_set_stack (GTK_STACK_SIDEBAR (sidebar), GTK_STACK (stack));
data.stack = stack;
gtk_box_pack_start (GTK_BOX (box), stack, TRUE, TRUE, 0);
//common (date + status + amount)
/* label = gtk_label_new(_("General"));
page = ui_flt_manage_page_general(&data);
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label);
*/
page = ui_flt_manage_part_date(&data);
//gtk_widget_show(GTK_WIDGET(page));
gtk_stack_add_titled (GTK_STACK (stack), page, "dat", _("Dates"));
page = ui_flt_manage_part_status(&data);
//gtk_widget_show(GTK_WIDGET(page));
gtk_stack_add_titled (GTK_STACK (stack), page, "sta", _("Statuses"));
page = ui_flt_manage_part_paymode(&data);
//gtk_widget_show(GTK_WIDGET(page));
gtk_stack_add_titled (GTK_STACK (stack), page, "pmt", _("Payments"));
page = ui_flt_manage_part_amount(&data);
//gtk_widget_show(GTK_WIDGET(page));
gtk_stack_add_titled (GTK_STACK (stack), page, "amt", _("Amounts"));
page = ui_flt_manage_part_text(&data);
//gtk_widget_show(GTK_WIDGET(page));
gtk_stack_add_titled (GTK_STACK (stack), page, "txt", _("Texts"));
page = ui_flt_manage_page_category(&data);
//gtk_widget_show(GTK_WIDGET(page));
gtk_stack_add_titled (GTK_STACK (stack), page, "cat", _("Categories"));
page = ui_flt_manage_page_payee(&data);
//gtk_widget_show(GTK_WIDGET(page));
gtk_stack_add_titled (GTK_STACK (stack), page, "pay", _("Payees"));
data.show_account = show_account;
if(show_account == TRUE)
{
page = ui_flt_manage_page_account(&data);
//gtk_widget_show(GTK_WIDGET(page));
gtk_stack_add_titled (GTK_STACK (stack), page, "acc", _("Accounts"));
}
//setup, init and show window
ui_flt_manage_setup(&data);
ui_flt_manage_set(&data);
ui_flt_manage_option_update(window, NULL);
/* signal connect */
g_signal_connect (data.CY_option[FILTER_STATUS] , "changed", G_CALLBACK (ui_flt_manage_option_update), NULL);
g_signal_connect (data.CY_option[FILTER_DATE] , "changed", G_CALLBACK (ui_flt_manage_option_update), NULL);
g_signal_connect (data.CY_option[FILTER_AMOUNT] , "changed", G_CALLBACK (ui_flt_manage_option_update), NULL);
g_signal_connect (data.CY_option[FILTER_PAYMODE] , "changed", G_CALLBACK (ui_flt_manage_option_update), NULL);
g_signal_connect (data.CY_option[FILTER_PAYEE] , "changed", G_CALLBACK (ui_flt_manage_option_update), NULL);
g_signal_connect (data.CY_option[FILTER_CATEGORY], "changed", G_CALLBACK (ui_flt_manage_option_update), NULL);
g_signal_connect (data.CY_option[FILTER_TEXT] , "changed", G_CALLBACK (ui_flt_manage_option_update), NULL);
if(show_account == TRUE)
{
g_signal_connect (data.CY_option[FILTER_ACCOUNT] , "changed", G_CALLBACK (ui_flt_manage_option_update), NULL);
}
g_signal_connect (data.CY_month, "changed", G_CALLBACK (ui_flt_manage_period_change), NULL);
g_signal_connect (data.NB_year, "value-changed", G_CALLBACK (ui_flt_manage_period_change), NULL);
gtk_widget_show_all (window);
if(!txnmode)
{
hb_widget_visible (data.LB_force, FALSE);
hb_widget_visible (data.GR_force, FALSE);
}
if( *data.filter->last_tab != '\0' )
gtk_stack_set_visible_child_name (GTK_STACK(data.stack), data.filter->last_tab);
DB( g_print(" set page '%s'\n", data.filter->last_tab) );
//wait for the user
gint retval; // = 55;
//while( result == 55 )
//{
retval = gtk_dialog_run (GTK_DIALOG (window));
switch (retval)
{
case GTK_RESPONSE_ACCEPT:
//do_application_specific_something ();
ui_flt_manage_get(&data);
break;
case 55:
ui_flt_manage_clear(window, NULL);
ui_flt_manage_get(&data);
break;
default:
//do_nothing_since_dialog_was_cancelled ();
break;
}
//}
// cleanup and destroy
//ui_flt_manage_cleanup(&data, result);
DB( g_print(" free\n") );
//g_free(data);
DB( g_print(" destroy\n") );
gtk_widget_destroy (window);
DB( g_print(" all ok\n") );
return retval;
}