mirror of
https://github.com/HASwitchPlate/openHASP.git
synced 2025-07-28 05:36:37 +00:00
Separate State and Parts into two digits
This commit is contained in:
parent
a7a3ffab3d
commit
43fe7e4aff
@ -301,27 +301,36 @@ static hasp_attribute_type_t hasp_process_label_long_mode(lv_obj_t* obj, const c
|
|||||||
return HASP_ATTR_TYPE_NOT_FOUND;
|
return HASP_ATTR_TYPE_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t hasp_attribute_split_payload(const char* payload)
|
||||||
|
{
|
||||||
|
size_t pos = 0;
|
||||||
|
while(*(payload + pos) != '\0') {
|
||||||
|
if(Parser::is_only_digits(payload + pos)) return pos;
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
static void hasp_attribute_get_part_state(lv_obj_t* obj, const char* attr_in, char* attr_out, uint8_t& part,
|
static void hasp_attribute_get_part_state(lv_obj_t* obj, const char* attr_in, char* attr_out, uint8_t& part,
|
||||||
uint8_t& state)
|
uint8_t& state)
|
||||||
{
|
{
|
||||||
int len = strlen(attr_in);
|
|
||||||
if(len <= 0 || len >= 32) {
|
|
||||||
attr_out[0] = 0; // empty string
|
|
||||||
part = LV_OBJ_PART_MAIN;
|
|
||||||
state = LV_STATE_DEFAULT;
|
state = LV_STATE_DEFAULT;
|
||||||
|
part = LV_OBJ_PART_MAIN;
|
||||||
|
|
||||||
|
size_t pos = hasp_attribute_split_payload(attr_in);
|
||||||
|
if(pos <= 0 || pos >= 32) {
|
||||||
|
attr_out[0] = 0; // empty string
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int index = atoi(&attr_in[len - 1]);
|
|
||||||
|
|
||||||
if(attr_in[len - 1] == '0') {
|
strncpy(attr_out, attr_in, pos);
|
||||||
len--; // Drop Trailing partnumber
|
attr_out[pos] = 0;
|
||||||
} else if(index > 0) {
|
|
||||||
len--; // Drop Trailing partnumber
|
int index = atoi(attr_in + pos);
|
||||||
} else {
|
uint8_t state_num = index % 10;
|
||||||
index = -1; // force default state when no trailing number is found
|
uint8_t part_num = index - state_num;
|
||||||
}
|
|
||||||
strncpy(attr_out, attr_in, len);
|
LOG_VERBOSE(TAG_ATTR, F("Parsed %s to %s with part %d and state %d"), attr_in, attr_out, part_num, state_num);
|
||||||
attr_out[len] = 0;
|
|
||||||
|
|
||||||
#if(LV_SLIDER_PART_INDIC != LV_SWITCH_PART_INDIC) || (LV_SLIDER_PART_KNOB != LV_SWITCH_PART_KNOB) || \
|
#if(LV_SLIDER_PART_INDIC != LV_SWITCH_PART_INDIC) || (LV_SLIDER_PART_KNOB != LV_SWITCH_PART_KNOB) || \
|
||||||
(LV_SLIDER_PART_BG != LV_SWITCH_PART_BG) || (LV_SLIDER_PART_INDIC != LV_ARC_PART_INDIC) || \
|
(LV_SLIDER_PART_BG != LV_SWITCH_PART_BG) || (LV_SLIDER_PART_INDIC != LV_ARC_PART_INDIC) || \
|
||||||
@ -334,60 +343,38 @@ static void hasp_attribute_get_part_state(lv_obj_t* obj, const char* attr_in, ch
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Attributes depending on objecttype */
|
/* Attributes depending on objecttype */
|
||||||
|
switch(state_num) {
|
||||||
|
case 1:
|
||||||
|
state = LV_STATE_CHECKED;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
state = LV_STATE_PRESSED + LV_STATE_DEFAULT;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
state = LV_STATE_PRESSED + LV_STATE_CHECKED;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
state = LV_STATE_DISABLED + LV_STATE_DEFAULT;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
state = LV_STATE_DISABLED + LV_STATE_CHECKED;
|
||||||
|
break;
|
||||||
|
default: // 0 or 6-9
|
||||||
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) {
|
part = LV_BTN_PART_MAIN;
|
||||||
case 1:
|
|
||||||
state = LV_STATE_CHECKED;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
state = LV_STATE_PRESSED + LV_STATE_DEFAULT;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
state = LV_STATE_PRESSED + LV_STATE_CHECKED;
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
state = LV_STATE_DISABLED + LV_STATE_DEFAULT;
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
state = LV_STATE_DISABLED + LV_STATE_CHECKED;
|
|
||||||
break;
|
|
||||||
default: // 0 or -1
|
|
||||||
state = LV_STATE_DEFAULT;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LV_HASP_BTNMATRIX:
|
case LV_HASP_BTNMATRIX:
|
||||||
switch(index) {
|
switch(part_num) {
|
||||||
case 0:
|
case 10:
|
||||||
|
case 20:
|
||||||
part = LV_BTNMATRIX_PART_BTN;
|
part = LV_BTNMATRIX_PART_BTN;
|
||||||
state = LV_STATE_DEFAULT;
|
|
||||||
break;
|
break;
|
||||||
case 1:
|
default:
|
||||||
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_BTNMATRIX_PART_BG;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -395,76 +382,56 @@ static void hasp_attribute_get_part_state(lv_obj_t* obj, const char* attr_in, ch
|
|||||||
case LV_HASP_SLIDER:
|
case LV_HASP_SLIDER:
|
||||||
case LV_HASP_SWITCH:
|
case LV_HASP_SWITCH:
|
||||||
case LV_HASP_ARC:
|
case LV_HASP_ARC:
|
||||||
|
if(part_num == 10) {
|
||||||
|
part = LV_SLIDER_PART_INDIC;
|
||||||
|
} else if(part_num == 20) {
|
||||||
|
part = LV_SLIDER_PART_KNOB;
|
||||||
|
} else {
|
||||||
|
part = LV_SLIDER_PART_BG;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case LV_HASP_BAR:
|
case LV_HASP_BAR:
|
||||||
case LV_HASP_SPINNER:
|
case LV_HASP_SPINNER:
|
||||||
if(index == 1) {
|
if(part_num == 10) {
|
||||||
part = LV_SLIDER_PART_INDIC;
|
part = LV_SLIDER_PART_INDIC;
|
||||||
} else if(index == 2) {
|
} else {
|
||||||
if(!obj_check_type(obj, LV_HASP_BAR) && !obj_check_type(obj, LV_HASP_SPINNER))
|
|
||||||
part = LV_SLIDER_PART_KNOB;
|
|
||||||
} else { // index = 0 or -1
|
|
||||||
part = LV_SLIDER_PART_BG;
|
part = LV_SLIDER_PART_BG;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LV_HASP_CHECKBOX:
|
case LV_HASP_CHECKBOX:
|
||||||
part = index == 1 ? LV_CHECKBOX_PART_BULLET : LV_CHECKBOX_PART_BG;
|
part = part_num == 10 ? LV_CHECKBOX_PART_BULLET : LV_CHECKBOX_PART_BG;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LV_HASP_CPICKER:
|
case LV_HASP_CPICKER:
|
||||||
part = index == 1 ? LV_CPICKER_PART_KNOB : LV_CPICKER_PART_MAIN;
|
part = part_num == 20 ? LV_CPICKER_PART_KNOB : LV_CPICKER_PART_MAIN;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LV_HASP_ROLLER:
|
case LV_HASP_ROLLER:
|
||||||
part = index == 1 ? LV_ROLLER_PART_SELECTED : LV_ROLLER_PART_BG;
|
part = part_num == 10 ? LV_ROLLER_PART_SELECTED : LV_ROLLER_PART_BG;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LV_HASP_GAUGE:
|
case LV_HASP_GAUGE:
|
||||||
part = (index > 0) && (index <= LV_GAUGE_PART_NEEDLE) ? index : LV_GAUGE_PART_MAIN;
|
part = (part_num == 10) ? LV_GAUGE_PART_NEEDLE : LV_GAUGE_PART_MAIN;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LV_HASP_TABVIEW:
|
case LV_HASP_TABVIEW:
|
||||||
switch(index) {
|
switch(part_num) {
|
||||||
case 0:
|
case 10:
|
||||||
part = LV_TABVIEW_PART_TAB_BTN; // Button Matrix
|
|
||||||
state = LV_STATE_DEFAULT;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
part = LV_TABVIEW_PART_TAB_BTN; // Button Matrix
|
|
||||||
state = LV_STATE_CHECKED;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
part = LV_TABVIEW_PART_TAB_BTN; // Button Matrix
|
|
||||||
state = LV_STATE_PRESSED + LV_STATE_DEFAULT;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
part = LV_TABVIEW_PART_TAB_BTN; // Button Matrix
|
|
||||||
state = LV_STATE_PRESSED + LV_STATE_CHECKED;
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
part = LV_TABVIEW_PART_TAB_BTN; // Button Matrix
|
|
||||||
state = LV_STATE_DISABLED + LV_STATE_DEFAULT;
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
part = LV_TABVIEW_PART_TAB_BTN; // Button Matrix
|
|
||||||
state = LV_STATE_DISABLED + LV_STATE_CHECKED;
|
|
||||||
break;
|
|
||||||
case 6:
|
|
||||||
part = LV_TABVIEW_PART_TAB_BG; // Matrix background
|
|
||||||
// state = LV_STATE_DEFAULT;
|
|
||||||
break;
|
|
||||||
case 7:
|
|
||||||
part = LV_TABVIEW_PART_INDIC; // Rectangle-like object under the currently selected tab
|
part = LV_TABVIEW_PART_INDIC; // Rectangle-like object under the currently selected tab
|
||||||
// state = LV_STATE_DEFAULT;
|
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 20:
|
||||||
|
part = LV_TABVIEW_PART_TAB_BTN; // knob = Button Matrix Button
|
||||||
|
break;
|
||||||
|
case 30:
|
||||||
|
part = LV_TABVIEW_PART_TAB_BG; // Matrix background
|
||||||
|
break;
|
||||||
|
case 40:
|
||||||
part = LV_TABVIEW_PART_BG_SCROLLABLE; // It holds the content of the tabs next to each other
|
part = LV_TABVIEW_PART_BG_SCROLLABLE; // It holds the content of the tabs next to each other
|
||||||
// state = LV_STATE_DEFAULT;
|
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
default: // 9 or -1
|
|
||||||
part = LV_TABVIEW_PART_BG;
|
part = LV_TABVIEW_PART_BG;
|
||||||
// state = LV_STATE_DEFAULT;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user