]> Dogcows Code - chaz/homebank/blobdiff - src/ui-filter.c
Merge branch 'upstream'
[chaz/homebank] / src / ui-filter.c
index 66950a28f790b6974be45e4a6ebe5eb75170fcae..78714e72a937633ce2f681a7b44d79bcd6504080 100644 (file)
@@ -1,5 +1,5 @@
 /*  HomeBank -- Free, easy, personal accounting for everyone.
- *  Copyright (C) 1995-2014 Maxime DOYEN
+ *  Copyright (C) 1995-2019 Maxime DOYEN
  *
  *  This file is part of HomeBank.
  *
 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 GdkPixbuf *paymode_icons[];
-
-gchar *CYA_FLT_TYPE[] = {
-       N_("Expense"),
-       N_("Income"),
-       "",
-       N_("Any Type"),
-       NULL
-};
-
-gchar *CYA_FLT_STATUS[] = {
-       N_("Uncategorized"),
-       N_("Unreconciled"),
-       "",
-       N_("Any Status"),
-       NULL
-};
-
-gchar *CYA_FLT_RANGE[] = {
-       N_("This Month"),
-       N_("Last Month"),
-       N_("This Quarter"),
-       N_("Last Quarter"),
-       N_("This Year"),
-       N_("Last Year"),
-       "",
-       N_("Last 30 days"),
-       N_("Last 60 days"),
-       N_("Last 90 days"),
-       N_("Last 12 months"),
-       "",
-       N_("Other..."),
-       "",
-       N_("All date"),
-       NULL
-};
-
-
-gchar *CYA_SELECT[] =
-{
-       "----",
-       N_("All month"),
-       N_("January"),
-       N_("February"),
-       N_("March"),
-       N_("April"),
-       N_("May"),
-       N_("June"),
-       N_("July"),
-       N_("August"),
-       N_("September"),
-       N_("October"),
-       N_("November"),
-       N_("December"),
-       NULL
-};
+extern gchar *nainex_label_names[];
 
 
 /* = = = = = = = = = = = = = = = = = = = = */
 
-/*
-**
-*/
-static void ui_flt_manage_acc_select(GtkWidget *widget, gpointer user_data)
+
+static void ui_flt_hub_category_expand_all(GtkWidget *widget, gpointer user_data)
+{
+struct ui_flt_manage_data *data;
+
+       data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
+       DB( g_print("\n(ui_flt_hub_category) expand all (data=%p)\n", data) );
+
+       gtk_tree_view_expand_all(GTK_TREE_VIEW(data->LV_cat));
+
+}
+
+
+static void ui_flt_hub_category_collapse_all(GtkWidget *widget, gpointer user_data)
+{
+struct ui_flt_manage_data *data;
+
+       data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
+       DB( g_print("\n(ui_flt_hub_category) collapse all (data=%p)\n", data) );
+
+       gtk_tree_view_collapse_all(GTK_TREE_VIEW(data->LV_cat));
+
+}
+
+
+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;
+GtkTreeIter    iter, child;
 gboolean valid;
+gint n_child;
 gboolean toggle;
 
-       DB( g_print("(ui_flt_manage) acc select\n") );
+       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_acc));
+       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_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFACC_TOGGLE, TRUE, -1);
+                               gtk_tree_store_set (GTK_TREE_STORE (model), &iter, LST_DEFCAT_TOGGLE, TRUE, -1);
                                break;
                        case BUTTON_NONE:
-                               gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFACC_TOGGLE, FALSE, -1);
+                               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_DEFACC_TOGGLE, &toggle, -1);
+                                       gtk_tree_model_get (model, &iter, LST_DEFCAT_TOGGLE, &toggle, -1);
                                        toggle ^= 1;
