]> Dogcows Code - chaz/homebank/blobdiff - src/rep-time.c
import homebank-5.2.4
[chaz/homebank] / src / rep-time.c
similarity index 77%
rename from src/rep_time.c
rename to src/rep-time.c
index 6684389df4500ebfdc9f43a3e6ead2a7ec1e2af3..97d02f3cf1312bd4cc8a19b911655a43410e4e87 100644 (file)
@@ -1,5 +1,5 @@
 /*  HomeBank -- Free, easy, personal accounting for everyone.
- *  Copyright (C) 1995-2018 Maxime DOYEN
+ *  Copyright (C) 1995-2019 Maxime DOYEN
  *
  *  This file is part of HomeBank.
  *
 
 #include "homebank.h"
 
-#include "rep_time.h"
+#include "rep-time.h"
 
-#include "list_operation.h"
+#include "list-operation.h"
 #include "gtk-chart.h"
 #include "gtk-dateentry.h"
 
-#include "dsp_mainwindow.h"
+#include "dsp-mainwindow.h"
 #include "ui-account.h"
 #include "ui-payee.h"
 #include "ui-category.h"
 #include "ui-filter.h"
 #include "ui-transaction.h"
+#include "ui-tag.h"
 
 
 /****************************************************************************/
@@ -52,7 +53,7 @@ extern struct Preferences *PREFS;
 
 /* prototypes */
 static void ui_reptime_action_viewlist(GtkAction *action, gpointer user_data);
-//static void ui_reptime_action_viewcolumn(GtkAction *action, gpointer user_data);
+static void ui_reptime_action_viewcolumn(GtkAction *action, gpointer user_data);
 static void ui_reptime_action_viewline(GtkAction *action, gpointer user_data);
 static void ui_reptime_action_detail(GtkAction *action, gpointer user_data);
 //static void ui_reptime_action_filter(GtkAction *action, gpointer user_data);
@@ -64,13 +65,13 @@ static void ui_reptime_list_set_cur(GtkTreeView *treeview, guint32 kcur);
 static GtkRadioActionEntry radio_entries[] = {
   { "List"    , ICONNAME_HB_VIEW_LIST  , N_("List")   , NULL,    N_("View results as list")  , 0 },
   { "Line"    , ICONNAME_HB_VIEW_LINE  , N_("Line")   , NULL,    N_("View results as lines") , 1 },
-//  { "Column"  , ICONNAME_HB_VIEW_COLUMN, N_("Column") , NULL,    N_("View results as column"), 2 },
+  { "Column"  , ICONNAME_HB_VIEW_COLUMN, N_("Column") , NULL,    N_("View results as column"), 2 },
 };
 static guint n_radio_entries = G_N_ELEMENTS (radio_entries);
 
 static GtkActionEntry entries[] = {
 //  { "Filter"  , ICONNAME_HB_FILTER    , N_("Filter") , NULL,   N_("Edit the filter"), G_CALLBACK (ui_reptime_action_filter) },
-  { "Refresh" , ICONNAME_REFRESH   , N_("Refresh"), NULL,   N_("Refresh results"), G_CALLBACK (ui_reptime_action_refresh) },
+  { "Refresh" , ICONNAME_HB_REFRESH   , N_("Refresh"), NULL,   N_("Refresh results"), G_CALLBACK (ui_reptime_action_refresh) },
 
 //  { "Export" , ICONNAME_HB_FILE_EXPORT, N_("Export")  , NULL,   N_("Export as CSV"), G_CALLBACK (ui_reptime_action_export) },
 };
@@ -92,7 +93,7 @@ static const gchar *ui_info =
 "  <toolbar name='ToolBar'>"
 "    <toolitem action='List'/>"
 "    <toolitem action='Line'/>"
-//"    <toolitem action='Column'/>"
+"    <toolitem action='Column'/>"
 "      <separator/>"
 "    <toolitem action='Detail'/>"
 "      <separator/>"
@@ -120,33 +121,34 @@ static gint ui_list_reptime_compare_func (GtkTreeModel *model, GtkTreeIter  *a,
 static GString *ui_list_reptime_to_string(GtkTreeView *treeview, gboolean clipboard);
 
 
-gchar *CYA_TIMESELECT[] = { N_("Account"), N_("Category"), N_("Payee"), NULL };
+HbKvData CYA_REPORT_SRC_TREND[] = { 
+       { REPORT_SRC_ACCOUNT,   N_("Account") }, 
+       { REPORT_SRC_CATEGORY,  N_("Category") }, 
+       { REPORT_SRC_PAYEE,             N_("Payee") },
+       { REPORT_SRC_TAG,               N_("Tag") },
+       { 0, NULL }
+};
 
 
+HbKvData CYA_REPORT_INTVL[] = { 
+       { REPORT_INTVL_DAY,             N_("Day") }, 
+       { REPORT_INTVL_WEEK,    N_("Week") },
+       { REPORT_INTVL_MONTH,   N_("Month") }, 
+       { REPORT_INTVL_QUARTER, N_("Quarter") },
+       { REPORT_INTVL_HALFYEAR,N_("Half Year") }, 
+       { REPORT_INTVL_YEAR,    N_("Year") }, 
+       { 0, NULL }
+};
 
-gchar *CYA_VIEWBY[] = { N_("Day"), N_("Week"), N_("Month"), N_("Quarter"), N_("Year"), NULL };
 
-//extern gchar *CYA_FLT_SELECT[];
+extern gchar *RA_REPORT_TIME_MODE[];
+extern gchar *CYA_ABMONTHS[];
+
 
-gchar *CYA_ABMONTHS[] =
-{
-NULL,
-N_("Jan"),
-N_("Feb"),
-N_("Mar"),
-N_("Apr"),
-N_("May"),
-N_("Jun"),
-N_("Jul"),
-N_("Aug"),
-N_("Sep"),
-N_("Oct"),
-N_("Nov"),
-N_("Dec"),
-};
 
 /* action functions -------------------- */
 
+
 static void ui_reptime_action_viewlist(GtkAction *action, gpointer user_data)
 {
 struct ui_reptime_data *data = user_data;
@@ -167,7 +169,7 @@ struct ui_reptime_data *data = user_data;
 }
 
 
-/*static void ui_reptime_action_viewcolumn(GtkAction *action, gpointer user_data)
+static void ui_reptime_action_viewcolumn(GtkAction *action, gpointer user_data)
 {
 struct ui_reptime_data *data = user_data;
 
@@ -176,7 +178,7 @@ struct ui_reptime_data *data = user_data;
        ui_reptime_sensitive(data->window, NULL);
        ui_reptime_update(data->window, NULL);
 
-}*/
+}
 
 
 static void ui_reptime_action_mode (GtkRadioAction *action, GtkRadioAction *current, gpointer user_data)
