From 4e6f6a82685d3f54a83193f00b58b6b5a1d31cd9 Mon Sep 17 00:00:00 2001 From: fvanroie Date: Mon, 19 Oct 2020 22:11:09 +0200 Subject: [PATCH] Fix attribute bugs --- src/hasp_attribute.cpp | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/hasp_attribute.cpp b/src/hasp_attribute.cpp index b52c8ae3..b23f9aed 100644 --- a/src/hasp_attribute.cpp +++ b/src/hasp_attribute.cpp @@ -597,8 +597,8 @@ static void hasp_process_obj_attribute_val(lv_obj_t * obj, const char * attr, co lv_obj_get_type(obj, &list); const char * objtype = list.type[0]; - if(check_obj_type(objtype, LV_HASP_BUTTON)) { - if(lv_btn_get_checkable(obj)) { + if(check_obj_type(objtype, LV_HASP_BUTTON) && lv_btn_get_checkable(obj)) { + if(update) { lv_btn_state_t state; switch(val) { case 0: @@ -607,11 +607,27 @@ static void hasp_process_obj_attribute_val(lv_obj_t * obj, const char * attr, co case 1: state = LV_BTN_STATE_CHECKED_RELEASED; break; + case 3: + state = LV_BTN_STATE_CHECKED_DISABLED; + break; default: state = LV_BTN_STATE_DISABLED; + }; + return lv_btn_set_state(obj, state); + } else { + lv_btn_state_t state = lv_btn_get_state(obj); + switch(state) { + case LV_BTN_STATE_RELEASED: + case LV_BTN_STATE_PRESSED: + return hasp_out_int(obj, attr, 0); + case LV_BTN_STATE_CHECKED_RELEASED: + case LV_BTN_STATE_CHECKED_PRESSED: + return hasp_out_int(obj, attr, 1); + case LV_BTN_STATE_DISABLED: + return hasp_out_int(obj, attr, 2); + case LV_BTN_STATE_CHECKED_DISABLED: + return hasp_out_int(obj, attr, 3); } - lv_btn_set_state(obj, state); - return; } } if(check_obj_type(objtype, LV_HASP_CHECKBOX)) { @@ -661,24 +677,28 @@ static void hasp_process_obj_attribute_range(lv_obj_t * obj, const char * attr, if(check_obj_type(objtype, LV_HASP_SLIDER)) { int16_t min = lv_slider_get_min_value(obj); int16_t max = lv_slider_get_max_value(obj); + if(update && (set_min ? val : min) <= (set_max ? val : max)) return; // prevent setting min<=max return update ? lv_slider_set_range(obj, set_min ? val : min, set_max ? val : max) : hasp_out_int(obj, attr, set_min ? lv_slider_get_min_value(obj) : lv_slider_get_max_value(obj)); } if(check_obj_type(objtype, LV_HASP_GAUGE)) { int16_t min = lv_gauge_get_min_value(obj); int16_t max = lv_gauge_get_max_value(obj); + if(update && (set_min ? val : min) <= (set_max ? val : max)) return; // prevent setting min<=max return update ? lv_gauge_set_range(obj, set_min ? val : min, set_max ? val : max) : hasp_out_int(obj, attr, set_min ? lv_gauge_get_min_value(obj) : lv_gauge_get_max_value(obj)); } if(check_obj_type(objtype, LV_HASP_BAR)) { int16_t min = lv_bar_get_min_value(obj); int16_t max = lv_bar_get_max_value(obj); + if(update && (set_min ? val : min) <= (set_max ? val : max)) return; // prevent setting min<=max return update ? lv_bar_set_range(obj, set_min ? val : min, set_max ? val : max) : hasp_out_int(obj, attr, set_min ? lv_bar_get_min_value(obj) : lv_bar_get_max_value(obj)); } if(check_obj_type(objtype, LV_HASP_LMETER)) { int16_t min = lv_linemeter_get_min_value(obj); int16_t max = lv_linemeter_get_max_value(obj); + if(update && (set_min ? val : min) <= (set_max ? val : max)) return; // prevent setting min<=max return update ? lv_linemeter_set_range(obj, set_min ? val : min, set_max ? val : max) : hasp_out_int(obj, attr, set_min ? lv_linemeter_get_min_value(obj) : lv_linemeter_get_max_value(obj));