-                                       gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFACC_TOGGLE, 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 *hubbox, *scrollwin, *hbox, *vbox, *widget, *label, *tbar;
+GtkToolItem *toolitem;
+       
+       hubbox = 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 (hubbox), label, FALSE, FALSE, 0);  
+
+       hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_MEDIUM);
+       gtk_box_pack_start (GTK_BOX (hubbox), 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);
+
+       //list
+       vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+       gtk_box_pack_start (GTK_BOX (hubbox), vbox, TRUE, TRUE, 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);
+       //gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(scrollwin), HB_MINHEIGHT_LIST);
+       data->LV_cat = (GtkWidget *)ui_cat_listview_new(TRUE, FALSE);
+       gtk_container_add(GTK_CONTAINER(scrollwin), data->LV_cat);
+       gtk_widget_set_hexpand (scrollwin, TRUE);
+       gtk_widget_set_vexpand (scrollwin, TRUE);
+       gtk_box_pack_start (GTK_BOX (vbox), scrollwin, TRUE, TRUE, 0);
+
+       //list toolbar
+       tbar = gtk_toolbar_new();
+       gtk_toolbar_set_icon_size (GTK_TOOLBAR(tbar), GTK_ICON_SIZE_MENU);
+       gtk_toolbar_set_style(GTK_TOOLBAR(tbar), GTK_TOOLBAR_ICONS);
+       gtk_style_context_add_class (gtk_widget_get_style_context (tbar), GTK_STYLE_CLASS_INLINE_TOOLBAR);
+       gtk_box_pack_start (GTK_BOX (vbox), tbar, FALSE, FALSE, 0);
+
+       toolitem = gtk_separator_tool_item_new ();
+       gtk_tool_item_set_expand (toolitem, TRUE);
+       gtk_separator_tool_item_set_draw(GTK_SEPARATOR_TOOL_ITEM(toolitem), FALSE);
+       gtk_toolbar_insert(GTK_TOOLBAR(tbar), GTK_TOOL_ITEM(toolitem), -1);
+
+       hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+       toolitem = gtk_tool_item_new();
+       gtk_container_add (GTK_CONTAINER(toolitem), hbox);
+       gtk_toolbar_insert(GTK_TOOLBAR(tbar), GTK_TOOL_ITEM(toolitem), -1);
+       
+               widget = make_image_button(ICONNAME_HB_BUTTON_EXPAND, _("Expand all"));
+               data->BT_expand = widget;
+               gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
+
+               widget = make_image_button(ICONNAME_HB_BUTTON_COLLAPSE, _("Collapse all"));
+               data->BT_collapse = widget;
+               gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
+
+       g_signal_connect (G_OBJECT (data->BT_expand), "clicked", G_CALLBACK (ui_flt_hub_category_expand_all), NULL);
+       g_signal_connect (G_OBJECT (data->BT_collapse), "clicked", G_CALLBACK (ui_flt_hub_category_collapse_all), NULL);
+
+
+       return(hubbox);
+}
+
+
+/* = = = = = = = = = = = = = = = = */
+
+
 static void ui_flt_manage_pay_select(GtkWidget *widget, gpointer user_data)
 {
 struct ui_flt_manage_data *data;
@@ -179,71 +408,201 @@ gboolean toggle;
        }
 }
 
-/*
-**
-*/
-static void ui_flt_manage_cat_select(GtkWidget *widget, gpointer user_data)
+
+
+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, child;
+GtkTreeIter    iter;
 gboolean valid;
-gint n_child;
 gboolean toggle;
 
-       DB( g_print("(ui_flt_manage) pay select\n") );
+       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_cat));
+       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_tree_store_set (GTK_TREE_STORE (model), &iter, LST_DEFCAT_TOGGLE, TRUE, -1);
+                               gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFACC_TOGGLE, TRUE, -1);
                                break;
                        case BUTTON_NONE:
-                               gtk_tree_store_set (GTK_TREE_STORE (model), &iter, LST_DEFCAT_TOGGLE, FALSE, -1);
+                               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_DEFCAT_TOGGLE, &toggle, -1);
+                                       gtk_tree_model_get (model, &iter, LST_DEFACC_TOGGLE, &toggle, -1);
                                        toggle ^= 1;
-                                       gtk_tree_store_set (GTK_TREE_STORE (model), &iter, LST_DEFCAT_TOGGLE, 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);
+       }
+}
 
-               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;
-                       }
+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);    
 
-                       n_child--;
-                       gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &child);
-               }
+       hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_MEDIUM);
+       gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
 
-               valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
-       }
+       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);
 }
 
+/* = = = = = = = = = = = = = = = = */
+
+
+
+
+
+
+
 /*
 **
 */
@@ -261,7 +620,7 @@ gboolean sensitive;
        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_reminded, sensitive);
+       gtk_widget_set_sensitive(data->CM_cleared, sensitive);
 
        // date
        active = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_option[FILTER_DATE]));
@@ -281,7 +640,7 @@ gboolean sensitive;
        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_wording, 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);
 
@@ -344,8 +703,8 @@ gchar *txt;
        {
        GtkTreeModel *model;
        //GtkTreeSelection *selection;
-       GtkTreeIter     iter, child;
-       gint n_child;
+       GtkTreeIter     iter;
+
        gboolean valid;
        gboolean toggled;
 
@@ -359,16 +718,17 @@ gchar *txt;
 
        //date
                DB( g_print(" date\n") );
-               data->filter->mindate = gtk_dateentry_get_date(GTK_DATE_ENTRY(data->PO_mindate));
-               data->filter->maxdate = gtk_dateentry_get_date(GTK_DATE_ENTRY(data->PO_maxdate));
+               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->reminded  = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_reminded));
+               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") );
@@ -379,19 +739,19 @@ gchar *txt;
                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:wording
+       //text:memo
                data->filter->exact  = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_exact));
                //free any previous string
-               if(     data->filter->wording )
+               if(     data->filter->memo )
                {
-                       g_free(data->filter->wording);
-                       data->filter->wording = NULL;
+                       g_free(data->filter->memo);
+                       data->filter->memo = NULL;
                }
-               txt = (gchar *)gtk_entry_get_text(GTK_ENTRY(data->ST_wording));
+               txt = (gchar *)gtk_entry_get_text(GTK_ENTRY(data->ST_memo));
 
                if (txt && *txt)        // ignore if entry is empty
                {
-                       data->filter->wording = g_strdup(txt);
+                       data->filter->memo = g_strdup(txt);
                }
 
        //text:info
@@ -441,7 +801,7 @@ gchar *txt;
                                        -1);
 
                                //data->filter->acc[i] = gtk_tree_selection_iter_is_selected(selection, &iter);
-                               accitem->filter = toggled;
+                               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);
@@ -464,7 +824,7 @@ gchar *txt;
                                -1);
 
                        //data->filter->pay[i] = gtk_tree_selection_iter_is_selected(selection, &iter);