@@ -192,6 +194,9 @@ gint value;
                case 1:
                        ui_reptime_action_viewline(GTK_ACTION(action), user_data);
                        break;
+               case 2:
+                       ui_reptime_action_viewcolumn (GTK_ACTION(action), user_data);
+                       break;
        }
 }
 
@@ -240,74 +245,9 @@ struct ui_reptime_data *data = user_data;
 ** ============================================================================
 */
 
-
-
-
-/*
-** return the month list position correponding to the passed date
-*/
-static gint DateInMonth(guint32 from, guint32 opedate)
-{
-GDate *date1, *date2;
-gint pos;
-
-       //debug
-       // this return sometimes -1, -2 which is wrong
-
-       date1 = g_date_new_julian(from);
-       date2 = g_date_new_julian(opedate);
-
-       pos = ((g_date_get_year(date2) - g_date_get_year(date1)) * 12) + g_date_get_month(date2) - g_date_get_month(date1);
-
-       //g_print(" from=%d-%d ope=%d-%d => %d\n", g_date_get_month(date1), g_date_get_year(date1), g_date_get_month(date2), g_date_get_year(date2), pos);
-
-       g_date_free(date2);
-       g_date_free(date1);
-
-       return(pos);
-}
-
-static gint DateInQuarter(guint32 from, guint32 opedate)
-{
-GDate *date1, *date2;
-gint pos;
-
-       //debug
-       // this return sometimes -1, -2 which is wrong
-
-       date1 = g_date_new_julian(from);
-       date2 = g_date_new_julian(opedate);
-
-       pos = (((g_date_get_year(date2) - g_date_get_year(date1)) * 12) + g_date_get_month(date2) - g_date_get_month(date1))/3;
-
-       DB( g_print(" from=%d-%d ope=%d-%d => %d\n", g_date_get_month(date1), g_date_get_year(date1), g_date_get_month(date2), g_date_get_year(date2), pos) );
-
-       g_date_free(date2);
-       g_date_free(date1);
-
-       return(pos);
-}
 /*
 ** return the year list position correponding to the passed date
 */
-static gint DateInYear(guint32 from, guint32 opedate)
-{
-GDate *date;
-gint year_from, year_ope, pos;
-
-       date = g_date_new_julian(from);
-       year_from = g_date_get_year(date);
-       g_date_set_julian(date, opedate);
-       year_ope = g_date_get_year(date);
-       g_date_free(date);
-
-       pos = year_ope - year_from;
-
-       //g_print(" from=%d ope=%d => %d\n", year_from, year_ope, pos);
-
-       return(pos);
-}
-
 
 static void ui_reptime_date_change(GtkWidget *widget, gpointer user_data)
 {
@@ -392,163 +332,6 @@ gchar *daterange;
 }
 
 
-static void ui_reptime_detail(GtkWidget *widget, gpointer user_data)
-{
-struct ui_reptime_data *data;
-guint active = GPOINTER_TO_INT(user_data);
-guint tmpfor, tmpslice;
-gboolean showall;
-guint32 from;
-guint i;
-GList *list;
-GtkTreeModel *model;
-GtkTreeIter  iter;
-guint32 selkey;
-
-       data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
-
-       DB( g_print("\n[reptime] detail\n") );
-
-       tmpfor  = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_for));
-       tmpslice = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_view));
-       showall = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_all));
-       selkey = 0;
-
-       switch(tmpfor)
-       {
-               case FOR_REPTIME_ACCOUNT:
-                       selkey = ui_acc_comboboxentry_get_key(GTK_COMBO_BOX(data->PO_acc));
-                       break;
-               case FOR_REPTIME_CATEGORY:
-                       selkey = ui_cat_comboboxentry_get_key(GTK_COMBO_BOX(data->PO_cat));
-                       break;
-               case FOR_REPTIME_PAYEE:
-                       selkey = ui_pay_comboboxentry_get_key(GTK_COMBO_BOX(data->PO_pay));
-                       break;
-       }
-
-       //DB( g_print(" for=%d, view by=%d :: key=%d\n", tmpfor, tmpslice, selkey) );
-
-       //get our min max date
-       from = data->filter->mindate;
-       //to   = data->filter->maxdate;
-
-       /* clear and detach our model */
-       model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_detail));
-       gtk_list_store_clear (GTK_LIST_STORE(model));
-
-       if(data->detail)
-       {
-               g_object_ref(model); /* Make sure the model stays with us after the tree view unrefs it */
-               gtk_tree_view_set_model(GTK_TREE_VIEW(data->LV_detail), NULL); /* Detach model from view */
-
-               /* fill in the model */
-               list = g_queue_peek_head_link(data->txn_queue);
-               while (list != NULL)
-               {
-               Transaction *ope = list->data;
-               guint32 pos = 0;
-               gboolean include = FALSE;
-
-                       //DB( g_print(" get %s\n", ope->ope_Word) );
-
-                       switch(tmpfor)
-                       {
-                               case FOR_REPTIME_ACCOUNT:
-                                       if( selkey == ope->kacc )
-                                               include = TRUE;
-                                       break;
-                               case FOR_REPTIME_CATEGORY:
-                               {
-                               Category *catentry;
-                               
-                                       if( ope->flags & OF_SPLIT )
-                                       {
-                                       guint nbsplit = da_splits_count(ope->splits);
-                                       Split *split;
-                                       
-                                               for(i=0;i<nbsplit;i++)
-                                               {
-                                                       split = ope->splits[i];
-                                                       catentry = da_cat_get(split->kcat);
-                                                       if(catentry != NULL)    //#1340142
-                                                       {
-                                                               if( selkey == catentry->parent || selkey == catentry->key )
-                                                                       include = TRUE;
-
-                                                       }
-                                               }
-                                       }
-                                       else
-                                       {                                                       
-                                               catentry = da_cat_get(ope->kcat);
-                                               if(catentry != NULL)    //#1340142
-                                               {
-                                                       if( selkey == catentry->parent || selkey == catentry->key )
-                                                               include = TRUE;
-
-                                               }
-                                       }
-                               }
-                                       break;
-                               case FOR_REPTIME_PAYEE:
-                                       if( selkey == ope->kpay )
-                                               include = TRUE;
-                                       break;
-                       }
-
-                       if( include == TRUE || showall == TRUE )
-                       {
-
-                               switch(tmpslice)
-                               {
-                                       case GROUPBY_REPTIME_DAY:
-                                               pos = ope->date - from;
-                                               break;
-
-                                       case GROUPBY_REPTIME_WEEK:
-                                               pos = (ope->date - from)/7;
-                                               break;
-
-                                       case GROUPBY_REPTIME_MONTH:
-                                               pos = DateInMonth(from, ope->date);
-                                               break;
-
-                                       case GROUPBY_REPTIME_QUARTER:
-                                               pos = DateInQuarter(from, ope->date);
-                                               break;
-
-                                       case GROUPBY_REPTIME_YEAR:
-                                               pos = DateInYear(from, ope->date);
-                                               break;
-                               }
-
-                               DB( g_print("** pos=%d\n", pos) );
-
-                               //insert
-                               if( pos == active )
-                               {
-
-                                       gtk_list_store_append (GTK_LIST_STORE(model), &iter);
-                                       gtk_list_store_set (GTK_LIST_STORE(model), &iter,
-                                               LST_DSPOPE_DATAS, ope,
-                                               -1);
-                               }
-
-
-                       }
-
-                       list = g_list_next(list);
-               }
-
-               /* Re-attach model to view */
-               gtk_tree_view_set_model(GTK_TREE_VIEW(data->LV_detail), model);
-               g_object_unref(model);
-
-               gtk_tree_view_columns_autosize( GTK_TREE_VIEW(data->LV_detail) );
-       }
-
-}
 
 
 static void ui_reptime_update(GtkWidget *widget, gpointer user_data)
