Fix and improve state and part support #295

This commit is contained in:
fvanroie 2022-01-31 22:03:32 +01:00
parent b895dbd591
commit f0218f775d

View File

@ -317,9 +317,12 @@ static void hasp_attribute_get_part_state(lv_obj_t* obj, const char* attr_in, ch
} }
int index = atoi(&attr_in[len - 1]); int index = atoi(&attr_in[len - 1]);
// Drop Trailing partnumber if(attr_in[len - 1] == '0') {
if(attr_in[len - 1] == '0' || index > 0) { len--; // Drop Trailing partnumber
len--; } else if(index > 0) {
len--; // Drop Trailing partnumber
} else {
index = -1; // force default state when no trailing number is found
} }
strncpy(attr_out, attr_in, len); strncpy(attr_out, attr_in, len);
attr_out[len] = 0; attr_out[len] = 0;
@ -336,29 +339,61 @@ static void hasp_attribute_get_part_state(lv_obj_t* obj, const char* attr_in, ch
/* Attributes depending on objecttype */ /* Attributes depending on objecttype */
state = LV_STATE_DEFAULT; state = LV_STATE_DEFAULT;
part = LV_BTN_PART_MAIN;
switch(obj_get_type(obj)) { switch(obj_get_type(obj)) {
case LV_HASP_BUTTON: case LV_HASP_BUTTON:
switch(index) { switch(index) {
case 1: case 1:
state = LV_BTN_STATE_PRESSED; state = LV_STATE_CHECKED;
break; break;
case 2: case 2:
state = LV_BTN_STATE_DISABLED; state = LV_STATE_PRESSED + LV_STATE_DEFAULT;
break; break;
case 3: case 3:
state = LV_BTN_STATE_CHECKED_RELEASED; state = LV_STATE_PRESSED + LV_STATE_CHECKED;
break; break;
case 4: case 4:
state = LV_BTN_STATE_CHECKED_PRESSED; state = LV_STATE_DISABLED + LV_STATE_DEFAULT;
break; break;
case 5: case 5:
state = LV_BTN_STATE_CHECKED_DISABLED; state = LV_STATE_DISABLED + LV_STATE_CHECKED;
break; break;
default: default: // 0 or -1
state = LV_BTN_STATE_RELEASED; state = LV_STATE_DEFAULT;
}
break;
case LV_HASP_BTNMATRIX:
switch(index) {
case 0:
part = LV_BTNMATRIX_PART_BTN;
state = LV_STATE_DEFAULT;
break;
case 1:
part = LV_BTNMATRIX_PART_BTN;
state = LV_STATE_CHECKED;
break;
case 2:
part = LV_BTNMATRIX_PART_BTN;
state = LV_STATE_PRESSED + LV_STATE_DEFAULT;
break;
case 3:
part = LV_BTNMATRIX_PART_BTN;
state = LV_STATE_PRESSED + LV_STATE_CHECKED;
break;
case 4:
part = LV_BTNMATRIX_PART_BTN;
state = LV_STATE_DISABLED + LV_STATE_DEFAULT;
break;
case 5:
part = LV_BTNMATRIX_PART_BTN;
state = LV_STATE_DISABLED + LV_STATE_CHECKED;
break;
default: // -1
state = LV_STATE_DEFAULT;
part = LV_BTNMATRIX_PART_BG;
} }
part = LV_BTN_PART_MAIN;
break; break;
case LV_HASP_SLIDER: case LV_HASP_SLIDER:
@ -371,7 +406,7 @@ static void hasp_attribute_get_part_state(lv_obj_t* obj, const char* attr_in, ch
} else if(index == 2) { } else if(index == 2) {
if(!obj_check_type(obj, LV_HASP_BAR) && !obj_check_type(obj, LV_HASP_SPINNER)) if(!obj_check_type(obj, LV_HASP_BAR) && !obj_check_type(obj, LV_HASP_SPINNER))
part = LV_SLIDER_PART_KNOB; part = LV_SLIDER_PART_KNOB;
} else { } else { // index = 0 or -1
part = LV_SLIDER_PART_BG; part = LV_SLIDER_PART_BG;
} }
break; break;
@ -389,50 +424,51 @@ static void hasp_attribute_get_part_state(lv_obj_t* obj, const char* attr_in, ch
break; break;
case LV_HASP_GAUGE: case LV_HASP_GAUGE:
part = index <= LV_GAUGE_PART_NEEDLE ? index : LV_GAUGE_PART_MAIN; part = (index > 0) && (index <= LV_GAUGE_PART_NEEDLE) ? index : LV_GAUGE_PART_MAIN;
break; break;
case LV_HASP_TABVIEW: case LV_HASP_TABVIEW:
switch(index) { switch(index) {
case 0:
part = LV_TABVIEW_PART_TAB_BTN; // Button Matrix
state = LV_STATE_DEFAULT;
break;
case 1: case 1:
part = LV_TABVIEW_PART_TAB_BG; part = LV_TABVIEW_PART_TAB_BTN; // Button Matrix
state = LV_BTN_STATE_RELEASED; state = LV_STATE_CHECKED;
break; break;
case 2: case 2:
part = LV_TABVIEW_PART_TAB_BG; part = LV_TABVIEW_PART_TAB_BTN; // Button Matrix
state = LV_BTN_STATE_PRESSED; state = LV_STATE_PRESSED + LV_STATE_DEFAULT;
break; break;
case 3: case 3:
part = LV_TABVIEW_PART_TAB_BG; part = LV_TABVIEW_PART_TAB_BTN; // Button Matrix
state = LV_BTN_STATE_DISABLED; state = LV_STATE_PRESSED + LV_STATE_CHECKED;
break; break;
case 4: case 4:
part = LV_TABVIEW_PART_TAB_BG; part = LV_TABVIEW_PART_TAB_BTN; // Button Matrix
state = LV_BTN_STATE_CHECKED_RELEASED; state = LV_STATE_DISABLED + LV_STATE_DEFAULT;
break; break;
case 5: case 5:
part = LV_TABVIEW_PART_TAB_BG; part = LV_TABVIEW_PART_TAB_BTN; // Button Matrix
state = LV_BTN_STATE_CHECKED_PRESSED; state = LV_STATE_DISABLED + LV_STATE_CHECKED;
break; break;
case 6: case 6:
part = LV_TABVIEW_PART_TAB_BG; part = LV_TABVIEW_PART_TAB_BG; // Matrix background
state = LV_BTN_STATE_CHECKED_DISABLED; // state = LV_STATE_DEFAULT;
break; break;
case 7: case 7:
part = LV_TABVIEW_PART_TAB_BTN; part = LV_TABVIEW_PART_INDIC; // Rectangle-like object under the currently selected tab
// state = LV_STATE_DEFAULT;
break; break;
case 8: case 8:
part = LV_TABVIEW_PART_INDIC; part = LV_TABVIEW_PART_BG_SCROLLABLE; // It holds the content of the tabs next to each other
// state = LV_STATE_DEFAULT;
break; break;
case 9: default: // 9 or -1
part = LV_TABVIEW_PART_BG_SCROLLABLE;
break;
default:
part = LV_TABVIEW_PART_BG; part = LV_TABVIEW_PART_BG;
// state = LV_STATE_DEFAULT;
} }
break; break;