-                       payitem->filter = toggled;
+                       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);
@@ -473,49 +833,11 @@ gchar *txt;
        // 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->filter = 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->filter = 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);
-               }
+               ui_flt_panel_category_get(data);
 
        // active tab
-       data->filter->last_tab = gtk_notebook_get_current_page(GTK_NOTEBOOK(data->notebook));
-       DB( g_print(" page is %d\n", data->filter->last_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) );
        
 
        }
@@ -534,9 +856,9 @@ static void ui_flt_manage_set(struct ui_flt_manage_data *data)
        {
        GtkTreeModel *model;
        //GtkTreeSelection *selection;
-       GtkTreeIter     iter, child;
+       GtkTreeIter     iter;
        GDate *date;
-       gint n_child;
+
        gboolean valid;
        gint i;
 
@@ -554,8 +876,8 @@ static void ui_flt_manage_set(struct ui_flt_manage_data *data)
                //DB( g_print(" setdate %d to %x\n", 0, data->PO_mindate) );
        //date
                DB( g_print(" date\n") );
-               gtk_dateentry_set_date(GTK_DATE_ENTRY(data->PO_mindate), data->filter->mindate);
-               gtk_dateentry_set_date(GTK_DATE_ENTRY(data->PO_maxdate), 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);
                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);
@@ -563,10 +885,11 @@ static void ui_flt_manage_set(struct ui_flt_manage_data *data)
        //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_reminded), data->filter->reminded);
+
 
                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") );
@@ -581,7 +904,7 @@ static void ui_flt_manage_set(struct ui_flt_manage_data *data)
        //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_wording), (data->filter->wording != NULL) ? data->filter->wording : "");
+       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
@@ -600,7 +923,7 @@ static void ui_flt_manage_set(struct ui_flt_manage_data *data)
                                        LST_DEFACC_DATAS, &accitem,
                                        -1);
 
-                               if(accitem->filter == TRUE)
+                               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);
@@ -624,7 +947,7 @@ static void ui_flt_manage_set(struct ui_flt_manage_data *data)
                                LST_DEFPAY_DATAS, &payitem,
                                -1);
 
-                       if(payitem->filter == TRUE)
+                       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 */
@@ -634,44 +957,7 @@ static void ui_flt_manage_set(struct ui_flt_manage_data *data)
        // 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->filter == 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->filter == 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);
-               }
-
-       // active tab
-       gtk_notebook_set_current_page(GTK_NOTEBOOK(data->notebook), data->filter->last_tab);
-       DB( g_print(" set page %d\n", data->filter->last_tab) );
+               ui_flt_panel_category_set(data);
 
        }
 }
@@ -688,7 +974,7 @@ struct ui_flt_manage_data *data;
 
        DB( g_print("(ui_flt_manage) clear\n") );
 
-       filter_default_all_set(data->filter);
+       filter_reset(data->filter);
 
        ui_flt_manage_set(data);
 
@@ -715,7 +1001,7 @@ static void ui_flt_manage_setup(struct ui_flt_manage_data *data)
        {
                //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);
+               ui_pay_listview_populate(data->LV_pay, NULL);
                //populate_view_pay(data->LV_pay, GLOBALS->pay_list, FALSE);
        }
 
@@ -724,105 +1010,55 @@ static void ui_flt_manage_setup(struct ui_flt_manage_data *data)
                //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);
+               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, *scrollwin, *hbox, *vbox, *label, *widget;
+GtkWidget *container, *panel, *hbox, *label;
 
-       container = gtk_vbox_new(FALSE, HB_BOX_SPACING);
-       gtk_container_set_border_width (GTK_CONTAINER (container), HB_MAINBOX_SPACING);
+       container = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL);
+       gtk_container_set_border_width (GTK_CONTAINER (container), SPACING_MEDIUM);
 
-       hbox = gtk_hbox_new(FALSE, HB_BOX_SPACING);
+       hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_SMALL);
        gtk_box_pack_start (GTK_BOX (container), hbox, FALSE, FALSE, 0);
 
-       label = make_label(_("_Option:"), 1.0, 0.5);
+       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);
 
-       hbox = gtk_hbox_new(FALSE, HB_BOX_SPACING);
-       gtk_box_pack_start (GTK_BOX (container), hbox, TRUE, TRUE, 0);
-
-       scrollwin = gtk_scrolled_window_new(NULL,NULL);
-       gtk_box_pack_start (GTK_BOX (hbox), 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), HB_BOX_SPACING);
-
-       data->LV_cat = (GtkWidget *)ui_cat_listview_new(TRUE);
-       gtk_container_add(GTK_CONTAINER(scrollwin), data->LV_cat);
-
-       vbox = gtk_vbox_new(FALSE, HB_BOX_SPACING);
-       gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
-
-       widget = gtk_button_new_with_label(_("All"));
-       gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
-       data->BT_cat[BUTTON_ALL] = widget;
-
-       widget = gtk_button_new_with_label(_("None"));
-       gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
-       data->BT_cat[BUTTON_NONE] = widget;
-
-       widget = gtk_button_new_with_label(_("Invert"));
-       gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
-       data->BT_cat[BUTTON_INVERT] = widget;
+       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, *scrollwin, *hbox, *vbox, *label, *widget;
+GtkWidget *container, *panel, *hbox, *label;
 