@@ -556,9 +339,8 @@ static void ui_reptime_update(GtkWidget *widget, gpointer user_data)
 struct ui_reptime_data *data;
 GtkTreeModel *model;
 gint page;
-gint tmpfor;
+gint tmpsrc;
 gchar *title;
-//gboolean xval;
 
        DB( g_print("\n[reptime] update\n") );
 
@@ -567,15 +349,14 @@ gchar *title;
 
        model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_report));
        //byamount = 0;
-       tmpfor  = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_for));
-       //tmpslice = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_view));
+       tmpsrc  = hbtk_combo_box_get_active_id(GTK_COMBO_BOX_TEXT(data->CY_src));
+       //tmpintvl = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_intvl));
 
        // ensure not exp & inc for piechart
        page = gtk_notebook_get_current_page(GTK_NOTEBOOK(data->GR_result));
 
        DB( g_print(" page %d\n\n", page) );
-       //DB( g_print(" tmpslice %d\n\n", tmpslice) );
-
+       //DB( g_print(" tmpintvl %d\n\n", tmpintvl) );
 
        //column = LST_REPTIME_POS;
        //DB( g_print(" sort on column %d\n\n", column) );
@@ -584,8 +365,11 @@ gchar *title;
        gtk_chart_show_legend(GTK_CHART(data->RE_line), FALSE, FALSE);
        gtk_chart_show_xval(GTK_CHART(data->RE_line), TRUE);
 
-       ////TRANSLATORS: example 'Expense by Category'
-       title = g_strdup_printf(_("%s Over Time"), _(CYA_TIMESELECT[tmpfor]) );
+       //visible = (tmpmode == REPORT_RESULT_TOTAL) ? TRUE : FALSE;
+       //gtk_chart_show_average(GTK_CHART(data->RE_line), data->average, visible);
+
+       //TRANSLATORS: example 'Category Over Time'
+       title = g_strdup_printf(_("%s Over Time"), hbtk_get_label(CYA_REPORT_SRC_TREND, tmpsrc) );
        gtk_chart_set_datas(GTK_CHART(data->RE_line), model, LST_REPTIME_AMOUNT, title, NULL);
        g_free(title);
        
@@ -626,15 +410,15 @@ gchar *filename = NULL;
 GString *node;
 GIOChannel *io;
 gchar *name;
-gint tmpfor;
+gint tmpsrc;
 
        DB( g_print("\n[reptime] export result csv\n") );
 
        data = user_data;
        //data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
 
-       tmpfor  = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_for));
-       name = g_strdup_printf("hb-reptime_%s.csv", CYA_TIMESELECT[tmpfor]);
+       tmpsrc  = hbtk_combo_box_get_active_id(GTK_COMBO_BOX_TEXT(data->CY_src));
+       name = g_strdup_printf("hb-reptime_%s.csv", hbtk_get_label(CYA_REPORT_SRC_TREND, tmpsrc) );
 
        if( ui_file_chooser_csv(GTK_WINDOW(data->window), GTK_FILE_CHOOSER_ACTION_SAVE, &filename, name) == TRUE )
        {
@@ -680,15 +464,15 @@ gchar *filename = NULL;
 GString *node;
 GIOChannel *io;
 gchar *name;
-gint tmpfor;
+gint tmpsrc;
 
        DB( g_print("\n[reptime] export detail csv\n") );
 
        data = user_data;
        //data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
 
-       tmpfor  = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_for));
-       name = g_strdup_printf("hb-reptime-detail_%s.csv", CYA_TIMESELECT[tmpfor]);
+       tmpsrc  = hbtk_combo_box_get_active_id(GTK_COMBO_BOX_TEXT(data->CY_src));
+       name = g_strdup_printf("hb-reptime-detail_%s.csv", hbtk_get_label(CYA_REPORT_SRC_TREND, tmpsrc) );
 
        if( ui_file_chooser_csv(GTK_WINDOW(data->window), GTK_FILE_CHOOSER_ACTION_SAVE, &filename, name) == TRUE )
        {
@@ -714,27 +498,31 @@ gint tmpfor;
 static void ui_reptime_update_for(GtkWidget *widget, gpointer user_data)
 {
 struct ui_reptime_data *data;
-gint tmpfor;
+gint tmpsrc;
 gboolean visible;
 
        DB( g_print("\n[reptime] update for\n") );
 
        data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
 
-       tmpfor  = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_for));
+       tmpsrc  = hbtk_combo_box_get_active_id(GTK_COMBO_BOX_TEXT(data->CY_src));
 
