X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fhomebank;a=blobdiff_plain;f=src%2Fgtk-chart.c;h=12a1bb741227028065dd5f1efd41bf9d69782ded;hp=fdd30babf644469d25608b3564ae60dc20d66578;hb=HEAD;hpb=d11c8dd3275ed2a4a35598e69c0804dcf9435766 diff --git a/src/gtk-chart.c b/src/gtk-chart.c index fdd30ba..12a1bb7 100644 --- a/src/gtk-chart.c +++ b/src/gtk-chart.c @@ -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. * @@ -27,6 +27,7 @@ #include "gtk-chart-colors.h" #include "gtk-chart.h" + #define MYDEBUG 0 @@ -908,6 +909,28 @@ int tw, th; } } + /* average */ + if( chart->show_average ) + { + if( chart->average < 0 ) + { + y = 0.5 + chart->oy + (ABS(chart->average)/chart->range) * chart->graph.height; + } + else + { + y = 0.5 + chart->oy - (ABS(chart->average)/chart->range) * chart->graph.height; + } + + DB( g_print(" draw average: x%d, y%f, w%d\n", chart->l, y, chart->w) ); + + cairo_user_set_rgbacol(cr, &global_colors[THTEXT], 1.0); + cairo_set_line_width(cr, 1.0); + cairo_set_dash (cr, dashed3, 1, 0); + cairo_move_to(cr, chart->graph.x, y); + cairo_line_to (cr, chart->graph.x + chart->graph.width, y); + cairo_stroke(cr); + } + g_object_unref (layout); cairo_destroy(cr); } @@ -1231,10 +1254,35 @@ gint first, i; x += chart->blkw; } -/* overdrawn */ + /* average */ + + if( chart->show_average ) + { + if( chart->average < 0 ) + { + y = 0.5 + chart->oy + (ABS(chart->average)/chart->range) * chart->graph.height; + } + else + { + y = 0.5 + chart->oy - (ABS(chart->average)/chart->range) * chart->graph.height; + } - DB( g_print(" min=%.2f range=%.2f\n", chart->min, chart->range) ); + y2 = (ABS(chart->min)/chart->range) * chart->graph.height - (y - chart->oy) + 1; + + DB( g_print(" draw average: x%d, y%f, w%d, h%f\n", chart->l, y, chart->w, y2) ); + cairo_user_set_rgbacol(cr, &global_colors[THTEXT], 1.0); + cairo_set_line_width(cr, 1.0); + cairo_set_dash (cr, dashed3, 1, 0); + cairo_move_to(cr, chart->graph.x, y); + cairo_line_to (cr, chart->graph.x + chart->graph.width, y); + cairo_stroke(cr); + } + + + + /* overdrawn */ + DB( g_print(" min=%.2f range=%.2f\n", chart->min, chart->range) ); if( chart->show_over ) { @@ -1340,7 +1388,7 @@ static void piechart_draw_slices(GtkWidget *widget, gpointer user_data) GtkChart *chart = GTK_CHART(user_data); cairo_t *cr; - if(chart->nb_items <= 0) + if(chart->nb_items <= 0 || chart->total == 0.0) return; DB( g_print("\n[pie] draw slices\n") ); @@ -1365,6 +1413,7 @@ cairo_t *cr; //cr = cairo_create (chart->surface); DB( g_print("rayon=%d\n", chart->rayon) ); + DB( g_print("total=%.f\n", chart->total) ); for(i=0; i< chart->nb_items ;i++) { @@ -1378,6 +1427,9 @@ cairo_t *cr; dx = cx; dy = cy; + DB( g_print("- s%2d: %.2f%% a1=%.2f a2=%.2f | %s %.f\n", i, sum / chart->total, a1, a2, item->label, item->serie1) ); + + cairo_move_to(cr, dx, dy); cairo_arc(cr, dx, dy, radius, a1, a2); @@ -1388,8 +1440,6 @@ cairo_t *cr; cairo_stroke_preserve(cr); #endif - DB( g_print("- s%2d: %.2f%% a1=%.2f a2=%.2f\n", i, sum / chart->total, a1, a2) ); - //g_print("color : %f %f %f\n", COLTOCAIRO(colors[i].r), COLTOCAIRO(colors[i].g), COLTOCAIRO(colors[i].b)); color = i % chart->color_scheme.nb_cols; @@ -2204,6 +2254,22 @@ void gtk_chart_show_xval(GtkChart * chart, gboolean visible) // chart_recompute(chart); } + +void gtk_chart_show_average(GtkChart * chart, gdouble value, gboolean visible) +{ + g_return_if_fail (GTK_IS_CHART (chart)); + + DB( g_print("\n[gtkchart] set show average %f\n", value) ); + + chart->average = value; + chart->show_average = visible; + + //if(chart->type == CHART_TYPE_LINE) + // chart_recompute(chart); +} + + + /* ** chnage the overdrawn visibility */