mirror of
https://github.com/agdsn/ancient-weatherstation.git
synced 2026-06-19 23:07:59 +00:00
New Chart Feature: Min/Max can be shown in the upper right corner
git-svn-id: file:///home/jan/tmp/wetterstation/trunk@207 dd492736-c11a-0410-ad51-8c26713eaf7f
This commit is contained in:
@@ -55,6 +55,10 @@ typedef struct image_cfg {
|
||||
int zero_min; /* Nullinie auf jeden Fall anzeigen */
|
||||
int bars; /* Balken malen statt einer Linie */
|
||||
int show_average; /* Durchschnittslinie zeichnen */
|
||||
int show_min;
|
||||
int show_max;
|
||||
int invert_min;
|
||||
int invert_max;
|
||||
int dflt_dir; /* Standart - Verzeichnis fuer die Bilder */
|
||||
|
||||
/* Farben */
|
||||
@@ -72,6 +76,8 @@ typedef struct image_cfg {
|
||||
img_color_ptr label_y_color;
|
||||
img_color_ptr desc_x_color;
|
||||
img_color_ptr desc_y_color;
|
||||
img_color_ptr max_color;
|
||||
img_color_ptr min_color;
|
||||
} image_cfg_t;
|
||||
|
||||
/* Entfaelt die aktuelle Bild - Config */
|
||||
|
||||
@@ -61,7 +61,11 @@ static const config_keyword keywords[] = {
|
||||
{"sensor_id", read_int, &(img_cfg.sens_id), DEFAULT_SENS_ID},
|
||||
{"zero_min", read_yn, &(img_cfg.zero_min), DEFAULT_ZERO_MIN},
|
||||
{"as_bars", read_yn, &(img_cfg.bars), DEFAULT_AS_BARS},
|
||||
{"show_average", read_yn, &(img_cfg.show_average), DEFAULT_SHOW_AVERAGE},
|
||||
{"show_average", read_yn, &(img_cfg.show_average), DEFAULT_SHOW_AVERAGE},
|
||||
{"show_min", read_yn, &(img_cfg.show_min), DEFAULT_SHOW_MIN},
|
||||
{"show_max", read_yn, &(img_cfg.show_max), DEFAULT_SHOW_MAX},
|
||||
{"invert_min", read_yn, &(img_cfg.invert_min), DEFAULT_INVERT_MIN},
|
||||
{"invert_max", read_yn, &(img_cfg.invert_max), DEFAULT_INVERT_MAX},
|
||||
{"x_axis_desc", read_str, &(img_cfg.x_desc), DEFAULT_X_AX_DESC},
|
||||
{"y_axis_desc", read_str, &(img_cfg.y_desc), DEFAULT_Y_AX_DESC},
|
||||
{"x_format", read_fmt_str, &(img_cfg.x_fmt), DEFAULT_X_FORMAT},
|
||||
@@ -83,6 +87,8 @@ static const config_keyword keywords[] = {
|
||||
{"label_y_color", read_color, &(img_cfg.label_y_color), DEFAULT_LABEL_Y_COLOR},
|
||||
{"descr_y_color", read_color, &(img_cfg.desc_y_color), DEFAULT_DESCR_X_COLOR},
|
||||
{"descr_x_color", read_color, &(img_cfg.desc_x_color), DEFAULT_DESCR_Y_COLOR},
|
||||
{"max_color", read_color, &(img_cfg.max_color), DEFAULT_MAX_COLOR},
|
||||
{"min_color", read_color, &(img_cfg.min_color), DEFAULT_MIN_COLOR},
|
||||
|
||||
{"", NULL, NULL, ""}
|
||||
};
|
||||
|
||||
@@ -51,7 +51,7 @@ static PGresult *pg_check_exec(PGconn *, char *);
|
||||
static char *get_type_table_by_id(PGconn *, int );
|
||||
|
||||
|
||||
/* Bibt die Liste mit den y-Labels zurueck */
|
||||
/* Gibt die Liste mit den y-Labels zurueck */
|
||||
label_list_ptr get_y_label_list(int c_hight, int padding){
|
||||
int max_val = 0; /* Maximaler Wert */
|
||||
int min_val = 0; /* Minimaler Wert */
|
||||
@@ -251,15 +251,22 @@ int scale_y_coords(pix_list_ptr ptr, int c_height){
|
||||
|
||||
|
||||
/* Maximaler wert */
|
||||
pix_list_ptr get_max_val(){
|
||||
pix_list_ptr get_max_elem(){
|
||||
return min;
|
||||
}
|
||||
double get_max_val(){
|
||||
return real_max;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Minimaler Wert */
|
||||
pix_list_ptr get_min_val(){
|
||||
pix_list_ptr get_min_elem(){
|
||||
return max;
|
||||
}
|
||||
double get_min_val(){
|
||||
return real_min;
|
||||
}
|
||||
|
||||
|
||||
/* Maximale Zeit */
|
||||
|
||||
@@ -59,12 +59,14 @@ pix_list_ptr build_average_line(pix_list_ptr real_list, int c_width);
|
||||
|
||||
|
||||
/* Max. Wert */
|
||||
pix_list_ptr get_min_val();
|
||||
pix_list_ptr get_min_elem();
|
||||
double get_min_val();
|
||||
|
||||
|
||||
/* Min. Wert */
|
||||
pix_list_ptr get_max_val();
|
||||
|
||||
pix_list_ptr get_max_elem();
|
||||
double get_max_val();
|
||||
|
||||
|
||||
/* Max. Zeit */
|
||||
char *get_max_time();
|
||||
|
||||
@@ -31,6 +31,8 @@
|
||||
#include "image_common.h"
|
||||
|
||||
#define SHORTBUFFSIZE 64
|
||||
#define MIN_MAX_BUFF 125
|
||||
#define MIN_MAX_SIZE 7
|
||||
|
||||
/* der besseren Lesbarkeit wegen einen Farbtyp definiert */
|
||||
typedef int color;
|
||||
@@ -105,8 +107,11 @@ static gdImagePtr draw_image(gdImagePtr img){
|
||||
int y_label_max_width = 0;
|
||||
int i;
|
||||
int temp_x2, temp_x1, temp_y1;
|
||||
int min_max_width = 0;
|
||||
|
||||
char *buff;
|
||||
char * min_buff ;
|
||||
char * max_buff ;
|
||||
time_t ts;
|
||||
|
||||
/* Groeßenangaben fuer die einzelnen Texte */
|
||||
@@ -115,6 +120,9 @@ static gdImagePtr draw_image(gdImagePtr img){
|
||||
dimension_t x_label_d;
|
||||
dimension_t x_desc_d;
|
||||
dimension_t y_desc_d;
|
||||
dimension_t min_val_d;
|
||||
dimension_t max_val_d;
|
||||
dimension_t arrow_d;
|
||||
|
||||
/* Farben */
|
||||
color val_line_c = alloc_alpha_color(img, img_cfg.dia_line_color);
|
||||
@@ -130,6 +138,10 @@ static gdImagePtr draw_image(gdImagePtr img){
|
||||
color label_y_c = alloc_alpha_color(img, img_cfg.label_y_color);
|
||||
color desc_x_c = alloc_alpha_color(img, img_cfg.desc_x_color);
|
||||
color desc_y_c = alloc_alpha_color(img, img_cfg.desc_y_color);
|
||||
color min_c = alloc_alpha_color(img, img_cfg.min_color);
|
||||
color max_c = alloc_alpha_color(img, img_cfg.max_color);
|
||||
color back_c = alloc_alpha_color(img, img_cfg.bg_color);
|
||||
color temp_c;
|
||||
|
||||
/* Ueberschrift */
|
||||
head_d = calc_text_dim(img_cfg.headline, 16, 0);
|
||||
@@ -240,6 +252,70 @@ static gdImagePtr draw_image(gdImagePtr img){
|
||||
}
|
||||
}
|
||||
|
||||
/*Min / Max */
|
||||
if (img_cfg.show_min || img_cfg.show_max){
|
||||
|
||||
/* Minimal-String zusammenbauen */
|
||||
if(img_cfg.show_min){
|
||||
min_buff = malloc(sizeof(char)*MIN_MAX_BUFF);
|
||||
if(img_cfg.unit != NULL){
|
||||
snprintf(min_buff, MIN_MAX_BUFF, "%-.1f%s", get_min_val(), img_cfg.unit);
|
||||
} else {
|
||||
snprintf(min_buff, MIN_MAX_BUFF, "%-.1f", get_min_val());
|
||||
}
|
||||
min_val_d = calc_text_dim(min_buff, MIN_MAX_SIZE, 0);
|
||||
min_max_width = min_val_d.width;
|
||||
}
|
||||
|
||||
/* Maximal-String zusammenbauen */
|
||||
if(img_cfg.show_max){
|
||||
max_buff = malloc(sizeof(char)*MIN_MAX_BUFF);
|
||||
if(img_cfg.unit != NULL){
|
||||
snprintf(max_buff, MIN_MAX_BUFF, "%-.1f%s", (double) get_max_val(), img_cfg.unit);
|
||||
} else {
|
||||
snprintf(max_buff, MIN_MAX_BUFF, "%-.1f", (double) get_max_val());
|
||||
}
|
||||
max_val_d = calc_text_dim(max_buff, MIN_MAX_SIZE, 0);
|
||||
min_max_width = max_val_d.width;
|
||||
}
|
||||
|
||||
/* 'laengeren' String suchen */
|
||||
if(img_cfg.show_min && img_cfg.show_max){
|
||||
if (min_val_d.width < max_val_d.width) {
|
||||
min_max_width = max_val_d.width;
|
||||
} else {
|
||||
min_max_width = min_val_d.width;
|
||||
}
|
||||
}
|
||||
|
||||
/* Dimmensionen des Pfeis berechnen */
|
||||
arrow_d = calc_text_dim(">", MIN_MAX_SIZE - 1, 1.570796327);
|
||||
|
||||
/* Minimalwert zeichnen */
|
||||
if(img_cfg.show_min){
|
||||
temp_c = min_c;
|
||||
if(img_cfg.invert_min){
|
||||
gdImageFilledRectangle(img, (img_cfg.width - offset_x_right - min_max_width - arrow_d.width -8), (6 + min_val_d.height + 4), (img_cfg.width - offset_x_right), ( 6 + (2*min_val_d.height) + 4), min_c);
|
||||
temp_c = back_c;
|
||||
}
|
||||
gdImageStringFT(img, &brect[0], temp_c, IMG_FONT, MIN_MAX_SIZE-1, 1.570796327 , img_cfg.width - offset_x_right - min_max_width - arrow_d.width +1, 11 + min_val_d.height + arrow_d.height, "<");
|
||||
gdImageStringFT(img, &brect[0], temp_c, IMG_FONT, MIN_MAX_SIZE, 0 , img_cfg.width - offset_x_right - min_val_d.width, 6 + (2*min_val_d.height)+3, min_buff);
|
||||
free(min_buff);
|
||||
}
|
||||
|
||||
/* Maximalwert zeichnen */
|
||||
if(img_cfg.show_max){
|
||||
temp_c = max_c;
|
||||
if(img_cfg.invert_max){
|
||||
gdImageFilledRectangle(img, (img_cfg.width - offset_x_right - min_max_width - arrow_d.width -8), (6), (img_cfg.width - offset_x_right), ( 6 + (max_val_d.height) + 1), max_c);
|
||||
temp_c = back_c;
|
||||
}
|
||||
gdImageStringFT(img, &brect[0], temp_c, IMG_FONT, MIN_MAX_SIZE-1, 1.570796327 , img_cfg.width - offset_x_right - min_max_width - arrow_d.width +1, 7 + arrow_d.height, ">");
|
||||
gdImageStringFT(img, &brect[0], temp_c, IMG_FONT, MIN_MAX_SIZE, 0 , img_cfg.width - offset_x_right - max_val_d.width, 5 + max_val_d.height, max_buff);
|
||||
free(max_buff);
|
||||
}
|
||||
}
|
||||
|
||||
/* Rahmen */
|
||||
gdImageRectangle(img, offset_x_left, offset_y_top, img_cfg.width - offset_x_right, img_cfg.height - offset_y_bottom, dia_border_c);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user