-       visible = tmpfor == 0 ? TRUE : FALSE;
+       visible = tmpsrc == REPORT_SRC_ACCOUNT ? TRUE : FALSE;
        hb_widget_visible(data->LB_acc, visible);
        hb_widget_visible(data->PO_acc, visible);
 
-       visible = tmpfor == 1 ? TRUE : FALSE;
+       visible = tmpsrc == REPORT_SRC_CATEGORY ? TRUE : FALSE;
        hb_widget_visible(data->LB_cat, visible);
        hb_widget_visible(data->PO_cat, visible);
        
-       visible = tmpfor == 2 ? TRUE : FALSE;
+       visible = tmpsrc == REPORT_SRC_PAYEE ? TRUE : FALSE;
        hb_widget_visible(data->LB_pay, visible);
        hb_widget_visible(data->PO_pay, visible);
 
+       visible = tmpsrc == REPORT_SRC_TAG ? TRUE : FALSE;
+       hb_widget_visible(data->LB_tag, visible);
+       hb_widget_visible(data->PO_tag, visible);
+       
 }
 
 
@@ -753,10 +541,106 @@ struct ui_reptime_data *data;
 }
 
 
+//TODO: this is temporary, as at end we will enable filter 
+static void ui_reptime_compute_set_filter(Filter *flt, gint tmpsrc, guint32 selkey)
+{
+       //inactive all filters
+       flt->option[FILTER_CATEGORY] = 0;
+       flt->option[FILTER_PAYEE] = 0;
+       flt->option[FILTER_ACCOUNT] = 0;
+       flt->option[FILTER_TEXT] = 0;
+
+       switch(tmpsrc)
+       {
+               case REPORT_SRC_ACCOUNT:
+                       flt->option[FILTER_ACCOUNT] = 1;
+                       filter_status_acc_clear_except(flt, selkey);
+                       break;
+               case REPORT_SRC_CATEGORY:
+                       flt->option[FILTER_CATEGORY] = 1;
+                       filter_status_cat_clear_except(flt, selkey);
+                       break;
+               case REPORT_SRC_PAYEE:
+                       flt->option[FILTER_PAYEE] = 1;
+                       filter_status_pay_clear_except(flt, selkey);
+                       break;
+               case REPORT_SRC_TAG:
+                       flt->option[FILTER_TEXT] = 1;
+                       filter_set_tag_by_id(flt, selkey);
+                       break;
+       }
+       
+
+}
+
+
+static void ui_reptime_detail(GtkWidget *widget, gpointer user_data)
+{
+struct ui_reptime_data *data;
+guint active = GPOINTER_TO_INT(user_data);
+guint tmpintvl;
+guint32 from;
+GList *list;
+GtkTreeModel *model;
+GtkTreeIter  iter;
+
+       data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
+
+       DB( g_print("\n[reptime] detail\n") );
+
+       //tmpsrc  = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_src));
+       tmpintvl = hbtk_combo_box_get_active_id(GTK_COMBO_BOX_TEXT(data->CY_intvl));
+
+       //ui_reptime_compute_set_filter was already called here
+       
+       //get our min max date
+       from = data->filter->mindate;
+       //to   = data->filter->maxdate;
+
+       /* clear and detach our model */
+       model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_detail));
+       gtk_list_store_clear (GTK_LIST_STORE(model));
+
+       if(data->detail)
+       {
+               g_object_ref(model); /* Make sure the model stays with us after the tree view unrefs it */
+               gtk_tree_view_set_model(GTK_TREE_VIEW(data->LV_detail), NULL); /* Detach model from view */
+
+               /* fill in the model */
+               list = g_queue_peek_head_link(data->txn_queue);
+               while (list != NULL)
+               {
+               Transaction *ope = list->data;
+               guint pos;
+
+                       if(filter_txn_match(data->filter, ope) == 1)
+                       {
+                               pos = report_interval_get_pos(tmpintvl, from, ope);
+                               if( pos == active )
+                               {
+                                       gtk_list_store_insert_with_values (GTK_LIST_STORE(model), &iter, -1,
+                                               LST_DSPOPE_DATAS, ope,
+                                               -1);
+                               }
+                       }
+
+                       list = g_list_next(list);
+               }
+
+               /* Re-attach model to view */
+               gtk_tree_view_set_model(GTK_TREE_VIEW(data->LV_detail), model);
+               g_object_unref(model);
+
+               gtk_tree_view_columns_autosize( GTK_TREE_VIEW(data->LV_detail) );
+       }
+
+}
+
+
 static void ui_reptime_compute(GtkWidget *widget, gpointer user_data)
 {
 struct ui_reptime_data *data;
-gint tmpfor, tmpslice;
+gint tmpsrc, tmpintvl, range, showempty;
 guint32 from, to;
 gboolean cumul;
 gboolean showall;
@@ -768,7 +652,6 @@ GtkTreeIter  iter;
 GList *list;
 gint id;
 guint n_result, i;
-GDate *date1, *date2;
 gdouble *tmp_amount;
 guint32 selkey;
 
@@ -776,34 +659,50 @@ guint32 selkey;
 
        data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
 
-       tmpfor  = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_for));
-       tmpslice = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_view));
-       cumul = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_cumul));
-       showall = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_all));
+       tmpsrc    = hbtk_combo_box_get_active_id(GTK_COMBO_BOX_TEXT(data->CY_src));
+       tmpintvl  = hbtk_combo_box_get_active_id(GTK_COMBO_BOX_TEXT(data->CY_intvl));
+       cumul     = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_cumul));
+       showall   = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_all));
+       range     = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_range));
+       showempty = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_showempty));
+
        selkey = 0;
        
        data->accnum = 0;
