/* 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.
*
#ifndef __GTK_CHART_H__
#define __GTK_CHART_H__
-#include <glib.h>
-#include <gdk/gdk.h>
-#include <gtk/gtk.h>
-#include <cairo.h>
-#include <math.h>
+#include "gtk-chart-colors.h"
G_BEGIN_DECLS
#define GTK_TYPE_CHART (gtk_chart_get_type ())
/* default zoomx for charts */
-#define GTK_CHART_BARW 24
-#define GTK_CHART_MINBARW 8
-#define GTK_CHART_MAXBARW 64
-#define GTK_CHART_MINRADIUS 64
+#define GTK_CHART_BARW 41 //24
+
+#define GTK_CHART_MINBARW 8 //4
+#define GTK_CHART_MAXBARW 41 //128
+#define GTK_CHART_SPANBARW GTK_CHART_MAXBARW+1
+#define GTK_CHART_MINRADIUS 64
#define CHART_BUFFER_LENGTH 128
-// for cairo pie
-#define PIE_LINE_SLICE 0
-#define SOFT_LIGHT 0
-#define GRADIENT 0
-#define CHART_PIE_DONUT 1
+
+// char draw options
+#define CHART_PARAM_PIE_DONUT TRUE
+#define CHART_PARAM_PIE_LINE FALSE
+#define CHART_PARAM_PIE_MARK FALSE
+#define CHART_PARAM_PIE_HOLEVALUE 0.5
+
+
/* new stuff */
-#define CHART_MARGIN 18 //standard a4 margin
+#define CHART_MARGIN 12 //standard a4 margin is 18
#define CHART_SPACING 6
+#define CHART_LINE_SPACING 1.25
+
//#define PROP_SHOW_MINOR 6
//#define PROP_SHOW_LEGEND 7
+#define ROUNDHALF(x) floor(x *2) / 2
+
+
+
enum
{
+ CHART_TYPE_NONE,
CHART_TYPE_COL,
+
CHART_TYPE_PIE,
CHART_TYPE_LINE,
CHART_TYPE_MAX
gdouble serie2;
gdouble rate;
- /* cairo part */
+ /* draw stuffs */
gchar *legend;
double angle2; /* rate for pie */
double height; /* for column */
/* all below should be in priv normally */
- GtkHBox hbox;
+ GtkBox hbox;
GtkWidget *drawarea;
GtkAdjustment *adjustment;
GtkWidget *scrollbar;
- GtkWidget *scrollwin;
- GtkWidget *treeview;
- GtkTreeModel *legend;
+ GtkTreeModel *model;
/* data storage */
gint nb_items;
gchar *subtitle;
/* chart properties */
- gint type;
+ gint type; // column/pie/line
+
gboolean dual;
gboolean abs;
+ gboolean show_legend;
+ gboolean show_legend_wide;
gboolean show_over;
+ gboolean show_average;
gboolean show_xval;
+ gboolean show_mono;
gint every_xval;
- //guint32 kcur;
+ guint32 kcur;
gboolean minor;
gdouble minor_rate;
gchar *minor_symbol;
/* color datas */
- struct rgbcol *colors;
- gint nb_cols;
- gint cs_red, cs_green, cs_blue, cs_yellow;
+ GtkColorScheme color_scheme;
+
+ /* cairo default value */
+ PangoFontDescription *pfd;
+ gint pfd_size;
/* buffer surface */
cairo_surface_t *surface;
- /* draw area coordinates */
- double l, t, b, r, w, h;
- /* our drawing rectangle with margin */
- double legend_w;
+ /* drawing datas */
+ double font_h;
+ int l, t, b, r, w, h;
+ cairo_rectangle_t graph;
+ cairo_rectangle_t legend;
+
+ /* legend dimension */
+ double label_w;
+ double legend_font_h;
+ double legend_label_w;
+ double legend_value_w;
+ double legend_rate_w;
/* zones height */
- double title_zh;
+ double title_zh;
double subtitle_zh, subtitle_y;
+ double header_zh, header_y;
+ double item_zh;
+
double ox, oy;
/* pie specifics */
gdouble total;
- gint rayon, left, top;
+ gint rayon, mark, left, top;
+ gint leg_nb_l, leg_width_l, leg_vspace_l;
+ gint leg_nb_r, leg_width_r, leg_vspace_r;
/* bar specifics */
- double rawmin, rawmax, range, min, max, unit, minimum;
+ double rawmin, rawmax, range, min, max, unit, minimum, average;
gint div;
gint visible;
- double font_h;
+
double scale_x, scale_y, scale_w, scale_h;
- double graph_x, graph_y, graph_width, graph_height; //graph dimension
+ double item_x, item_y, item_w;
double barw, blkw, posbarh, negbarh;
+ double usrbarw;
gchar buffer1[CHART_BUFFER_LENGTH];
gchar buffer2[CHART_BUFFER_LENGTH];
};
+
struct _GtkChartClass
{
- GtkHBoxClass parent_class;
+ GtkBoxClass parent_class;
/* Padding for future expansion */
void (*_gtk_reserved1) (void);
void gtk_chart_queue_redraw(GtkChart *chart);
-void gtk_chart_set_datas(GtkChart *chart, GtkTreeModel *model, guint column, gchar *title);
-void gtk_chart_set_dualdatas(GtkChart *chart, GtkTreeModel *model, guint column1, guint column2, gchar *title);
+void gtk_chart_set_datas(GtkChart *chart, GtkTreeModel *model, guint column, gchar *title, gchar *subtitle);
+void gtk_chart_set_dualdatas(GtkChart *chart, GtkTreeModel *model, guint column1, guint column2, gchar *title, gchar *subtitle);
void gtk_chart_set_minor_prefs(GtkChart * chart, gdouble rate, gchar *symbol);
-//void gtk_chart_set_currency(GtkChart * chart, guint32 kcur);
+void gtk_chart_set_currency(GtkChart * chart, guint32 kcur);
+void gtk_chart_show_average(GtkChart * chart, gdouble value, gboolean visible);
void gtk_chart_set_overdrawn(GtkChart * chart, gdouble minimum);
-void gtk_chart_set_every_xval(GtkChart * chart, gint decay);
+//void gtk_chart_set_every_xval(GtkChart * chart, gint decay);
void gtk_chart_set_barw(GtkChart * chart, gdouble barw);
+void gtk_chart_set_showmono(GtkChart * chart, gboolean mono);
void gtk_chart_show_legend(GtkChart * chart, gboolean visible, gboolean showextracol);
void gtk_chart_show_overdrawn(GtkChart * chart, gboolean visible);