diff --git a/src/hasp/hasp_attribute.cpp b/src/hasp/hasp_attribute.cpp index b8b42eca..7bba5ed4 100644 --- a/src/hasp/hasp_attribute.cpp +++ b/src/hasp/hasp_attribute.cpp @@ -1751,6 +1751,7 @@ static hasp_attribute_type_t attribute_common_text(lv_obj_t* obj, uint16_t attr_ {LV_HASP_LABEL, ATTR_TEXT, my_label_set_text, my_label_get_text}, {LV_HASP_LABEL, ATTR_TEMPLATE, my_obj_set_template, my_obj_get_template}, {LV_HASP_CHECKBOX, ATTR_TEXT, lv_checkbox_set_text, lv_checkbox_get_text}, + {LV_HASP_DROPDOWN, ATTR_TEXT, my_dropdown_set_text, my_dropdown_get_text}, {LV_HASP_TABVIEW, ATTR_TEXT, my_tabview_set_text, my_tabview_get_text}, {LV_HASP_TEXTAREA, ATTR_TEXT, lv_textarea_set_text, lv_textarea_get_text}, {LV_HASP_TAB, ATTR_TEXT, my_tab_set_text, my_tab_get_text}, diff --git a/src/hasp/hasp_attribute_helper.h b/src/hasp/hasp_attribute_helper.h index a88e716f..b900182b 100644 --- a/src/hasp/hasp_attribute_helper.h +++ b/src/hasp/hasp_attribute_helper.h @@ -472,6 +472,31 @@ lv_obj_t* FindButtonLabel(lv_obj_t* btn) return NULL; } +// OK - lvgl does not return a const char * +static const char* my_dropdown_get_text(const lv_obj_t* dd) +{ + const char* str_p = lv_dropdown_get_text((lv_obj_t*)dd); + return str_p ? str_p : ""; +} + +// OK - lvgl does not return a const char * +static void my_dropdown_set_text(lv_obj_t* dd, const char* text) +{ + size_t len = 0; + if(text) len = strlen(text) + 1; + + // release previous text + char* str_p = (char*)lv_dropdown_get_text(dd); + if(str_p) lv_mem_free(str_p); + + // reserve and copy new text + str_p = (char*)lv_mem_alloc(len); + if(str_p != NULL) strncpy(str_p, text, len); + + lv_dropdown_set_text((lv_obj_t*)dd, str_p); // library does not return const + lv_obj_invalidate(dd); // Needed if old ptr is equal to new ptr +} + // OK - lvgl does not return a const char * static const char* my_label_get_text(const lv_obj_t* label) { diff --git a/src/hasp/hasp_event.cpp b/src/hasp/hasp_event.cpp index 051a65c8..ed801f8b 100644 --- a/src/hasp/hasp_event.cpp +++ b/src/hasp/hasp_event.cpp @@ -99,6 +99,10 @@ void delete_event_handler(lv_obj_t* obj, lv_event_t event) my_obj_del_task(obj); break; + case LV_HASP_DROPDOWN: + lv_mem_free(lv_dropdown_get_text(obj)); + break; + default: break; } @@ -302,8 +306,8 @@ static void event_object_selection_changed(lv_obj_t* obj, uint8_t eventid, int16 char eventname[8]; Parser::get_event_name(eventid, eventname, sizeof(eventname)); if(const char* tag = my_obj_get_tag(obj)) - snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"val\":%d,\"text\":%s,\"tag\":%s}"), eventname, - val, serialized_text, tag); + snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"val\":%d,\"text\":%s,\"tag\":%s}"), eventname, val, + serialized_text, tag); else snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"val\":%d,\"text\":%s}"), eventname, val, serialized_text); diff --git a/src/hasp/hasp_object.cpp b/src/hasp/hasp_object.cpp index a28d7946..2bf787e0 100644 --- a/src/hasp/hasp_object.cpp +++ b/src/hasp/hasp_object.cpp @@ -640,6 +640,7 @@ void hasp_new_object(const JsonObject& config, uint8_t& saved_page_id) case HASP_OBJ_DROPDOWN: obj = lv_dropdown_create(parent_obj, NULL); if(obj) { + lv_dropdown_set_text(obj, NULL); // Clear default text lv_dropdown_set_draw_arrow(obj, true); // lv_dropdown_set_anim_time(obj, 200); lv_obj_set_top(obj, true);