Fix dropdown text when show_selected=0

This commit is contained in:
fvanroie 2024-10-08 20:00:41 +02:00
parent 22b9d894dc
commit 31a1272c5e
4 changed files with 33 additions and 2 deletions

View File

@ -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_TEXT, my_label_set_text, my_label_get_text},
{LV_HASP_LABEL, ATTR_TEMPLATE, my_obj_set_template, my_obj_get_template}, {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_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_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_TEXTAREA, ATTR_TEXT, lv_textarea_set_text, lv_textarea_get_text},
{LV_HASP_TAB, ATTR_TEXT, my_tab_set_text, my_tab_get_text}, {LV_HASP_TAB, ATTR_TEXT, my_tab_set_text, my_tab_get_text},

View File

@ -472,6 +472,31 @@ lv_obj_t* FindButtonLabel(lv_obj_t* btn)
return NULL; 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 * // OK - lvgl does not return a const char *
static const char* my_label_get_text(const lv_obj_t* label) static const char* my_label_get_text(const lv_obj_t* label)
{ {

View File

@ -99,6 +99,10 @@ void delete_event_handler(lv_obj_t* obj, lv_event_t event)
my_obj_del_task(obj); my_obj_del_task(obj);
break; break;
case LV_HASP_DROPDOWN:
lv_mem_free(lv_dropdown_get_text(obj));
break;
default: default:
break; break;
} }
@ -302,8 +306,8 @@ static void event_object_selection_changed(lv_obj_t* obj, uint8_t eventid, int16
char eventname[8]; char eventname[8];
Parser::get_event_name(eventid, eventname, sizeof(eventname)); Parser::get_event_name(eventid, eventname, sizeof(eventname));
if(const char* tag = my_obj_get_tag(obj)) if(const char* tag = my_obj_get_tag(obj))
snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"val\":%d,\"text\":%s,\"tag\":%s}"), eventname, snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"val\":%d,\"text\":%s,\"tag\":%s}"), eventname, val,
val, serialized_text, tag); serialized_text, tag);
else else
snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"val\":%d,\"text\":%s}"), eventname, val, snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"val\":%d,\"text\":%s}"), eventname, val,
serialized_text); serialized_text);

View File

@ -640,6 +640,7 @@ void hasp_new_object(const JsonObject& config, uint8_t& saved_page_id)
case HASP_OBJ_DROPDOWN: case HASP_OBJ_DROPDOWN:
obj = lv_dropdown_create(parent_obj, NULL); obj = lv_dropdown_create(parent_obj, NULL);
if(obj) { if(obj) {
lv_dropdown_set_text(obj, NULL); // Clear default text
lv_dropdown_set_draw_arrow(obj, true); lv_dropdown_set_draw_arrow(obj, true);
// lv_dropdown_set_anim_time(obj, 200); // lv_dropdown_set_anim_time(obj, 200);
lv_obj_set_top(obj, true); lv_obj_set_top(obj, true);