1
0
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:
losinshi
2007-01-05 04:36:09 +00:00
parent 4c211cf31e
commit c69e82f23e
14 changed files with 221 additions and 23 deletions
+6
View File
@@ -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 */
+7 -1
View File
@@ -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, ""}
};
+10 -3
View File
@@ -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 */
+5 -3
View File
@@ -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();
+76
View File
@@ -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);
}