diff --git a/src/hasp/hasp_attribute.cpp b/src/hasp/hasp_attribute.cpp index 391b6de6..5d3dd453 100644 --- a/src/hasp/hasp_attribute.cpp +++ b/src/hasp/hasp_attribute.cpp @@ -1161,6 +1161,42 @@ static void hasp_process_lmeter_attribute(lv_obj_t* obj, const char* attr_p, uin LOG_WARNING(TAG_ATTR, F(D_ATTRIBUTE_UNKNOWN), attr_p); } +static void hasp_process_dropdown_attribute(lv_obj_t* obj, const char* attr_p, uint16_t attr_hash, const char* payload, + bool update) +{ + // We already know it's a gauge object + int16_t intval = atoi(payload); + uint16_t val = atoi(payload); + + char* attr = (char*)attr_p; + if(*attr == '.') attr++; // strip leading '.' + + switch(attr_hash) { + case ATTR_DIRECTION: + return (update) ? lv_dropdown_set_dir(obj, intval) : hasp_out_int(obj, attr, lv_dropdown_get_dir(obj)); + + case ATTR_SYMBOL: + return (update) ? lv_dropdown_set_symbol(obj, payload) + : hasp_out_str(obj, attr, lv_dropdown_get_symbol(obj)); + + case ATTR_OPEN: + return lv_dropdown_open(obj); + + case ATTR_CLOSE: + return lv_dropdown_close(obj); + + case ATTR_MAX_HEIGHT: + return (update) ? lv_dropdown_set_max_height(obj, intval) + : hasp_out_int(obj, attr, lv_dropdown_get_max_height(obj)); + + case ATTR_SHOW_SELECTED: + return (update) ? lv_dropdown_set_show_selected(obj, val) + : hasp_out_int(obj, attr, lv_dropdown_get_show_selected(obj)); + } + + LOG_WARNING(TAG_ATTR, F(D_ATTRIBUTE_UNKNOWN), attr_p); +} + static void hasp_process_gauge_attribute(lv_obj_t* obj, const char* attr_p, uint16_t attr_hash, const char* payload, bool update) { @@ -1532,6 +1568,10 @@ void hasp_process_obj_attribute(lv_obj_t* obj, const char* attr_p, const char* p } break; // attribute_found + /* case ATTR_ANIM_TIME: + return (update) ? lv_anim_time(obj, val) + : hasp_out_int(obj, attr, lv_gauge_get_angle_offset(obj)); */ + case ATTR_ROWS: if(check_obj_type(obj, LV_HASP_ROLLER)) { update ? lv_roller_set_visible_row_count(obj, (uint8_t)val) @@ -1653,6 +1693,19 @@ void hasp_process_obj_attribute(lv_obj_t* obj, const char* attr_p, const char* p } break; // attribute_found + case ATTR_DIRECTION: + case ATTR_SYMBOL: + case ATTR_OPEN: + case ATTR_CLOSE: + case ATTR_MAX_HEIGHT: + case ATTR_SHOW_SELECTED: + if(check_obj_type(obj, LV_HASP_DROPDOWN)) { + hasp_process_dropdown_attribute(obj, attr_p, attr_hash, payload, update); + } else { + goto attribute_not_found; + } + break; // attribute_found + case ATTR_RED: // TODO: remove temp RED if(check_obj_type(obj, LV_HASP_BTNMATRIX)) { my_btnmatrix_map_clear(obj); // TODO : remove this test property diff --git a/src/hasp/hasp_attribute.h b/src/hasp/hasp_attribute.h index 38b656b7..fb83aedf 100644 --- a/src/hasp/hasp_attribute.h +++ b/src/hasp/hasp_attribute.h @@ -286,6 +286,7 @@ _HASP_ATTRIBUTE(SCALE_END_LINE_WIDTH, scale_end_line_width, lv_style_int_t) #define ATTR_TEXT 53869 #define ATTR_SRC 4964 #define ATTR_ID 6715 +#define ATTR_ANIM_TIME 59451 // methods #define ATTR_DELETE 50027 @@ -308,6 +309,14 @@ _HASP_ATTRIBUTE(SCALE_END_LINE_WIDTH, scale_end_line_width, lv_style_int_t) #define ATTR_START_ANGLE1 39067 #define ATTR_END_ANGLE1 33634 +// Dropdown +#define ATTR_DIRECTION 32415 +#define ATTR_SYMBOL 33592 +#define ATTR_OPEN 25738 +#define ATTR_CLOSE 41880 +#define ATTR_MAX_HEIGHT 30946 +#define ATTR_SHOW_SELECTED 56029 + // Buttonmatrix #define ATTR_MAP 45628