-
-       switch(tmpfor)
+       switch(tmpsrc)
        {
-               case FOR_REPTIME_ACCOUNT:
+               case REPORT_SRC_ACCOUNT:
                        selkey = ui_acc_comboboxentry_get_key(GTK_COMBO_BOX(data->PO_acc));
                        if(showall == FALSE) 
                                data->accnum = selkey;
                        break;
-               case FOR_REPTIME_CATEGORY:
+               case REPORT_SRC_CATEGORY:
                        selkey = ui_cat_comboboxentry_get_key(GTK_COMBO_BOX(data->PO_cat));
                        break;
-               case FOR_REPTIME_PAYEE:
+               case REPORT_SRC_PAYEE:
                        selkey = ui_pay_comboboxentry_get_key(GTK_COMBO_BOX(data->PO_pay));
                        break;
+               case REPORT_SRC_TAG:
+                       selkey = hbtk_combo_box_get_active_id(GTK_COMBO_BOX_TEXT(data->PO_tag));
+                       break;
        }
 
-       DB( g_print(" for=%d, view by=%d :: key=%d\n", tmpfor, tmpslice, selkey) );
+       if( showall == TRUE )
+       {
+               data->filter->option[FILTER_CATEGORY] = 0;
+               data->filter->option[FILTER_PAYEE] = 0;
+               data->filter->option[FILTER_ACCOUNT] = 0;
+               data->filter->option[FILTER_TEXT] = 0;
+       }
+       else    
+               ui_reptime_compute_set_filter(data->filter, tmpsrc, selkey);
+
+       
+       DB( g_print(" source=%d-%s, intvl=%d-%s:: key=%d\n", tmpsrc, hbtk_get_label(CYA_REPORT_SRC_TREND, tmpsrc), tmpintvl, hbtk_get_label(CYA_REPORT_INTVL, tmpintvl), selkey) );
 
        //to remove > 5.0.2
        //#1715532 5.0.5: no... but only showall