-       container = gtk_vbox_new(FALSE, HB_BOX_SPACING);
-       gtk_container_set_border_width (GTK_CONTAINER (container), HB_MAINBOX_SPACING);
+       container = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL);
+       gtk_container_set_border_width (GTK_CONTAINER (container), SPACING_MEDIUM);
 
-       hbox = gtk_hbox_new(FALSE, HB_BOX_SPACING);
+       hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_SMALL);
        gtk_box_pack_start (GTK_BOX (container), hbox, FALSE, FALSE, 0);
 
-       label = make_label(_("_Option:"), 1.0, 0.5);
+       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);
 
-       hbox = gtk_hbox_new(FALSE, HB_BOX_SPACING);
-       gtk_box_pack_start (GTK_BOX (container), hbox, TRUE, TRUE, 0);
-
-       scrollwin = gtk_scrolled_window_new(NULL,NULL);
-       gtk_box_pack_start (GTK_BOX (hbox), 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), HB_BOX_SPACING);
-
-       data->LV_pay = (GtkWidget *)ui_pay_listview_new(TRUE);
-       gtk_container_add(GTK_CONTAINER(scrollwin), data->LV_pay);
-
-       vbox = gtk_vbox_new(FALSE, HB_BOX_SPACING);
-       gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
-
-       widget = gtk_button_new_with_label(_("All"));
-       gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
-       data->BT_pay[BUTTON_ALL] = widget;
-
-       widget = gtk_button_new_with_label(_("None"));
-       gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
-       data->BT_pay[BUTTON_NONE] = widget;
-
-       widget = gtk_button_new_with_label(_("Invert"));
-       gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
-       data->BT_pay[BUTTON_INVERT] = widget;
+       panel = ui_flt_panel_payee_new(data);
+       gtk_box_pack_start (GTK_BOX (container), panel, TRUE, TRUE, 0);
 
        return(container);
 }
@@ -832,46 +1068,21 @@ GtkWidget *container, *scrollwin, *hbox, *vbox, *label, *widget;
 */
 static GtkWidget *ui_flt_manage_page_account (struct ui_flt_manage_data *data)
 {
-GtkWidget *container, *scrollwin, *hbox, *vbox, *label, *widget;
+GtkWidget *container, *panel, *hbox, *label;
 
-       container = gtk_vbox_new(FALSE, HB_BOX_SPACING);
-       gtk_container_set_border_width (GTK_CONTAINER (container), HB_MAINBOX_SPACING);
+       container = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL);
+       gtk_container_set_border_width (GTK_CONTAINER (container), SPACING_MEDIUM);
 
-       hbox = gtk_hbox_new(FALSE, HB_BOX_SPACING);
+       hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_SMALL);
        gtk_box_pack_start (GTK_BOX (container), hbox, FALSE, FALSE, 0);
 
-       label = make_label(_("_Option:"), 1.0, 0.5);
+       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);
 
-       hbox = gtk_hbox_new(FALSE, HB_BOX_SPACING);
-       gtk_box_pack_start (GTK_BOX (container), hbox, TRUE, TRUE, 0);
-
-       scrollwin = gtk_scrolled_window_new(NULL,NULL);
-       gtk_box_pack_start (GTK_BOX (hbox), 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), HB_BOX_SPACING);
-
-       data->LV_acc = ui_acc_listview_new(TRUE);
-       gtk_container_add(GTK_CONTAINER(scrollwin), data->LV_acc);
-
-       vbox = gtk_vbox_new(FALSE, HB_BOX_SPACING);
-       gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
-
-       widget = gtk_button_new_with_label(_("All"));
-       gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
-       data->BT_acc[BUTTON_ALL] = widget;
-
-       widget = gtk_button_new_with_label(_("None"));
-       gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
-       data->BT_acc[BUTTON_NONE] = widget;
-
-       widget = gtk_button_new_with_label(_("Invert"));
-       gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
-       data->BT_acc[BUTTON_INVERT] = widget;
+       panel = ui_flt_panel_account_new(data);
+       gtk_box_pack_start (GTK_BOX (container), panel, TRUE, TRUE, 0);
 
        return(container);
 }
@@ -923,255 +1134,196 @@ gint month, year;
        else
                get_period_minmax(0, year, &data->filter->mindate, &data->filter->maxdate);
 
