]> Dogcows Code - chaz/homebank/blobdiff - src/gtk-chart.c
Merge branch 'upstream'
[chaz/homebank] / src / gtk-chart.c
index fdd30babf644469d25608b3564ae60dc20d66578..12a1bb741227028065dd5f1efd41bf9d69782ded 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.
  *
@@ -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
 */
This page took 0.022973 seconds and 4 git commands to generate.