-       if(showall == TRUE)
+       if( (showall == TRUE) && (range == FLT_RANGE_ALLDATE) )
        {
                filter_preset_daterange_set(data->filter, data->filter->range, data->accnum);
                ui_reptime_update_quickdate(widget, NULL);
@@ -817,180 +716,43 @@ guint32 selkey;
        g_queue_free (data->txn_queue);
        data->txn_queue = hbfile_transaction_get_partial(data->filter->mindate, data->filter->maxdate);
 
+       n_result = report_interval_count(tmpintvl, from, to);
 
-       /* count number or results */
-       switch(tmpslice)
-       {
-               case GROUPBY_REPTIME_DAY:
-                       n_result = 1 + (to - from);
-                       break;
-               case GROUPBY_REPTIME_WEEK:
-                       n_result = 1 + ((to - from) / 7);
-                       break;
-               case GROUPBY_REPTIME_MONTH:
-                       date1 = g_date_new_julian(from);
-                       date2 = g_date_new_julian(to);
-                       n_result = 1 + ((g_date_get_year(date2) - g_date_get_year(date1)) * 12) + g_date_get_month(date2) - g_date_get_month(date1);
-                       g_date_free(date2);
-                       g_date_free(date1);
-                       break;
-               case GROUPBY_REPTIME_QUARTER:
-                       date1 = g_date_new_julian(from);
-                       date2 = g_date_new_julian(to);
-                       n_result = 1 + (((g_date_get_year(date2) - g_date_get_year(date1)) * 12) + g_date_get_month(date2) - g_date_get_month(date1))/3;
-                       g_date_free(date2);
-                       g_date_free(date1);
-                       break;
-               case GROUPBY_REPTIME_YEAR:
-                       date1 = g_date_new_julian(from);
-                       date2 = g_date_new_julian(to);
-                       n_result = 1 + g_date_get_year(date2) - g_date_get_year(date1);
-                       g_date_free(date2);
-                       g_date_free(date1);
-                       break;
-               default:
-                       n_result = 0;
-       }
-
-       DB( g_print(" %s :: n_result=%d\n", CYA_TIMESELECT[tmpfor], n_result) );
+       DB( g_print(" %s :: n_result=%d\n", hbtk_get_label(CYA_REPORT_SRC_TREND, tmpsrc), n_result) );
 
        /* allocate some memory */
-
        tmp_amount = g_malloc0((n_result+2) * sizeof(gdouble));
 
        if(tmp_amount)
        {
-       guint32 kcur;
-               
-               /* set currency */
-               kcur = GLOBALS->kcur;
-               if( (tmpfor == FOR_REPTIME_ACCOUNT) && (showall == FALSE) )
-               {
-               Account *acc = da_acc_get(selkey);
-
-                       if( acc != NULL )
-                       {
-                               kcur = acc->kcur;
-                       }
-               }
-               
-               ui_reptime_list_set_cur(GTK_TREE_VIEW(data->LV_report), kcur);
-               gtk_chart_set_currency(GTK_CHART(data->RE_line), kcur);
-               
-       /* compute the results */
                list = g_queue_peek_head_link(data->txn_queue);
                while (list != NULL)
                {
                Transaction *ope = list->data;
-               gboolean include = FALSE;
 
-                       //debug
-                       DB( g_print("** testing '%s', cat=%d==> %d\n", ope->memo, ope->kcat, filter_test(data->filter, ope)) );
-
-                       // add usage of payee or category
-                       switch(tmpfor)
-                       {
-                               case FOR_REPTIME_ACCOUNT:
-                                       if( selkey == ope->kacc )
-                                               include = TRUE;
-                                       break;
-                               case FOR_REPTIME_CATEGORY:
-                               {
-                               Category *catentry;
-                               
-                                       if( ope->flags & OF_SPLIT )
-                                       {
-                                       guint nbsplit = da_splits_count(ope->splits);
-                                       Split *split;
-                                       
-                                               for(i=0;i<nbsplit;i++)
-                                               {
-                                                       split = ope->splits[i];
-                                                       catentry = da_cat_get(split->kcat);
-                                                       if(catentry != NULL)    //#1340142
-                                                       {
-                                                               if( selkey == catentry->parent || selkey == catentry->key )
-                                                                       include = TRUE;
-                                                       }
-                                               }
-                                       }
-                                       else
-                                       {                                                       
-                                               catentry = da_cat_get(ope->kcat);
-                                               if(catentry != NULL)    //#1340142
-                                               {
-                                                       if( selkey == catentry->parent || selkey == catentry->key )
-                                                               include = TRUE;
-                                               }
-                                       }
-                                       
-                               }
-                                       break;
-                               case FOR_REPTIME_PAYEE:
-                                       if( selkey == ope->kpay )
-                                               include = TRUE;
-                                       break;
-                       }
+                       //DB( g_print("\n** testing '%s', cat=%d==> %d\n", ope->memo, ope->kcat, filter_txn_match(data->filter, ope)) );
 
-                       if( include == TRUE || showall == TRUE)
+                       if( (filter_txn_match(data->filter, ope) == 1) )
                        {
-                       guint32 pos = 0;
+                       guint pos;
                        gdouble trn_amount;
-                       
-                               switch(tmpslice)
-                               {
-                                       case GROUPBY_REPTIME_DAY:
-                                               pos = ope->date - from;
-                                               break;
-
-                                       case GROUPBY_REPTIME_WEEK:
-                                               pos = (ope->date - from)/7;
-                                               break;
-
-                                       case GROUPBY_REPTIME_MONTH:
-                                               pos = DateInMonth(from, ope->date);
-                                               break;
 
-                                       case GROUPBY_REPTIME_QUARTER:
-                                               pos = DateInQuarter(from, ope->date);
-                                               break;
-
-                                       case GROUPBY_REPTIME_YEAR:
-                                               pos = DateInYear(from, ope->date);
-                                               break;
-                               }
+                               trn_amount = report_txn_amount_get(data->filter, ope);
 
-                               trn_amount = 0.0;
+                               if( tmpsrc == REPORT_SRC_ACCOUNT && showall == TRUE )
+                                       trn_amount = hb_amount_base(trn_amount, ope->kcur);
                                
-                               if( (tmpfor == FOR_REPTIME_CATEGORY) && (ope->flags & OF_SPLIT) )
+                               pos = report_interval_get_pos(tmpintvl, from, ope);
+                               if( pos <= n_result )
                                {
-                               guint nbsplit = da_splits_count(ope->splits);
-                               Split *split;
-                               Category *catentry;
-                               
-                                       for(i=0;i<nbsplit;i++)
-                                       {
-                                               split = ope->splits[i];
-                                               catentry = da_cat_get(split->kcat);
-                                               if(catentry != NULL)    //#1340142
-                                               {
-                                                       //#1678230 miss showall
-                                                       if( showall == TRUE || selkey == catentry->parent || selkey == catentry->key )
-                                                               trn_amount += split->amount;
-                                               }
-                                       }
+                                       DB( g_print("** pos=%d : add of %.2f\n", pos, trn_amount) );
+                                       tmp_amount[pos] += trn_amount;
                                }
                                else
-                                       trn_amount = ope->amount;
-
-                               trn_amount = hb_amount_base(trn_amount, ope->kcur);
-
-                               DB( g_print("** pos=%d : add of %.2f\n", pos, trn_amount) );
-
-                               tmp_amount[pos] += trn_amount;
-
+                               {
+                                       DB( g_print("** pos=%d : invalid offset\n", pos) );
+                               }
                        }
-
                        list = g_list_next(list);
                }
 
@@ -1005,83 +767,49 @@ guint32 selkey;
                /* insert into the treeview */
                for(i=0, id=0; i<n_result; i++)
                {
-               gchar *name, *fullcatname;
+               gchar intvlname[64];
                gdouble value;
-               gchar buffer[64];
-               GDate *date;
 
-                       name = NULL;
-                       fullcatname = NULL;
+                       if( !showempty && tmp_amount[i] == 0 )
+                               continue;
 
+                       report_interval_snprint_name(intvlname, sizeof(intvlname)-1, tmpintvl, from, i);
 
                        DB( g_print("try to insert item %d\n", i) );
 
-                       /* get the result name */
-                       switch(tmpslice)
-                       {
-                               case GROUPBY_REPTIME_DAY:
-                                       date = g_date_new_julian (from + i);
-                                       g_date_strftime (buffer, 63, PREFS->date_format, date);
-                                       g_date_free(date);
-                                       name = buffer;
-                                       break;
-
-                               case GROUPBY_REPTIME_WEEK:
-                                       date = g_date_new_julian(from);
-                                       g_date_add_days(date, i*7);
-                                       //g_snprintf(buffer, 63, "%d-%02d", g_date_get_year(date), g_date_get_month(date));
-                                       g_snprintf(buffer, 63, "%d-%d", g_date_get_year(date), g_date_get_monday_week_of_year(date));
-                                       g_date_free(date);
-                                       name = buffer;
-                                       break;
-
-                               case GROUPBY_REPTIME_MONTH:
-                                       date = g_date_new_julian(from);
-                                       g_date_add_months(date, i);
-                                       //g_snprintf(buffer, 63, "%d-%02d", g_date_get_year(date), g_date_get_month(date));
-                                       g_snprintf(buffer, 63, "%d-%s", g_date_get_year(date), _(CYA_ABMONTHS[g_date_get_month(date)]));
-                                       g_date_free(date);
-                                       name = buffer;
-                                       break;
-
-                               case GROUPBY_REPTIME_QUARTER:
-                                       date = g_date_new_julian(from);
-                                       g_date_add_months(date, i*3);
-                                       //g_snprintf(buffer, 63, "%d-%02d", g_date_get_year(date), g_date_get_month(date));
-                                       g_snprintf(buffer, 63, "%d-%d", g_date_get_year(date), ((g_date_get_month(date)-1)/3)+1);
-                                       g_date_free(date);
-                                       name = buffer;
-                                       break;
-
-                               case GROUPBY_REPTIME_YEAR:
-                                       date = g_date_new_julian(from);
-                                       g_date_add_years(date, i);
-                                       g_snprintf(buffer, 63, "%d", g_date_get_year(date));
-                                       g_date_free(date);
-                                       name = buffer;
-                                       break;
-                       }
-
                        cumulation += tmp_amount[i];
-                       value = cumul == TRUE ? cumulation : tmp_amount[i];
+                       value = (cumul == TRUE) ? cumulation : tmp_amount[i];
 
+                       DB( g_print(" inserting %2d, '%s', %9.2f\n", i, intvlname, value) );
 
-                       //DB( g_print(" inserting %2d, '%s', %9.2f\n", i, name, value) );
-
-               gtk_list_store_append (GTK_LIST_STORE(model), &iter);
-               gtk_list_store_set (GTK_LIST_STORE(model), &iter,
+               gtk_list_store_insert_with_values (GTK_LIST_STORE(model), &iter, -1, 
                                LST_REPTIME_POS, id++,
                                LST_REPTIME_KEY, i,
-                               LST_REPTIME_TITLE, name,
+                               LST_REPTIME_TITLE, intvlname,
                                LST_REPTIME_AMOUNT, value,
                                -1);
 
-                       g_free(fullcatname);
                }
+
+               // set chart and listview currency
+               guint32 kcur = GLOBALS->kcur;
+               if( (showall == FALSE) && (tmpsrc == REPORT_SRC_ACCOUNT) )
+               {
+               Account *acc = da_acc_get(selkey);
+                       if( acc != NULL )
+                               kcur = acc->kcur;
+
+                       gtk_chart_set_overdrawn(GTK_CHART(data->RE_line), acc->minimum);
+               }
+
+               ui_reptime_list_set_cur(GTK_TREE_VIEW(data->LV_report), kcur);
+               gtk_chart_set_currency(GTK_CHART(data->RE_line), kcur);
+
                
                /* update column 0 title */
                GtkTreeViewColumn *column = gtk_tree_view_get_column( GTK_TREE_VIEW(data->LV_report), 0);
-               gtk_tree_view_column_set_title(column, _(CYA_VIEWBY[tmpslice]));
+               if(column)
+                       gtk_tree_view_column_set_title(column, hbtk_get_label(CYA_REPORT_INTVL, tmpintvl) );
 
                gtk_tree_view_columns_autosize (GTK_TREE_VIEW(data->LV_report));
 
@@ -1090,15 +818,18 @@ guint32 selkey;
                g_object_unref(model);
                
                //update average
+               gtk_label_set_text(GTK_LABEL(data->TX_info), "");
+
+               if( cumul == TRUE )
                {
                gchar *info;
                gchar   buf[128];
 
                        average = cumulation / n_result;
+                       data->average = average;
 
                        hb_strfmon(buf, 127, average, kcur, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_minor)) );
 
-                       ////TRANSLATORS: count of transaction in balancedrawn / count of total transaction under abalancedrawn amount threshold
                        info = g_strdup_printf(_("Average: %s"), buf);
                        gtk_label_set_text(GTK_LABEL(data->TX_info), info);
                        g_free(info);
@@ -1109,16 +840,9 @@ guint32 selkey;
        g_free(tmp_amount);
        
        ui_reptime_update(widget, user_data);
-
 }
 
 
-
-
-
-/*
-** update sensitivity
-*/
 static void ui_reptime_sensitive(GtkWidget *widget, gpointer user_data)
 {
 struct ui_reptime_data *data;
@@ -1286,6 +1010,7 @@ gboolean showall;
        gtk_widget_set_sensitive(GTK_WIDGET(data->PO_acc), showall^1);
        gtk_widget_set_sensitive(GTK_WIDGET(data->PO_cat), showall^1);
        gtk_widget_set_sensitive(GTK_WIDGET(data->PO_pay), showall^1);
+       gtk_widget_set_sensitive(GTK_WIDGET(data->PO_tag), showall^1);
 
        ui_reptime_compute(widget, data);
 
@@ -1302,14 +1027,15 @@ static void ui_reptime_setup(struct ui_reptime_data *data, guint32 accnum)
 
        data->txn_queue = g_queue_new ();
 
-       data->filter = da_filter_malloc();
-       filter_default_all_set(data->filter);
+       data->filter = da_flt_malloc();
+       filter_reset(data->filter);
 
        data->detail = 0;
 
        /* 3.4 : make int transfer out of stats */
-       data->filter->option[FILTER_PAYMODE] = 1;
-       data->filter->paymode[PAYMODE_INTXFER] = FALSE;
+       //todo: for compatibility with < 5.3, keep this unset, but normally it should be set
+       //data->filter->option[FILTER_PAYMODE] = 1;
+       //data->filter->paymode[PAYMODE_INTXFER] = FALSE;
 
        filter_preset_daterange_set(data->filter, PREFS->date_range_rep, data->accnum);
        
@@ -1336,6 +1062,8 @@ static void ui_reptime_setup(struct ui_reptime_data *data, guint32 accnum)
        ui_cat_comboboxentry_populate(GTK_COMBO_BOX(data->PO_cat), GLOBALS->h_cat);
        gtk_combo_box_set_active(GTK_COMBO_BOX(data->PO_cat), 0);
 
+       ui_tag_combobox_populate(GTK_COMBO_BOX_TEXT(data->PO_tag));
+       
        DB( g_print(" all ok\n") );
 
 }
@@ -1375,7 +1103,7 @@ struct WinGeometry *wg;
 
        g_queue_free (data->txn_queue);
 
-       da_filter_free(data->filter);
+       da_flt_free(data->filter);
 
        g_free(data);
 
@@ -1454,10 +1182,11 @@ GError *error = NULL;
        gtk_grid_attach (GTK_GRID (table), label, 0, row, 3, 1);
 
        row++;
-       label = make_label_widget(_("_For:"));
+       label = make_label_widget(_("_View by:"));
        gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
-       widget = make_cycle(label, CYA_TIMESELECT);
-       data->CY_for = widget;
+       //widget = make_cycle(label, CYA_TIMESELECT);
+       widget = hbtk_combo_box_new_with_data(label, CYA_REPORT_SRC_TREND);
+       data->CY_src = widget;
        gtk_grid_attach (GTK_GRID (table), widget, 2, row, 1, 1);
 
        row++;
@@ -1484,6 +1213,14 @@ GError *error = NULL;
        data->PO_pay = widget;
        gtk_grid_attach (GTK_GRID (table), widget, 2, row, 1, 1);
 
+       row++;
+       label = make_label_widget(_("_Tag:"));
+       data->LB_tag = label;
+       gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
+       widget = ui_tag_combobox_new(label);
+       data->PO_tag = widget;
+       gtk_grid_attach (GTK_GRID (table), widget, 2, row, 1, 1);
+
        row++;
        widget = gtk_check_button_new_with_mnemonic (_("Select _all"));
        data->CM_all = widget;
@@ -1495,12 +1232,19 @@ GError *error = NULL;
        gtk_grid_attach (GTK_GRID (table), widget, 2, row, 1, 1);
 
        row++;
-       label = make_label_widget(_("_View by:"));
+       label = make_label_widget(_("Inter_val:"));
        gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
-       widget = make_cycle(label, CYA_VIEWBY);
-       data->CY_view = widget;
+       //widget = make_cycle(label, CYA_REPORT_INTVL);
+       widget = hbtk_combo_box_new_with_data(label, CYA_REPORT_INTVL);
+       data->CY_intvl = widget;
        gtk_grid_attach (GTK_GRID (table), widget, 2, row, 1, 1);
 
+       row++;
+       widget = gtk_check_button_new_with_mnemonic (_("Show empty line"));
+       data->CM_showempty = widget;
+       gtk_grid_attach (GTK_GRID (table), widget, 2, row, 1, 1);
+
+
        row++;
        widget = gtk_check_button_new_with_mnemonic (_("Euro _minor"));
        data->CM_minor = widget;
@@ -1514,7 +1258,6 @@ GError *error = NULL;
        data->RG_zoomx = widget;
        gtk_grid_attach (GTK_GRID (table), widget, 2, row, 1, 1);
 
-
        row++;
        widget = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
        gtk_grid_attach (GTK_GRID (table), widget, 0, row, 3, 1);
@@ -1695,7 +1438,8 @@ GError *error = NULL;
        //todo:should move this
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_minor), GLOBALS->minor);
 