-       gtk_dateentry_set_date(GTK_DATE_ENTRY(data->PO_mindate), data->filter->mindate);
-       gtk_dateentry_set_date(GTK_DATE_ENTRY(data->PO_maxdate), 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;
-GtkWidget *alignment;
 gint row;
 
-       // filter date
-       table = gtk_table_new (3, 3, FALSE);
-       gtk_table_set_row_spacings (GTK_TABLE (table), HB_TABROW_SPACING);
-       gtk_table_set_col_spacings (GTK_TABLE (table), HB_TABCOL_SPACING);
-
-       //gtk_box_pack_start (GTK_BOX (container), table, TRUE, TRUE, 0);
-       //                      gtk_alignment_new(xalign, yalign, xscale, yscale)
-       alignment = gtk_alignment_new(0.5, 0, 1.0, 0.0);
-       gtk_container_add(GTK_CONTAINER(alignment), table);
-
+       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(_("Filter Date"), 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_table_attach (GTK_TABLE (table), label, 0, 3, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-
-               row++;
-               label = make_label("", 0.0, 0.5);
-               gtk_misc_set_padding (GTK_MISC (label), HB_BOX_SPACING, 0);
-               gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-
-               label = make_label(_("_Option:"), 0, 0.5);
-               //----------------------------------------- l, r, t, b
-               gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-               data->CY_option[FILTER_DATE] = make_nainex(label);
-               //gtk_table_attach_defaults (GTK_TABLE (table), data->CY_option[FILTER_DATE], 1, 2, row, row+1);
-               gtk_table_attach (GTK_TABLE (table), data->CY_option[FILTER_DATE], 2, 3, row, row+1, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (0), 0, 0);
-
-               row++;
-               label = make_label(_("_From:"), 0, 0.5);
-               gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-               data->PO_mindate = gtk_dateentry_new();
-               //data->PO_mindate = gtk_entry_new();
-               //gtk_table_attach_defaults (GTK_TABLE (table), data->PO_mindate, 1, 2, row, row+1);
-               gtk_table_attach (GTK_TABLE (table), data->PO_mindate, 2, 3, row, row+1, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (0), 0, 0);
-
-               row++;
-               label = make_label(_("_To:"), 0, 0.5);
-               gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-               data->PO_maxdate = gtk_dateentry_new();
-               //data->PO_maxdate = gtk_entry_new();
-               //gtk_table_attach_defaults (GTK_TABLE (table), data->PO_maxdate, 1, 2, row, row+1);
-               gtk_table_attach (GTK_TABLE (table), data->PO_maxdate, 2, 3, row, row+1, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (0), 0, 0);
-
-               row++;
-               label = make_label(_("_Month:"), 0, 0.5);
-               gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-               data->CY_month = make_cycle(label, CYA_SELECT);
-               gtk_table_attach (GTK_TABLE (table), data->CY_month, 2, 3, row, row+1, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (0), 0, 0);
-
-               row++;
-               label = make_label(_("_Year:"), 0, 0.5);
-               gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-               data->NB_year = make_year(label);
-               gtk_table_attach (GTK_TABLE (table), data->NB_year, 2, 3, row, row+1, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (0), 0, 0);
-
-       gtk_container_set_border_width(GTK_CONTAINER(alignment), HB_BOX_SPACING);
-
-       return alignment;
+       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;
-GtkWidget *alignment;
 gint row;
 
-       table = gtk_table_new (3, 3, FALSE);
-       gtk_table_set_row_spacings (GTK_TABLE (table), HB_TABROW_SPACING);
-       gtk_table_set_col_spacings (GTK_TABLE (table), HB_TABCOL_SPACING);
-
-       //gtk_box_pack_start (GTK_BOX (container), table, TRUE, TRUE, 0);
-       //                      gtk_alignment_new(xalign, yalign, xscale, yscale)
-       alignment = gtk_alignment_new(0.5, 0, 1.0, 0.0);
-       gtk_container_add(GTK_CONTAINER(alignment), table);
-
+       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(_("Filter Text"), 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("", 0.0, 0.5);
-               gtk_misc_set_padding (GTK_MISC (label), HB_BOX_SPACING, 0);
-               gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-
-               label = make_label(_("_Option:"), 0, 0.5);
-               //----------------------------------------- l, r, t, b
-               gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-
-               //gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-               data->CY_option[FILTER_TEXT] = make_nainex(label);
-               gtk_table_attach (GTK_TABLE (table), data->CY_option[FILTER_TEXT], 2, 3, row, row+1, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (0), 0, 0);
-
-               row++;
-               data->CM_exact = gtk_check_button_new_with_mnemonic (_("Case _sensitive"));
-               gtk_table_attach (GTK_TABLE (table), data->CM_exact, 2, 3, row, row+1, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (0), 0, 0);
-       
-               row++;
-               label = make_label(_("_Memo:"), 0, 0.5);
-               gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-               data->ST_wording = make_string(label);
-               gtk_table_attach (GTK_TABLE (table), data->ST_wording, 2, 3, row, row+1, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (0), 0, 0);
-
-               row++;
-               label = make_label(_("_Info:"), 0, 0.5);
-               //----------------------------------------- l, r, t, b
-               gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-               data->ST_info = make_string(label);
-               gtk_table_attach (GTK_TABLE (table), data->ST_info, 2, 3, row, row+1, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (0), 0, 0);
-
-               row++;
-               label = make_label(_("_Tag:"), 0, 0.5);
-               //----------------------------------------- l, r, t, b
-               gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-               data->ST_tag = make_string(label);
-               gtk_table_attach (GTK_TABLE (table), data->ST_tag, 2, 3, row, row+1, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (0), 0, 0);
-
-       gtk_container_set_border_width(GTK_CONTAINER(alignment), HB_BOX_SPACING);
-
-       return alignment;
+       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;
-GtkWidget *alignment;
 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);
 
-       table = gtk_table_new (3, 3, FALSE);
-       gtk_table_set_row_spacings (GTK_TABLE (table), HB_TABROW_SPACING);
-       gtk_table_set_col_spacings (GTK_TABLE (table), HB_TABCOL_SPACING);
-
-       //gtk_box_pack_start (GTK_BOX (container), table, TRUE, TRUE, 0);
-       //                      gtk_alignment_new(xalign, yalign, xscale, yscale)
-       alignment = gtk_alignment_new(0.5, 0, 1.0, 0.0);
-       gtk_container_add(GTK_CONTAINER(alignment), table);
-
-       // Amount section
        row = 0;
-
-       label = make_label(_("Filter Amount"), 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("", 0.0, 0.5);
-               gtk_misc_set_padding (GTK_MISC (label), HB_BOX_SPACING, 0);
-               gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-
-               label = make_label(_("_Option:"), 0, 0.5);
-               //----------------------------------------- l, r, t, b
-               gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-
-               //gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-               data->CY_option[FILTER_AMOUNT] = make_nainex(label);
-               gtk_table_attach (GTK_TABLE (table), data->CY_option[FILTER_AMOUNT], 2, 3, row, row+1, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (0), 0, 0);
-
-               row++;
-               label = make_label(_("_From:"), 0, 0.5);
-               //----------------------------------------- l, r, t, b
-               gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-               data->ST_minamount = make_amount(label);
-               gtk_table_attach (GTK_TABLE (table), data->ST_minamount, 2, 3, row, row+1, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (0), 0, 0);
-
-               row++;
-               label = make_label(_("_To:"), 0, 0.5);
-               gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-               data->ST_maxamount = make_amount(label);
-               gtk_table_attach (GTK_TABLE (table), data->ST_maxamount, 2, 3, row, row+1, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (0), 0, 0);
-
-       gtk_container_set_border_width(GTK_CONTAINER(alignment), HB_BOX_SPACING);
-
-
-       return alignment;
+       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;
-GtkWidget *alignment;
 gint row;
 
-
-               // column 2
-
-       // filter status
-       table = gtk_table_new (3, 3, FALSE);
-       gtk_table_set_row_spacings (GTK_TABLE (table), HB_TABROW_SPACING);
-       gtk_table_set_col_spacings (GTK_TABLE (table), HB_TABCOL_SPACING);
-
-       //gtk_box_pack_start (GTK_BOX (container), table, TRUE, TRUE, 0);
-       //                      gtk_alignment_new(xalign, yalign, xscale, yscale)
-       alignment = gtk_alignment_new(0.5, 0, 1.0, 0.0);
-       gtk_container_add(GTK_CONTAINER(alignment), table);
-
+       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(_("Filter Status"), 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("", 0.0, 0.5);
-               gtk_misc_set_padding (GTK_MISC (label), HB_BOX_SPACING, 0);
-               gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 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);
 
-               label = make_label(_("_Option:"), 0, 0.5);
-               //----------------------------------------- l, r, t, b
-               gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+       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);
 
-               data->CY_option[FILTER_STATUS] = make_nainex(label);
-               gtk_table_attach (GTK_TABLE (table), data->CY_option[FILTER_STATUS], 2, 3, row, row+1, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (0), 0, 0);
 
                row++;
-               vbox = gtk_vbox_new (FALSE, 0);
-               gtk_table_attach (GTK_TABLE (table), vbox, 2, 3, row, row+1, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (0), 0, 0);
+               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 (_("remind"));
-               data->CM_reminded = widget;
+               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(_("Force:"), 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(_("Force:"));
+               data->LB_force = label;
+               gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
 
-               vbox = gtk_vbox_new (FALSE, 0);
-               gtk_table_attach (GTK_TABLE (table), vbox, 2, 3, row, row+1, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (0), 0, 0);
+               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;
@@ -1181,168 +1333,115 @@ gint row;
                data->CM_forcechg = widget;
                gtk_box_pack_start (GTK_BOX (vbox), widget, TRUE, TRUE, 0);
 
-       gtk_container_set_border_width(GTK_CONTAINER(alignment), HB_BOX_SPACING);
-
+               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 alignment;
+       return table;
 }
 
 
 static GtkWidget *ui_flt_manage_part_paymode(struct ui_flt_manage_data *data)
 {
 GtkWidget *table, *label, *table1, *image;
-GtkWidget *alignment;
 gint i, row;
 
-       // Filter Payment
-       table = gtk_table_new (3, 3, FALSE);
-       gtk_table_set_row_spacings (GTK_TABLE (table), HB_TABROW_SPACING);
-       gtk_table_set_col_spacings (GTK_TABLE (table), HB_TABCOL_SPACING);
-
-       //gtk_box_pack_start (GTK_BOX (container), table, TRUE, TRUE, 0);
-       //                      gtk_alignment_new(xalign, yalign, xscale, yscale)
-       alignment = gtk_alignment_new(0.5, 0, 1.0, 0.0);
-       gtk_container_add(GTK_CONTAINER(alignment), table);
-
+       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(_("Filter Payment"), 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("", 0.0, 0.5);
-               gtk_misc_set_padding (GTK_MISC (label), HB_BOX_SPACING, 0);
-               gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-
-               label = make_label(_("_Option:"), 1.0, 0.5);
-               //----------------------------------------- l, r, t, b
-               gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-               data->CY_option[FILTER_PAYMODE] = make_nainex(label);
-               gtk_table_attach (GTK_TABLE (table), data->CY_option[FILTER_PAYMODE], 2, 3, row, row+1, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (0), 0, 0);
-
-               table1 = gtk_table_new (1, 1, FALSE);
-               gtk_table_set_row_spacings (GTK_TABLE (table1), 0);
-               gtk_table_set_col_spacings (GTK_TABLE (table1), 2);
-
-               row++;
-               gtk_table_attach (GTK_TABLE (table), table1, 2, 3, row, row+1, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (0), 0, 0);
-
-               for(i=0;i<NUM_PAYMODE_MAX;i++)
-               {
-                       row = i;
-
-                       image = gtk_image_new_from_pixbuf(paymode_icons[i]);
-                       gtk_table_attach (GTK_TABLE (table1), image, 0, 1, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-
-                       data->CM_paymode[i] = gtk_check_button_new();
-                       gtk_table_attach (GTK_TABLE (table1), data->CM_paymode[i], 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
-
-
-                       label = make_label(_(paymode_label_names[i]), 0.0, 0.5);
-                       gtk_table_attach (GTK_TABLE (table1), label, 2, 3, row, row+1, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (0), 0, 0);
-
-               }
-
-       gtk_container_set_border_width(GTK_CONTAINER(alignment), HB_BOX_SPACING);
-
-
-       return alignment;
-}
-
-
-/*
-** general page: date, amount, status, payment
-*/
-/*
-static GtkWidget *ui_flt_manage_page_general (struct ui_flt_manage_data *data)
-{
-GtkWidget *container, *part;
-
-       //container = gtk_hbox_new(FALSE, HB_BOX_SPACING);
-       //                      gtk_alignment_new(xalign, yalign, xscale, yscale)
-       //gtk_container_set_border_width(GTK_CONTAINER(container), HB_BOX_SPACING);
-
-       container = gtk_table_new (2, 3, FALSE);
-       gtk_table_set_row_spacings (GTK_TABLE (container), HB_TABROW_SPACING*2);
-       gtk_table_set_col_spacings (GTK_TABLE (container), HB_TABCOL_SPACING*2);
-       gtk_container_set_border_width(GTK_CONTAINER(container), HB_BOX_SPACING);
-
-       // date: r=1, c=1
-       part = ui_flt_manage_part_date(data);
-       gtk_table_attach_defaults(GTK_TABLE (container), part, 0, 1, 0, 1);
-
-       // amount: r=2, c=2
-       part = ui_flt_manage_part_amount(data);
-       gtk_table_attach_defaults (GTK_TABLE (container), part, 0, 1, 1, 2);
-
-       // paymode:
-       part = ui_flt_manage_part_paymode(data);
-       gtk_table_attach_defaults (GTK_TABLE (container), part, 1, 2, 0, 2);
+       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);
 
-       // status: r=2, c=1
-       part = ui_flt_manage_part_status(data);
-       gtk_table_attach_defaults (GTK_TABLE (container), part, 2, 3, 0, 1);
+       for(i=0;i<NUM_PAYMODE_MAX;i++)
+       {
+               row = i;
 
-       // text: r=2, c=1
-       part = ui_flt_manage_part_text(data);
-       gtk_table_attach_defaults (GTK_TABLE (container), part, 2, 3, 1, 2);
+               image = gtk_image_new_from_icon_name( get_paymode_icon_name(i), GTK_ICON_SIZE_MENU);
+               gtk_grid_attach (GTK_GRID (table1), image, 0, row, 1, 1);
 
-       gtk_container_set_border_width(GTK_CONTAINER(container), HB_BOX_SPACING);
+               data->CM_paymode[i] = gtk_check_button_new_with_mnemonic(_(paymode_label_names[i]));
+               gtk_grid_attach (GTK_GRID (table1), data->CM_paymode[i], 1, row, 1, 1);
+       }
 
-       return(container);
+       return table;
 }
-*/
-
 
 
 /*
 **
 */
-gint ui_flt_manage_dialog_new(Filter *filter, gboolean show_account)
+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, *notebook, *label, *page;
+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(data));
+       memset(&data, 0, sizeof(struct ui_flt_manage_data));
 
        data.filter = filter;
 
-       window = gtk_dialog_new_with_buttons (_("Edit Filter"),
-                                           //GTK_WINDOW (do_widget),
-                                           NULL,
+       window = gtk_dialog_new_with_buttons (_("Edit filter"),
+                                           GTK_WINDOW (parentwindow),
                                            0,
-                                           GTK_STOCK_CLEAR,
+                                           _("_Reset"),
                                            55,
-                                           GTK_STOCK_CANCEL,
+                                           _("_Cancel"),
                                            GTK_RESPONSE_REJECT,
-                                           GTK_STOCK_OK,
+                                           _("_OK"),
                                            GTK_RESPONSE_ACCEPT,
                                            NULL);
 
-       //homebank_window_set_icon_from_file(GTK_WINDOW (window), "filter.svg");
-       gtk_window_set_icon_name(GTK_WINDOW (window), HB_STOCK_FILTER);
+       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=%x, inst_data=%x\n", (guint)window, (guint)&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_vbox_new (FALSE, HB_BOX_SPACING);
+       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), HB_MAINBOX_SPACING);
+       //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);
 
-       notebook = gtk_notebook_new();
-       gtk_notebook_set_tab_pos(GTK_NOTEBOOK (notebook), GTK_POS_LEFT);
-    gtk_box_pack_start (GTK_BOX (mainbox), notebook, TRUE, TRUE, 0);
-       data.notebook = notebook;
 
        //common (date + status + amount)
 /*     label = gtk_label_new(_("General"));
@@ -1350,48 +1449,40 @@ GtkWidget *window, *content, *mainbox, *notebook, *label, *page;
        gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label);
 */
 
-       label = gtk_label_new(_("Date"));
        page = ui_flt_manage_part_date(&data);
-       gtk_widget_show(GTK_WIDGET(page));
-       gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label);
+       //gtk_widget_show(GTK_WIDGET(page));
+       gtk_stack_add_titled (GTK_STACK (stack), page, "dat", _("Dates"));
 
-       label = gtk_label_new(_("Status"));
        page = ui_flt_manage_part_status(&data);
-       gtk_widget_show(GTK_WIDGET(page));
-       gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label);
+       //gtk_widget_show(GTK_WIDGET(page));
+       gtk_stack_add_titled (GTK_STACK (stack), page, "sta", _("Statuses"));
 
-       label = gtk_label_new(_("Paymode"));
        page = ui_flt_manage_part_paymode(&data);
-       gtk_widget_show(GTK_WIDGET(page));
-       gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label);
+       //gtk_widget_show(GTK_WIDGET(page));
+       gtk_stack_add_titled (GTK_STACK (stack), page, "pmt", _("Payments"));
 
-       label = gtk_label_new(_("Amount"));
        page = ui_flt_manage_part_amount(&data);
-       gtk_widget_show(GTK_WIDGET(page));
-       gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label);
+       //gtk_widget_show(GTK_WIDGET(page));
+       gtk_stack_add_titled (GTK_STACK (stack), page, "amt", _("Amounts"));
 
