#ifndef _GTCACA_LINECHART_H_
#define _GTCACA_LINECHART_H_
#include <stdint.h>
#include <gtcaca/main.h>
#include <gtcaca/widget.h>
#define GTCACA_LINECHART_MAX_SERIES 8
enum {
GTCACA_LC_LINE = 0,
GTCACA_LC_IMPULSE,
GTCACA_LC_BAR,
GTCACA_LC_DOT
};
typedef struct {
double *y;
int n;
uint8_t colour;
int style;
char name[48];
} gtcaca_linechart_series_t;
typedef struct _gtcaca_linechart_widget_t gtcaca_linechart_widget_t;
struct _gtcaca_linechart_widget_t {
gtcaca_widget_type_t type;
unsigned int id;
int has_focus;
int is_visible;
int x;
int y;
int width;
int height;
uint8_t color_focus_fg;
uint8_t color_focus_bg;
uint8_t color_nonfocus_fg;
uint8_t color_nonfocus_bg;
gtcaca_widget_t *parent;
gtcaca_widget_t *children;
struct _gtcaca_linechart_widget_t *prev;
struct _gtcaca_linechart_widget_t *next;
gtcaca_linechart_series_t series[GTCACA_LINECHART_MAX_SERIES];
int nseries;
char *title;
int have_range;
double ymin, ymax;
int have_xspan;
double xspan;
const char *xunit;
int log_y;
};
gtcaca_linechart_widget_t *gtcaca_linechart_new(gtcaca_widget_t *parent, int x, int y, int width, int height);
int gtcaca_linechart_add_series(gtcaca_linechart_widget_t *c, const double *y, int n, uint8_t colour);
int gtcaca_linechart_add_series_styled(gtcaca_linechart_widget_t *c, const double *y, int n,
uint8_t colour, int style, const char *name);
void gtcaca_linechart_clear(gtcaca_linechart_widget_t *c);
void gtcaca_linechart_set_range(gtcaca_linechart_widget_t *c, double ymin, double ymax);
void gtcaca_linechart_set_xspan(gtcaca_linechart_widget_t *c, double xspan, const char *unit);
void gtcaca_linechart_set_log_y(gtcaca_linechart_widget_t *c, int on);
void gtcaca_linechart_set_title(gtcaca_linechart_widget_t *c, const char *title);
void gtcaca_linechart_draw(gtcaca_linechart_widget_t *c);
void gtcaca_linechart_free(gtcaca_linechart_widget_t *c);
#endif