-       gtk_combo_box_set_active(GTK_COMBO_BOX(data->CY_view), 1);
+       //duplicate, see below
+       //gtk_combo_box_set_active(GTK_COMBO_BOX(data->CY_intvl), 1);
 
        /* attach our minor to treeview */
        g_object_set_data(G_OBJECT(gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_report))), "minor", (gpointer)data->CM_minor);
@@ -1703,20 +1447,22 @@ GError *error = NULL;
 
 
 
-               /* signal connect */
-    g_signal_connect (window, "delete-event", G_CALLBACK (ui_reptime_dispose), (gpointer)data);
+       /* signal connect */
+       g_signal_connect (window, "delete-event", G_CALLBACK (ui_reptime_dispose), (gpointer)data);
 
        g_signal_connect (data->CM_cumul, "toggled", G_CALLBACK (ui_reptime_compute), NULL);
 
        g_signal_connect (data->CM_minor, "toggled", G_CALLBACK (ui_reptime_toggle_minor), NULL);
 
-    data->handler_id[HID_REPTIME_MINDATE] = g_signal_connect (data->PO_mindate, "changed", G_CALLBACK (ui_reptime_date_change), (gpointer)data);
-    data->handler_id[HID_REPTIME_MAXDATE] = g_signal_connect (data->PO_maxdate, "changed", G_CALLBACK (ui_reptime_date_change), (gpointer)data);
+       data->handler_id[HID_REPTIME_MINDATE] = g_signal_connect (data->PO_mindate, "changed", G_CALLBACK (ui_reptime_date_change), (gpointer)data);
+       data->handler_id[HID_REPTIME_MAXDATE] = g_signal_connect (data->PO_maxdate, "changed", G_CALLBACK (ui_reptime_date_change), (gpointer)data);
 
        data->handler_id[HID_REPTIME_RANGE] = g_signal_connect (data->CY_range, "changed", G_CALLBACK (ui_reptime_range_change), NULL);
 