-       label = gtk_label_new(_("Text"));
        page = ui_flt_manage_part_text(&data);
-       gtk_widget_show(GTK_WIDGET(page));
-       gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label);
+       //gtk_widget_show(GTK_WIDGET(page));
+       gtk_stack_add_titled (GTK_STACK (stack), page, "txt", _("Texts"));
        
-       label = gtk_label_new(_("Category"));
        page = ui_flt_manage_page_category(&data);
-       gtk_widget_show(GTK_WIDGET(page));
-       gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label);
+       //gtk_widget_show(GTK_WIDGET(page));
+       gtk_stack_add_titled (GTK_STACK (stack), page, "cat", _("Categories"));
 
-       label = gtk_label_new(_("Payee"));
        page = ui_flt_manage_page_payee(&data);
-       gtk_widget_show(GTK_WIDGET(page));
-       gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label);
+       //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)
        {
-               label = gtk_label_new(_("Account"));
                page = ui_flt_manage_page_account(&data);
-               gtk_widget_show(GTK_WIDGET(page));
-               gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label);
+               //gtk_widget_show(GTK_WIDGET(page));
+               gtk_stack_add_titled (GTK_STACK (stack), page, "acc", _("Accounts"));
        }
 
        //setup, init and show window
@@ -1399,7 +1490,6 @@ GtkWidget *window, *content, *mainbox, *notebook, *label, *page;
        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);
