diff --git a/src/hasp/hasp_attribute.cpp b/src/hasp/hasp_attribute.cpp index 83952666..b694dd40 100644 --- a/src/hasp/hasp_attribute.cpp +++ b/src/hasp/hasp_attribute.cpp @@ -183,7 +183,7 @@ static bool attribute_update_lv_property(lv_obj_t * obj, const char * attr_p, ui #endif // OK - this function is missing in lvgl -static uint8_t lv_roller_get_visible_row_count(lv_obj_t * roller) +static uint8_t my_roller_get_visible_row_count(lv_obj_t * roller) { const lv_font_t * font = lv_obj_get_style_text_font(roller, LV_ROLLER_PART_BG); lv_style_int_t line_space = lv_obj_get_style_text_line_space(roller, LV_ROLLER_PART_BG); @@ -196,55 +196,55 @@ static uint8_t lv_roller_get_visible_row_count(lv_obj_t * roller) } // OK - this function is missing in lvgl -static inline int16_t lv_arc_get_rotation(lv_obj_t * arc) +static inline int16_t my_arc_get_rotation(lv_obj_t * arc) { lv_arc_ext_t * ext = (lv_arc_ext_t *)lv_obj_get_ext_attr(arc); return ext->rotation_angle; } // OK - this function is missing in lvgl -static inline int16_t lv_arc_get_bg_start_angle(lv_obj_t * arc) +static inline int16_t my_arc_get_bg_start_angle(lv_obj_t * arc) { lv_arc_ext_t * ext = (lv_arc_ext_t *)lv_obj_get_ext_attr(arc); return ext->bg_angle_start; } // OK - this function is missing in lvgl -static inline int16_t lv_arc_get_bg_end_angle(lv_obj_t * arc) +static inline int16_t my_arc_get_bg_end_angle(lv_obj_t * arc) { lv_arc_ext_t * ext = (lv_arc_ext_t *)lv_obj_get_ext_attr(arc); return ext->bg_angle_end; } // OK - this function is missing in lvgl -static inline int16_t lv_arc_get_start_angle(lv_obj_t * arc) +static inline int16_t my_arc_get_start_angle(lv_obj_t * arc) { lv_arc_ext_t * ext = (lv_arc_ext_t *)lv_obj_get_ext_attr(arc); return ext->arc_angle_start; } // OK - this function is missing in lvgl -static inline int16_t lv_arc_get_end_angle(lv_obj_t * arc) +static inline int16_t my_arc_get_end_angle(lv_obj_t * arc) { lv_arc_ext_t * ext = (lv_arc_ext_t *)lv_obj_get_ext_attr(arc); return ext->arc_angle_end; } // OK - this function is missing in lvgl -static inline int16_t lv_chart_get_min_value(lv_obj_t * chart) +static inline int16_t my_chart_get_min_value(lv_obj_t * chart) { lv_chart_ext_t * ext = (lv_chart_ext_t *)lv_obj_get_ext_attr(chart); return ext->ymin[LV_CHART_AXIS_PRIMARY_Y]; } // OK - this function is missing in lvgl -static inline int16_t lv_chart_get_max_value(lv_obj_t * chart) +static inline int16_t my_chart_get_max_value(lv_obj_t * chart) { lv_chart_ext_t * ext = (lv_chart_ext_t *)lv_obj_get_ext_attr(chart); return ext->ymax[LV_CHART_AXIS_PRIMARY_Y]; } -lv_chart_series_t * lv_chart_get_series(lv_obj_t * chart, uint8_t ser_num) +lv_chart_series_t * my_chart_get_series(lv_obj_t * chart, uint8_t ser_num) { lv_chart_ext_t * ext = (lv_chart_ext_t *)lv_obj_get_ext_attr(chart); lv_chart_series_t * ser = (lv_chart_series_t *)_lv_ll_get_tail(&ext->series_ll); @@ -255,6 +255,79 @@ lv_chart_series_t * lv_chart_get_series(lv_obj_t * chart, uint8_t ser_num) return ser; } +/** + * Set a new value_str for an object. Memory will be allocated to store the text by the object. + * @param obj pointer to a object + * @param text '\0' terminated character string. NULL to refresh with the current text. + */ +void my_obj_set_value_str_txt(lv_obj_t * obj, uint8_t part, lv_state_t state, const char * text) +{ + Log.verbose(TAG_ATTR, "%s %d", __FILE__, __LINE__); + + const void * value_str_p = lv_obj_get_style_value_str(obj, part); + lv_obj_invalidate(obj); + + if(text == NULL || text[0] == 0) { + Log.verbose(TAG_ATTR, "%s %d", __FILE__, __LINE__); + lv_obj_set_style_local_value_str(obj, part, state, NULL); + lv_mem_free(value_str_p); + Log.verbose(TAG_ATTR, "%s %d", __FILE__, __LINE__); + return; + } + + LV_ASSERT_STR(text); + + if(value_str_p == NULL) { + /*Get the size of the text*/ + size_t len = strlen(text) + 1; + + /*Allocate space for the new text*/ + Log.verbose(TAG_ATTR, "%s %d", __FILE__, __LINE__); + value_str_p = (char *)lv_mem_alloc(len); + LV_ASSERT_MEM(value_str_p); + if(value_str_p == NULL) return; + + Log.verbose(TAG_ATTR, "%s %d", __FILE__, __LINE__); + strncpy((char *)value_str_p, text, len); + lv_obj_set_style_local_value_str(obj, part, state, (char *)value_str_p); + Log.verbose(TAG_ATTR, "%s %d", __FILE__, __LINE__); + return; + } + + // lv_obj_set_style_local_value_str(obj, part, state, str_p); + + if(value_str_p == text) { + /*If set its own text then reallocate it (maybe its size changed)*/ + Log.warning(TAG_ATTR, "%s %d", __FILE__, __LINE__); + return; // don't touch the data + + // value_str_p = lv_mem_realloc(value_str_p, strlen(text) + 1); + + // LV_ASSERT_MEM(value_str_p); + // if(value_str_p == NULL) return; + } else { + /*Free the old text*/ + if(value_str_p != NULL) { + Log.verbose(TAG_ATTR, "%s %d", __FILE__, __LINE__); + lv_mem_free(value_str_p); + value_str_p = NULL; + Log.verbose(TAG_ATTR, "%s %d", __FILE__, __LINE__); + } + + /*Get the size of the text*/ + size_t len = strlen(text) + 1; + + /*Allocate space for the new text*/ + value_str_p = lv_mem_alloc(len); + LV_ASSERT_MEM(value_str_p); + if(value_str_p != NULL) strcpy((char *)value_str_p, text); + lv_obj_set_style_local_value_str(obj, part, state, (char *)value_str_p); + } + + // lv_label_refr_text(label); + Log.verbose(TAG_ATTR, "%s %d", __FILE__, __LINE__); +} + void btnmatrix_clear_map(lv_obj_t * obj) { lv_btnmatrix_ext_t * ext = (lv_btnmatrix_ext_t *)lv_obj_get_ext_attr(obj); @@ -900,22 +973,24 @@ static void hasp_local_style_attr(lv_obj_t * obj, const char * attr_p, uint16_t case ATTR_VALUE_STR: { if(update) { - size_t len = strlen(payload); - if(len > 0) { - // Free previous string - const char * str = lv_obj_get_style_value_str(obj, part); + my_obj_set_value_str_txt(obj, part, state, payload); - // Create new string - len++; - char * str_p = (char *)lv_mem_alloc(len); - memset(str_p, 0, len); - memccpy(str_p, payload, 0, len); - lv_obj_set_style_local_value_str(obj, part, state, str_p); + // size_t len = strlen(payload); + // if(len > 0) { + // // Free previous string + // const char * str = lv_obj_get_style_value_str(obj, part); - if(str != NULL) { - // lv_mem_free(str); // TODO : BIG Memory Leak ! / crashes - } - } + // // Create new string + // len++; + // char * str_p = (char *)lv_mem_alloc(len); + // memset(str_p, 0, len); + // memccpy(str_p, payload, 0, len); + // lv_obj_set_style_local_value_str(obj, part, state, str_p); + + // if(str != NULL) { + // // lv_mem_free(str); // TODO : BIG Memory Leak ! / crashes + // } + // } } else { hasp_out_str(obj, attr, lv_obj_get_style_value_str(obj, part)); } @@ -976,7 +1051,7 @@ static void hasp_process_arc_attribute(lv_obj_t * obj, const char * attr_p, uint return (update) ? lv_arc_set_type(obj, val % 3) : hasp_out_int(obj, attr, lv_arc_get_type(obj)); case ATTR_ROTATION: - return (update) ? lv_arc_set_rotation(obj, val) : hasp_out_int(obj, attr, lv_arc_get_rotation(obj)); + return (update) ? lv_arc_set_rotation(obj, val) : hasp_out_int(obj, attr, my_arc_get_rotation(obj)); case ATTR_ADJUSTABLE: if(update) { @@ -990,16 +1065,16 @@ static void hasp_process_arc_attribute(lv_obj_t * obj, const char * attr_p, uint case ATTR_START_ANGLE: return (update) ? lv_arc_set_bg_start_angle(obj, val) - : hasp_out_int(obj, attr, lv_arc_get_bg_start_angle(obj)); + : hasp_out_int(obj, attr, my_arc_get_bg_start_angle(obj)); case ATTR_END_ANGLE: - return (update) ? lv_arc_set_bg_end_angle(obj, val) : hasp_out_int(obj, attr, lv_arc_get_bg_end_angle(obj)); + return (update) ? lv_arc_set_bg_end_angle(obj, val) : hasp_out_int(obj, attr, my_arc_get_bg_end_angle(obj)); case ATTR_START_ANGLE1: - return (update) ? lv_arc_set_start_angle(obj, val) : hasp_out_int(obj, attr, lv_arc_get_start_angle(obj)); + return (update) ? lv_arc_set_start_angle(obj, val) : hasp_out_int(obj, attr, my_arc_get_start_angle(obj)); case ATTR_END_ANGLE1: - return (update) ? lv_arc_set_end_angle(obj, val) : hasp_out_int(obj, attr, lv_arc_get_end_angle(obj)); + return (update) ? lv_arc_set_end_angle(obj, val) : hasp_out_int(obj, attr, my_arc_get_end_angle(obj)); } Log.warning(TAG_ATTR, F("Unknown property %s"), attr_p); @@ -1356,8 +1431,8 @@ static void hasp_process_obj_attribute_range(lv_obj_t * obj, const char * attr, } if(check_obj_type(obj, LV_HASP_CHART)) { - int16_t min = lv_chart_get_min_value(obj); - int16_t max = lv_chart_get_max_value(obj); + int16_t min = my_chart_get_min_value(obj); + int16_t max = my_chart_get_max_value(obj); if(update && (set_min ? val : min) >= (set_max ? val : max)) return; // prevent setting min>=max return update ? lv_chart_set_range(obj, set_min ? val : min, set_max ? val : max) : hasp_out_int(obj, attr, set_min ? min : max); @@ -1427,6 +1502,18 @@ void hasp_process_obj_attribute(lv_obj_t * obj, const char * attr_p, const char case ATTR_ID: return update ? (void)(obj->user_data.id = (uint8_t)val) : hasp_out_int(obj, attr, obj->user_data.id); + case ATTR_GROUPID: + return update ? (void)(obj->user_data.groupid = (uint8_t)val) + : hasp_out_int(obj, attr, obj->user_data.groupid); + + case ATTR_OBJID: + if(update) { + Log.warning(TAG_ATTR, F("%s is read-only"), attr_p); + } else { + hasp_out_int(obj, attr, obj->user_data.objid); + } + return; + case ATTR_VIS: return update ? lv_obj_set_hidden(obj, !is_true(payload)) : hasp_out_int(obj, attr, !lv_obj_get_hidden(obj)); @@ -1466,7 +1553,7 @@ void hasp_process_obj_attribute(lv_obj_t * obj, const char * attr_p, const char case ATTR_ROWS: if(check_obj_type(obj, LV_HASP_ROLLER)) { return update ? lv_roller_set_visible_row_count(obj, (uint8_t)val) - : hasp_out_int(obj, attr, lv_roller_get_visible_row_count(obj)); + : hasp_out_int(obj, attr, my_roller_get_visible_row_count(obj)); } if(check_obj_type(obj, LV_HASP_TABLE)) { @@ -1581,8 +1668,9 @@ void hasp_process_obj_attribute(lv_obj_t * obj, const char * attr_p, const char return hasp_process_btnmatrix_attribute(obj, attr_p, attr_hash, payload, update); } return; // don't try local attributes anymore - // default: - // hasp_local_style_attr(obj, attr, payload, update); + + // default: + // hasp_local_style_attr(obj, attr, payload, update); } hasp_local_style_attr(obj, attr, attr_hash, payload, update); diff --git a/src/hasp/hasp_attribute.h b/src/hasp/hasp_attribute.h index a3010857..df3ff0c5 100644 --- a/src/hasp/hasp_attribute.h +++ b/src/hasp/hasp_attribute.h @@ -2,50 +2,51 @@ For full license information read the LICENSE file in the project folder */ #ifndef HASP_ATTR_SET_H - #define HASP_ATTR_SET_H +#define HASP_ATTR_SET_H - #include "lvgl.h" - #if LVGL_VERSION_MAJOR != 7 - #include "../lv_components.h" - #endif +#include "lvgl.h" +#if LVGL_VERSION_MAJOR != 7 + #include "../lv_components.h" +#endif - #include "hasp_conf.h" - #include "hasp.h" - #include "hasp_object.h" +#include "hasp_conf.h" +#include "hasp.h" +#include "hasp_object.h" - #ifdef __cplusplus +#ifdef __cplusplus extern "C" { - #endif +#endif // test -lv_chart_series_t * lv_chart_get_series(lv_obj_t * chart, uint8_t ser_num); +lv_chart_series_t * my_chart_get_series(lv_obj_t * chart, uint8_t ser_num); +void my_obj_set_value_str_txt(lv_obj_t * obj, uint8_t part, lv_state_t state, const char * text); void btnmatrix_clear_map(lv_obj_t * obj); void line_clear_points(lv_obj_t * obj); void hasp_process_obj_attribute(lv_obj_t * obj, const char * attr_p, const char * payload, bool update); - #ifdef __cplusplus +#ifdef __cplusplus } /* extern "C" */ - #endif +#endif - // use shorter name for readability - #define hasp_out_int hasp_send_obj_attribute_int - #define hasp_out_str hasp_send_obj_attribute_str - #define hasp_out_color hasp_send_obj_attribute_color +// use shorter name for readability +#define hasp_out_int hasp_send_obj_attribute_int +#define hasp_out_str hasp_send_obj_attribute_str +#define hasp_out_color hasp_send_obj_attribute_color - #define _HASP_ATTRIBUTE(prop_name, func_name, value_type) \ - static inline void attribute_##func_name(lv_obj_t * obj, uint8_t part, lv_state_t state, bool update, \ - const char * attr, value_type val) \ - { \ - if(update) { \ - return lv_obj_set_style_local_##func_name(obj, part, state, (value_type)val); \ - } else { \ - value_type temp = lv_obj_get_style_##func_name(obj, part); \ - /*lv_obj_get_style_##func_name(obj, part, state, &temp);*/ \ - return hasp_send_obj_attribute_int(obj, attr, temp); \ - } \ - } +#define _HASP_ATTRIBUTE(prop_name, func_name, value_type) \ + static inline void attribute_##func_name(lv_obj_t * obj, uint8_t part, lv_state_t state, bool update, \ + const char * attr, value_type val) \ + { \ + if(update) { \ + return lv_obj_set_style_local_##func_name(obj, part, state, (value_type)val); \ + } else { \ + value_type temp = lv_obj_get_style_##func_name(obj, part); \ + /*lv_obj_get_style_##func_name(obj, part, state, &temp);*/ \ + return hasp_send_obj_attribute_int(obj, attr, temp); \ + } \ + } _HASP_ATTRIBUTE(RADIUS, radius, lv_style_int_t) _HASP_ATTRIBUTE(CLIP_CORNER, clip_corner, bool) @@ -57,10 +58,10 @@ _HASP_ATTRIBUTE(PAD_TOP, pad_top, lv_style_int_t) _HASP_ATTRIBUTE(PAD_BOTTOM, pad_bottom, lv_style_int_t) _HASP_ATTRIBUTE(PAD_LEFT, pad_left, lv_style_int_t) _HASP_ATTRIBUTE(PAD_RIGHT, pad_right, lv_style_int_t) - #if LVGL_VERSION_MAJOR == 7 +#if LVGL_VERSION_MAJOR == 7 _HASP_ATTRIBUTE(PAD_INNER, pad_inner, lv_style_int_t) - #endif - #if LV_USE_BLEND_MODES +#endif +#if LV_USE_BLEND_MODES _HASP_ATTRIBUTE(BG_BLEND_MODE, bg_blend_mode, lv_blend_mode_t) _HASP_ATTRIBUTE(BORDER_BLEND_MODE, border_blend_mode, lv_blend_mode_t) _HASP_ATTRIBUTE(OUTLINE_BLEND_MODE, outline_blend_mode, lv_blend_mode_t) @@ -70,7 +71,7 @@ _HASP_ATTRIBUTE(VALUE_BLEND_MODE, value_blend_mode, lv_blend_mode_t) _HASP_ATTRIBUTE(TEXT_BLEND_MODE, text_blend_mode, lv_blend_mode_t) _HASP_ATTRIBUTE(LINE_BLEND_MODE, line_blend_mode, lv_blend_mode_t) _HASP_ATTRIBUTE(IMAGE_BLEND_MODE, image_blend_mode, lv_blend_mode_t) - #endif +#endif _HASP_ATTRIBUTE(BG_MAIN_STOP, bg_main_stop, lv_style_int_t) _HASP_ATTRIBUTE(BG_GRAD_STOP, bg_grad_stop, lv_style_int_t) _HASP_ATTRIBUTE(BG_GRAD_DIR, bg_grad_dir, lv_grad_dir_t) @@ -86,14 +87,14 @@ _HASP_ATTRIBUTE(OUTLINE_WIDTH, outline_width, lv_style_int_t) _HASP_ATTRIBUTE(OUTLINE_PAD, outline_pad, lv_style_int_t) //_HASP_ATTRIBUTE(OUTLINE_COLOR, outline_color, lv_color_t, _color, nonscalar) _HASP_ATTRIBUTE(OUTLINE_OPA, outline_opa, lv_opa_t) - #if LV_USE_SHADOW +#if LV_USE_SHADOW _HASP_ATTRIBUTE(SHADOW_WIDTH, shadow_width, lv_style_int_t) _HASP_ATTRIBUTE(SHADOW_OFS_X, shadow_ofs_x, lv_style_int_t) _HASP_ATTRIBUTE(SHADOW_OFS_Y, shadow_ofs_y, lv_style_int_t) _HASP_ATTRIBUTE(SHADOW_SPREAD, shadow_spread, lv_style_int_t) //_HASP_ATTRIBUTE(SHADOW_COLOR, shadow_color, lv_color_t, _color, nonscalar) _HASP_ATTRIBUTE(SHADOW_OPA, shadow_opa, lv_opa_t) - #endif +#endif _HASP_ATTRIBUTE(PATTERN_REPEAT, pattern_repeat, bool) //_HASP_ATTRIBUTE(PATTERN_RECOLOR, pattern_recolor, lv_color_t, _color, nonscalar) _HASP_ATTRIBUTE(PATTERN_OPA, pattern_opa, lv_opa_t) @@ -137,161 +138,164 @@ _HASP_ATTRIBUTE(SCALE_WIDTH, scale_width, lv_style_int_t) _HASP_ATTRIBUTE(SCALE_BORDER_WIDTH, scale_border_width, lv_style_int_t) _HASP_ATTRIBUTE(SCALE_END_BORDER_WIDTH, scale_end_border_width, lv_style_int_t) _HASP_ATTRIBUTE(SCALE_END_LINE_WIDTH, scale_end_line_width, lv_style_int_t) - //_HASP_ATTRIBUTE(SCALE_GRAD_COLOR, scale_grad_color, lv_color_t, _color, nonscalar) - //_HASP_ATTRIBUTE(SCALE_END_COLOR, scale_end_color, lv_color_t, _color, nonscalar) +//_HASP_ATTRIBUTE(SCALE_GRAD_COLOR, scale_grad_color, lv_color_t, _color, nonscalar) +//_HASP_ATTRIBUTE(SCALE_END_COLOR, scale_end_color, lv_color_t, _color, nonscalar) - /* attribute hashes */ - /* Object Part Attributes */ - #define ATTR_SIZE 16417 - #define ATTR_RADIUS 20786 - #define ATTR_CLIP_CORNER 9188 - #define ATTR_OPA_SCALE 64875 - #define ATTR_TRANSFORM_HEIGHT 55994 - #define ATTR_TRANSFORM_WIDTH 48627 +/* attribute hashes */ +/* Object Part Attributes */ +#define ATTR_SIZE 16417 +#define ATTR_RADIUS 20786 +#define ATTR_CLIP_CORNER 9188 +#define ATTR_OPA_SCALE 64875 +#define ATTR_TRANSFORM_HEIGHT 55994 +#define ATTR_TRANSFORM_WIDTH 48627 - /* Background Attributes */ - #define ATTR_BG_OPA 48966 - #define ATTR_BG_COLOR 64969 - #define ATTR_BG_GRAD_DIR 41782 - #define ATTR_BG_GRAD_STOP 4025 - #define ATTR_BG_MAIN_STOP 63118 - #define ATTR_BG_BLEND_MODE 31147 - #define ATTR_BG_GRAD_COLOR 44140 +/* Background Attributes */ +#define ATTR_BG_OPA 48966 +#define ATTR_BG_COLOR 64969 +#define ATTR_BG_GRAD_DIR 41782 +#define ATTR_BG_GRAD_STOP 4025 +#define ATTR_BG_MAIN_STOP 63118 +#define ATTR_BG_BLEND_MODE 31147 +#define ATTR_BG_GRAD_COLOR 44140 - /* Padding Attributes */ - #define ATTR_PAD_TOP 59081 - #define ATTR_PAD_LEFT 43123 - #define ATTR_PAD_INNER 9930 - #define ATTR_PAD_RIGHT 65104 - #define ATTR_PAD_BOTTOM 3767 +/* Padding Attributes */ +#define ATTR_PAD_TOP 59081 +#define ATTR_PAD_LEFT 43123 +#define ATTR_PAD_INNER 9930 +#define ATTR_PAD_RIGHT 65104 +#define ATTR_PAD_BOTTOM 3767 - /* Text Attributes */ - #define ATTR_TEXT_OPA 37166 - #define ATTR_TEXT_FONT 22465 - #define ATTR_TEXT_COLOR 23473 - #define ATTR_TEXT_DECOR 1971 - #define ATTR_TEXT_LETTER_SPACE 62079 - #define ATTR_TEXT_SEL_COLOR 32076 - #define ATTR_TEXT_LINE_SPACE 54829 - #define ATTR_TEXT_BLEND_MODE 32195 +/* Text Attributes */ +#define ATTR_TEXT_OPA 37166 +#define ATTR_TEXT_FONT 22465 +#define ATTR_TEXT_COLOR 23473 +#define ATTR_TEXT_DECOR 1971 +#define ATTR_TEXT_LETTER_SPACE 62079 +#define ATTR_TEXT_SEL_COLOR 32076 +#define ATTR_TEXT_LINE_SPACE 54829 +#define ATTR_TEXT_BLEND_MODE 32195 - /* Border Attributes */ - #define ATTR_BORDER_OPA 2061 - #define ATTR_BORDER_SIDE 53962 - #define ATTR_BORDER_POST 49491 - #define ATTR_BORDER_BLEND_MODE 23844 - #define ATTR_BORDER_WIDTH 24531 - #define ATTR_BORDER_COLOR 21264 +/* Border Attributes */ +#define ATTR_BORDER_OPA 2061 +#define ATTR_BORDER_SIDE 53962 +#define ATTR_BORDER_POST 49491 +#define ATTR_BORDER_BLEND_MODE 23844 +#define ATTR_BORDER_WIDTH 24531 +#define ATTR_BORDER_COLOR 21264 - /* Outline Attributes */ - #define ATTR_OUTLINE_OPA 23011 - #define ATTR_OUTLINE_PAD 26038 - #define ATTR_OUTLINE_COLOR 6630 - #define ATTR_OUTLINE_BLEND_MODE 25038 - #define ATTR_OUTLINE_WIDTH 9897 +/* Outline Attributes */ +#define ATTR_OUTLINE_OPA 23011 +#define ATTR_OUTLINE_PAD 26038 +#define ATTR_OUTLINE_COLOR 6630 +#define ATTR_OUTLINE_BLEND_MODE 25038 +#define ATTR_OUTLINE_WIDTH 9897 - /* Shadow Attributes */ - #define ATTR_SHADOW_OPA 38401 - #define ATTR_SHADOW_WIDTH 13255 - #define ATTR_SHADOW_OFS_X 44278 - #define ATTR_SHADOW_OFS_Y 44279 - #define ATTR_SHADOW_SPREAD 21138 - #define ATTR_SHADOW_BLEND_MODE 64048 - #define ATTR_SHADOW_COLOR 9988 +/* Shadow Attributes */ +#define ATTR_SHADOW_OPA 38401 +#define ATTR_SHADOW_WIDTH 13255 +#define ATTR_SHADOW_OFS_X 44278 +#define ATTR_SHADOW_OFS_Y 44279 +#define ATTR_SHADOW_SPREAD 21138 +#define ATTR_SHADOW_BLEND_MODE 64048 +#define ATTR_SHADOW_COLOR 9988 - /* Line Attributes */ - #define ATTR_LINE_OPA 24501 - #define ATTR_LINE_WIDTH 25467 - #define ATTR_LINE_COLOR 22200 - #define ATTR_LINE_DASH_WIDTH 32676 - #define ATTR_LINE_ROUNDED 15042 - #define ATTR_LINE_DASH_GAP 49332 - #define ATTR_LINE_BLEND_MODE 60284 +/* Line Attributes */ +#define ATTR_LINE_OPA 24501 +#define ATTR_LINE_WIDTH 25467 +#define ATTR_LINE_COLOR 22200 +#define ATTR_LINE_DASH_WIDTH 32676 +#define ATTR_LINE_ROUNDED 15042 +#define ATTR_LINE_DASH_GAP 49332 +#define ATTR_LINE_BLEND_MODE 60284 - /* Value Attributes */ - #define ATTR_VALUE_OPA 50482 - #define ATTR_VALUE_STR 1091 - #define ATTR_VALUE_FONT 9405 - #define ATTR_VALUE_ALIGN 27895 - #define ATTR_VALUE_COLOR 52661 - #define ATTR_VALUE_OFS_X 21415 - #define ATTR_VALUE_OFS_Y 21416 - #define ATTR_VALUE_LINE_SPACE 26921 - #define ATTR_VALUE_BLEND_MODE 4287 - #define ATTR_VALUE_LETTER_SPACE 51067 +/* Value Attributes */ +#define ATTR_VALUE_OPA 50482 +#define ATTR_VALUE_STR 1091 +#define ATTR_VALUE_FONT 9405 +#define ATTR_VALUE_ALIGN 27895 +#define ATTR_VALUE_COLOR 52661 +#define ATTR_VALUE_OFS_X 21415 +#define ATTR_VALUE_OFS_Y 21416 +#define ATTR_VALUE_LINE_SPACE 26921 +#define ATTR_VALUE_BLEND_MODE 4287 +#define ATTR_VALUE_LETTER_SPACE 51067 - /* Pattern attributes */ - #define ATTR_PATTERN_BLEND_MODE 43456 - #define ATTR_PATTERN_RECOLOR_OPA 35074 - #define ATTR_PATTERN_RECOLOR 7745 - #define ATTR_PATTERN_REPEAT 31338 - #define ATTR_PATTERN_OPA 43633 - #define ATTR_PATTERN_IMAGE 61292 +/* Pattern attributes */ +#define ATTR_PATTERN_BLEND_MODE 43456 +#define ATTR_PATTERN_RECOLOR_OPA 35074 +#define ATTR_PATTERN_RECOLOR 7745 +#define ATTR_PATTERN_REPEAT 31338 +#define ATTR_PATTERN_OPA 43633 +#define ATTR_PATTERN_IMAGE 61292 - #define ATTR_TRANSITION_PROP_1 49343 - #define ATTR_TRANSITION_PROP_2 49344 - #define ATTR_TRANSITION_PROP_3 49345 - #define ATTR_TRANSITION_PROP_4 49346 - #define ATTR_TRANSITION_PROP_5 49347 - #define ATTR_TRANSITION_PROP_6 49348 - #define ATTR_TRANSITION_TIME 26263 - #define ATTR_TRANSITION_PATH 43343 - #define ATTR_TRANSITION_DELAY 64537 +#define ATTR_TRANSITION_PROP_1 49343 +#define ATTR_TRANSITION_PROP_2 49344 +#define ATTR_TRANSITION_PROP_3 49345 +#define ATTR_TRANSITION_PROP_4 49346 +#define ATTR_TRANSITION_PROP_5 49347 +#define ATTR_TRANSITION_PROP_6 49348 +#define ATTR_TRANSITION_TIME 26263 +#define ATTR_TRANSITION_PATH 43343 +#define ATTR_TRANSITION_DELAY 64537 - #define ATTR_IMAGE_OPA 58140 - #define ATTR_IMAGE_RECOLOR 52204 - #define ATTR_IMAGE_BLEND_MODE 11349 - #define ATTR_IMAGE_RECOLOR_OPA 43949 +#define ATTR_IMAGE_OPA 58140 +#define ATTR_IMAGE_RECOLOR 52204 +#define ATTR_IMAGE_BLEND_MODE 11349 +#define ATTR_IMAGE_RECOLOR_OPA 43949 - #define ATTR_SCALE_END_LINE_WIDTH 30324 - #define ATTR_SCALE_END_BORDER_WIDTH 34380 - #define ATTR_SCALE_BORDER_WIDTH 2440 - #define ATTR_SCALE_GRAD_COLOR 47239 - #define ATTR_SCALE_WIDTH 36017 - #define ATTR_SCALE_END_COLOR 44074 +#define ATTR_SCALE_END_LINE_WIDTH 30324 +#define ATTR_SCALE_END_BORDER_WIDTH 34380 +#define ATTR_SCALE_BORDER_WIDTH 2440 +#define ATTR_SCALE_GRAD_COLOR 47239 +#define ATTR_SCALE_WIDTH 36017 +#define ATTR_SCALE_END_COLOR 44074 - /* Object Attributes */ - #define ATTR_X 120 - #define ATTR_Y 121 - #define ATTR_W 119 - #define ATTR_H 104 - #define ATTR_OPTIONS 29886 - #define ATTR_ENABLED 28193 - #define ATTR_OPACITY 10155 - #define ATTR_TOGGLE 38580 - #define ATTR_HIDDEN 11082 - #define ATTR_VIS 16320 - #define ATTR_MODE 45891 - // #define ATTR_RECT 11204 - #define ATTR_ROWS 52153 - #define ATTR_COLS 36307 - #define ATTR_MIN 46130 - #define ATTR_MAX 45636 - #define ATTR_VAL 15809 - #define ATTR_TXT 9328 - #define ATTR_SRC 4964 - #define ATTR_ID 6715 - #define ATTR_DELETE 50027 +/* Object Attributes */ +#define ATTR_X 120 +#define ATTR_Y 121 +#define ATTR_W 119 +#define ATTR_H 104 +#define ATTR_OPTIONS 29886 +#define ATTR_ENABLED 28193 +#define ATTR_OPACITY 10155 +#define ATTR_TOGGLE 38580 +#define ATTR_HIDDEN 11082 +#define ATTR_VIS 16320 +#define ATTR_MODE 45891 +// #define ATTR_RECT 11204 +#define ATTR_ROWS 52153 +#define ATTR_COLS 36307 +#define ATTR_MIN 46130 +#define ATTR_MAX 45636 +#define ATTR_VAL 15809 +#define ATTR_TXT 9328 +#define ATTR_SRC 4964 +#define ATTR_ID 6715 +#define ATTR_DELETE 50027 - // Gauge - #define ATTR_CRITICAL_VALUE 39281 - #define ATTR_ANGLE 2387 - #define ATTR_LABEL_COUNT 20356 - #define ATTR_LINE_COUNT 57860 - #define ATTR_FORMAT 38871 +// Gauge +#define ATTR_CRITICAL_VALUE 39281 +#define ATTR_ANGLE 2387 +#define ATTR_LABEL_COUNT 20356 +#define ATTR_LINE_COUNT 57860 +#define ATTR_FORMAT 38871 - // Arc - #define ATTR_TYPE 1658 - #define ATTR_ROTATION 44830 - #define ATTR_ADJUSTABLE 19145 - #define ATTR_START_ANGLE 44310 - #define ATTR_END_ANGLE 41103 - #define ATTR_START_ANGLE1 39067 - #define ATTR_END_ANGLE1 33634 +// Arc +#define ATTR_TYPE 1658 +#define ATTR_ROTATION 44830 +#define ATTR_ADJUSTABLE 19145 +#define ATTR_START_ANGLE 44310 +#define ATTR_END_ANGLE 41103 +#define ATTR_START_ANGLE1 39067 +#define ATTR_END_ANGLE1 33634 - // Buttonmatrix - #define ATTR_MAP 45628 -#endif +// Buttonmatrix +#define ATTR_MAP 45628 + +/* hasp user data */ +#define ATTR_GROUPID 48986 +#define ATTR_OBJID 41010 /* Named COLOR attributes */ #define ATTR_RED 177 @@ -336,3 +340,5 @@ _HASP_ATTRIBUTE(SCALE_END_LINE_WIDTH, scale_end_line_width, lv_style_int_t) #define ATTR_YELLOW 10484 #define ATTR_FUCHSIA 5463 #define ATTR_MAGENTA 49385 + +#endif diff --git a/src/hasp/hasp_object.cpp b/src/hasp/hasp_object.cpp index f936398f..39816f4e 100644 --- a/src/hasp/hasp_object.cpp +++ b/src/hasp/hasp_object.cpp @@ -354,6 +354,9 @@ static void btnmap_event_handler(lv_obj_t * obj, lv_event_t event) if(event == LV_EVENT_VALUE_CHANGED) { hasp_update_sleep_state(); // wakeup? hasp_send_obj_attribute_val(obj, lv_btnmatrix_get_active_btn(obj)); + } else if(event == LV_EVENT_DELETE) { + Log.verbose(TAG_HASP, F("Object deleted Event %d occured"), event); + hasp_object_delete(obj); } } @@ -383,6 +386,9 @@ void IRAM_ATTR toggle_event_handler(lv_obj_t * obj, lv_event_t event) if(event == LV_EVENT_VALUE_CHANGED) { hasp_update_sleep_state(); // wakeup? hasp_send_obj_attribute_val(obj, lv_checkbox_is_checked(obj)); + } else if(event == LV_EVENT_DELETE) { + Log.verbose(TAG_HASP, F("Object deleted Event %d occured"), event); + hasp_object_delete(obj); } } @@ -396,6 +402,9 @@ static void switch_event_handler(lv_obj_t * obj, lv_event_t event) if(event == LV_EVENT_VALUE_CHANGED) { hasp_update_sleep_state(); // wakeup? hasp_send_obj_attribute_val(obj, lv_switch_get_state(obj)); + } else if(event == LV_EVENT_DELETE) { + Log.verbose(TAG_HASP, F("Object deleted Event %d occured"), event); + hasp_object_delete(obj); } } @@ -406,39 +415,14 @@ static void switch_event_handler(lv_obj_t * obj, lv_event_t event) */ static void checkbox_event_handler(lv_obj_t * obj, lv_event_t event) { - if(event == LV_EVENT_VALUE_CHANGED) hasp_send_obj_attribute_val(obj, lv_checkbox_is_checked(obj)); + if(event == LV_EVENT_VALUE_CHANGED) { + hasp_send_obj_attribute_val(obj, lv_checkbox_is_checked(obj)); + } else if(event == LV_EVENT_DELETE) { + Log.verbose(TAG_HASP, F("Object deleted Event %d occured"), event); + hasp_object_delete(obj); + } } -/** - * Called when a dropdown list is clicked - * @param obj pointer to a dropdown list - * @param event type of event that occured - */ -/*static void ddlist_event_handler(lv_obj_t * obj, lv_event_t event) -{ - if(event == LV_EVENT_VALUE_CHANGED) { - hasp_send_obj_attribute_val(obj, lv_dropdown_get_selected(obj)); - char buffer[128]; - lv_dropdown_get_selected_str(obj, buffer, sizeof(buffer)); - hasp_send_obj_attribute_txt(obj, buffer); - } -}*/ - -/** - * Called when a roller object is clicked - * @param obj pointer to a roller object - * @param event type of event that occured - */ -/*static void roller_event_handler(lv_obj_t * obj, lv_event_t event) -{ - if(event == LV_EVENT_VALUE_CHANGED) { - hasp_send_obj_attribute_val(obj, lv_roller_get_selected(obj)); - char buffer[128]; - lv_roller_get_selected_str(obj, buffer, sizeof(buffer)); - hasp_send_obj_attribute_txt(obj, buffer); - } -}*/ - /** * Called when a dropdown or roller list is clicked * @param obj pointer to a dropdown list or roller @@ -448,9 +432,11 @@ static void selector_event_handler(lv_obj_t * obj, lv_event_t event) { if(event == LV_EVENT_VALUE_CHANGED) { uint16_t val = 0; - char property[16]; + char property[20]; char buffer[128]; + hasp_update_sleep_state(); // wakeup? + switch(obj->user_data.objid) { case LV_HASP_DDLIST: val = lv_dropdown_get_selected(obj); @@ -467,6 +453,9 @@ static void selector_event_handler(lv_obj_t * obj, lv_event_t event) } snprintf_P(property, sizeof(property), PSTR("val\":%d,\"txt"), val); hasp_send_obj_attribute_str(obj, property, buffer); + } else if(event == LV_EVENT_DELETE) { + Log.verbose(TAG_HASP, F("Object deleted Event %d occured"), event); + hasp_object_delete(obj); } } @@ -492,6 +481,9 @@ void slider_event_handler(lv_obj_t * obj, lv_event_t event) */ hasp_send_obj_attribute_val(obj, lv_slider_get_value(obj)); // last_change_event = millis(); + } else if(event == LV_EVENT_DELETE) { + Log.verbose(TAG_HASP, F("Object deleted Event %d occured"), event); + hasp_object_delete(obj); } } @@ -505,8 +497,12 @@ static void cpicker_event_handler(lv_obj_t * obj, lv_event_t event) char color[6]; snprintf_P(color, sizeof(color), PSTR("color")); - if(event == LV_EVENT_VALUE_CHANGED) hasp_send_obj_attribute_color(obj, color, lv_cpicker_get_color(obj)); - // if(event == LV_EVENT_RELEASED) hasp_send_obj_attribute_color(obj, color, lv_cpicker_get_color(obj)); + if(event == LV_EVENT_VALUE_CHANGED) { + hasp_send_obj_attribute_color(obj, color, lv_cpicker_get_color(obj)); + } else if(event == LV_EVENT_DELETE) { + Log.verbose(TAG_HASP, F("Object deleted Event %d occured"), event); + hasp_object_delete(obj); + } } // ##################### State Changers ######################################################## @@ -568,9 +564,9 @@ void hasp_new_object(const JsonObject & config, uint8_t & saved_page_id) } } - uint8_t groupid = config[F("groupid")].as(); uint8_t objid = config[F("objid")].as(); uint8_t id = config[F("id")].as(); + uint8_t groupid = config[F("groupid")].as(); /* Define Objects*/ lv_obj_t * obj = hasp_find_obj_from_parent_id(parent_obj, id); @@ -775,7 +771,7 @@ void hasp_new_object(const JsonObject & config, uint8_t & saved_page_id) lv_chart_add_series(obj, LV_COLOR_GREEN); lv_chart_add_series(obj, LV_COLOR_BLUE); - lv_chart_series_t * ser = lv_chart_get_series(obj, 2); + lv_chart_series_t * ser = my_chart_get_series(obj, 2); lv_chart_set_next(obj, ser, 10); lv_chart_set_next(obj, ser, 20); lv_chart_set_next(obj, ser, 30); @@ -828,9 +824,10 @@ void hasp_new_object(const JsonObject & config, uint8_t & saved_page_id) /* id tag the object */ // lv_obj_set_user_data(obj, id); - obj->user_data.id = id; - obj->user_data.objid = objid; //& 0b11111; - obj->user_data.groupid = groupid; // & 0b111; + obj->user_data.id = id; + obj->user_data.objid = objid; //& 0b11111; + + // obj->user_data.groupid = groupid; // get/set in atttr /** testing start **/ uint8_t temp; @@ -879,4 +876,6 @@ void hasp_object_delete(lv_obj_t * obj) } // TODO: delete value_str data for all parts + + my_obj_set_value_str_txt(obj, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, NULL); } \ No newline at end of file