-       g_signal_connect (data->CY_for, "changed", G_CALLBACK (ui_reptime_for), (gpointer)data);
-       data->handler_id[HID_REPTIME_VIEW] = g_signal_connect (data->CY_view, "changed", G_CALLBACK (ui_reptime_compute), (gpointer)data);
+       g_signal_connect (data->CY_src, "changed", G_CALLBACK (ui_reptime_for), (gpointer)data);
+       data->handler_id[HID_REPTIME_VIEW] = g_signal_connect (data->CY_intvl, "changed", G_CALLBACK (ui_reptime_compute), (gpointer)data);
+
+       g_signal_connect (data->CM_showempty, "toggled", G_CALLBACK (ui_reptime_compute), NULL);
 
        //setup, init and show window
        ui_reptime_setup(data, accnum);
@@ -1725,6 +1471,7 @@ GError *error = NULL;
        g_signal_connect (data->PO_acc, "changed", G_CALLBACK (ui_reptime_compute), NULL);
        g_signal_connect (data->PO_cat, "changed", G_CALLBACK (ui_reptime_compute), NULL);
        g_signal_connect (data->PO_pay, "changed", G_CALLBACK (ui_reptime_compute), NULL);
+       g_signal_connect (data->PO_tag, "changed", G_CALLBACK (ui_reptime_compute), NULL);
 
        g_signal_connect (data->RG_zoomx, "value-changed", G_CALLBACK (ui_reptime_zoomx_callback), NULL);
 
@@ -1745,7 +1492,8 @@ GError *error = NULL;
        gtk_window_move(GTK_WINDOW(window), wg->l, wg->t);
        gtk_window_resize(GTK_WINDOW(window), wg->w, wg->h);
 
-       gtk_combo_box_set_active(GTK_COMBO_BOX(data->CY_view), GROUPBY_REPTIME_MONTH);
+       //todo: !! here
+       hbtk_combo_box_set_active_id(GTK_COMBO_BOX_TEXT(data->CY_intvl), REPORT_INTVL_MONTH);
 
        gtk_widget_show_all (window);
 
@@ -1773,6 +1521,7 @@ GError *error = NULL;
        return window;
 }
 
+
 /*
 ** ============================================================================
 */
@@ -1873,7 +1622,6 @@ static void ui_reptime_list_set_cur(GtkTreeView *treeview, guint32 kcur)
 }
 
 
-
 /*
 ** create our statistic list
 */
@@ -1903,6 +1651,7 @@ GtkTreeViewColumn  *column;
        column = gtk_tree_view_column_new();
        gtk_tree_view_column_set_title(column, _("Time slice"));
        renderer = gtk_cell_renderer_text_new ();
+       g_object_set(renderer, "xalign", 1.0, NULL);
        gtk_tree_view_column_pack_start(column, renderer, TRUE);
        //gtk_tree_view_column_set_cell_data_func(column, renderer, ope_result_cell_data_function, NULL, NULL);
        gtk_tree_view_column_add_attribute(column, renderer, "text", LST_REPTIME_TITLE);
@@ -1956,3 +1705,5 @@ gdouble val1, val2;
     return retval;
   }
 
+
+
This page took 0.056194 seconds and 4 git commands to generate.