@@ -1415,24 +1505,24 @@ GtkWidget *window, *content, *mainbox, *notebook, *label, *page;
        {
            g_signal_connect (data.CY_option[FILTER_ACCOUNT] , "changed", G_CALLBACK (ui_flt_manage_option_update), NULL);
 
-           g_signal_connect (data.BT_acc[BUTTON_ALL]   , "clicked", G_CALLBACK (ui_flt_manage_acc_select), GINT_TO_POINTER(BUTTON_ALL));
-           g_signal_connect (data.BT_acc[BUTTON_NONE]  , "clicked", G_CALLBACK (ui_flt_manage_acc_select), GINT_TO_POINTER(BUTTON_NONE));
-           g_signal_connect (data.BT_acc[BUTTON_INVERT], "clicked", G_CALLBACK (ui_flt_manage_acc_select), GINT_TO_POINTER(BUTTON_INVERT));
        }
 
        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);
 
-    g_signal_connect (data.BT_pay[BUTTON_ALL]   , "clicked", G_CALLBACK (ui_flt_manage_pay_select), GINT_TO_POINTER(BUTTON_ALL));
-    g_signal_connect (data.BT_pay[BUTTON_NONE]  , "clicked", G_CALLBACK (ui_flt_manage_pay_select), GINT_TO_POINTER(BUTTON_NONE));
-    g_signal_connect (data.BT_pay[BUTTON_INVERT], "clicked", G_CALLBACK (ui_flt_manage_pay_select), GINT_TO_POINTER(BUTTON_INVERT));
 
-    g_signal_connect (data.BT_cat[BUTTON_ALL]   , "clicked", G_CALLBACK (ui_flt_manage_cat_select), GINT_TO_POINTER(BUTTON_ALL));
-    g_signal_connect (data.BT_cat[BUTTON_NONE]  , "clicked", G_CALLBACK (ui_flt_manage_cat_select), GINT_TO_POINTER(BUTTON_NONE));
-    g_signal_connect (data.BT_cat[BUTTON_INVERT], "clicked", G_CALLBACK (ui_flt_manage_cat_select), GINT_TO_POINTER(BUTTON_INVERT));
+       gtk_widget_show_all (window);
+
+       if(!txnmode)
+       {
+               hb_widget_visible (data.LB_force, FALSE);
+               hb_widget_visible (data.GR_force, FALSE);
+       }
 
 
-       gtk_widget_show_all (window);
+       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
This page took 0.060361 seconds and 4 git commands to generate.