mirror of
https://github.com/HASwitchPlate/openHASP.git
synced 2025-07-24 11:46:34 +00:00
Add back, prev, next attributes to pages #114
This commit is contained in:
parent
0db2a8be67
commit
971846efea
@ -178,11 +178,6 @@ static bool attribute_update_lv_property(lv_obj_t * obj, const char * attr_p, ui
|
||||
}
|
||||
#endif
|
||||
|
||||
static void my_obj_set_swipeid(lv_obj_t* obj, uint8_t swipeid)
|
||||
{
|
||||
if(obj) obj->user_data.swipeid = swipeid % 16;
|
||||
}
|
||||
|
||||
// OK - this function is missing in lvgl
|
||||
static uint8_t my_roller_get_visible_row_count(lv_obj_t* roller)
|
||||
{
|
||||
@ -1250,6 +1245,29 @@ static void hasp_process_gauge_attribute(lv_obj_t* obj, const char* attr_p, uint
|
||||
|
||||
// ##################### Common Attributes ########################################################
|
||||
|
||||
static void hasp_process_page_attributes(lv_obj_t* obj, const char* attr_p, uint16_t attr_hash, uint8_t val,
|
||||
bool update)
|
||||
{
|
||||
uint8_t pageid;
|
||||
|
||||
if(haspPages.get_id(obj, &pageid)) {
|
||||
switch(attr_hash) {
|
||||
case ATTR_NEXT:
|
||||
update ? haspPages.set_next(pageid, val) : attr_out_int(obj, attr_p, haspPages.get_next(pageid));
|
||||
break;
|
||||
|
||||
case ATTR_PREV:
|
||||
update ? haspPages.set_prev(pageid, val) : attr_out_int(obj, attr_p, haspPages.get_prev(pageid));
|
||||
break;
|
||||
|
||||
// case ATTR_BACK:
|
||||
default:
|
||||
update ? haspPages.set_back(pageid, val) : attr_out_int(obj, attr_p, haspPages.get_back(pageid));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void hasp_process_obj_attribute_txt(lv_obj_t* obj, const char* attr, const char* payload, bool update)
|
||||
{
|
||||
/* Attributes depending on objecttype */
|
||||
@ -1418,13 +1436,12 @@ void hasp_process_obj_attribute(lv_obj_t* obj, const char* attr_p, const char* p
|
||||
LOG_WARNING(TAG_ATTR, F(D_OBJECT_UNKNOWN));
|
||||
return;
|
||||
}
|
||||
int16_t val = atoi(payload);
|
||||
|
||||
char* attr = (char*)attr_p;
|
||||
if(*attr == '.') attr++; // strip leading '.'
|
||||
|
||||
uint16_t attr_hash = Parser::get_sdbm(attr);
|
||||
// LOG_VERBOSE(TAG_ATTR,"%s => %d", attr, attr_hash);
|
||||
int16_t val = atoi(payload);
|
||||
|
||||
/* 16-bit Hash Lookup Table */
|
||||
switch(attr_hash) {
|
||||
@ -1543,7 +1560,7 @@ void hasp_process_obj_attribute(lv_obj_t* obj, const char* attr_p, const char* p
|
||||
break; // attribute_found
|
||||
|
||||
case ATTR_SWIPE:
|
||||
update ? my_obj_set_swipeid(obj, Parser::is_true(payload))
|
||||
update ? (void)(obj->user_data.swipeid = Parser::is_true(payload) % 16)
|
||||
: attr_out_int(obj, attr, obj->user_data.swipeid);
|
||||
break; // attribute_found
|
||||
|
||||
@ -1765,6 +1782,15 @@ void hasp_process_obj_attribute(lv_obj_t* obj, const char* attr_p, const char* p
|
||||
lv_obj_move_background(obj);
|
||||
break; // attribute_found
|
||||
|
||||
case ATTR_NEXT:
|
||||
case ATTR_PREV:
|
||||
case ATTR_BACK:
|
||||
if(check_obj_type(obj, LV_HASP_SCREEN)) {
|
||||
hasp_process_page_attributes(obj, attr_p, attr_hash, val, update);
|
||||
break; // attribute_found
|
||||
}
|
||||
goto attribute_not_found;
|
||||
|
||||
default:
|
||||
hasp_local_style_attr(obj, attr, attr_hash, payload, update);
|
||||
}
|
||||
|
@ -260,6 +260,11 @@ _HASP_ATTRIBUTE(SCALE_END_LINE_WIDTH, scale_end_line_width, lv_style_int_t)
|
||||
#define ATTR_SCALE_WIDTH 36017
|
||||
#define ATTR_SCALE_END_COLOR 44074
|
||||
|
||||
/* Page Attributes */
|
||||
#define ATTR_NEXT 60915
|
||||
#define ATTR_PREV 21587
|
||||
#define ATTR_BACK 57799
|
||||
|
||||
/* Object Attributes */
|
||||
#define ATTR_X 120
|
||||
#define ATTR_Y 121
|
||||
|
@ -35,6 +35,7 @@ enum lv_hasp_obj_type_t {
|
||||
LV_HASP_CALENDER = 54,
|
||||
|
||||
/* Containers */
|
||||
LV_HASP_SCREEN = 1,
|
||||
LV_HASP_CONTAINER = 70,
|
||||
LV_HASP_WINDOW = 71, // placeholder
|
||||
LV_HASP_MSGBOX = 72, // placeholder
|
||||
|
@ -8,6 +8,14 @@
|
||||
|
||||
namespace hasp {
|
||||
|
||||
bool Page::is_valid(uint8_t pageid)
|
||||
{
|
||||
if(pageid > 0 && pageid <= HASP_NUM_PAGES) return true;
|
||||
|
||||
LOG_WARNING(TAG_HASP, F(D_HASP_INVALID_PAGE), pageid);
|
||||
return false;
|
||||
}
|
||||
|
||||
Page::Page()
|
||||
{
|
||||
// LVGL is not yet initialized at construction time
|
||||
@ -21,7 +29,8 @@ size_t Page::count()
|
||||
void Page::init(uint8_t start_page)
|
||||
{
|
||||
for(int i = 0; i < count(); i++) {
|
||||
_pages[i] = lv_obj_create(NULL, NULL);
|
||||
_pages[i] = lv_obj_create(NULL, NULL);
|
||||
_pages[i]->user_data.objid = LV_HASP_SCREEN;
|
||||
lv_obj_set_event_cb(_pages[i], generic_event_handler);
|
||||
|
||||
/**< If the `indev` was pressing this object but swiped out while pressing do not search other object.*/
|
||||
@ -34,14 +43,12 @@ void Page::init(uint8_t start_page)
|
||||
}
|
||||
}
|
||||
|
||||
void Page::clear(uint16_t pageid)
|
||||
void Page::clear(uint8_t pageid)
|
||||
{
|
||||
lv_obj_t* page = get_obj(pageid);
|
||||
if(!page || (pageid > HASP_NUM_PAGES)) {
|
||||
LOG_WARNING(TAG_HASP, F(D_HASP_INVALID_PAGE), pageid);
|
||||
} else if(page == lv_layer_sys() /*|| page == lv_layer_top()*/) {
|
||||
if(page == lv_layer_sys() /*|| page == lv_layer_top()*/) {
|
||||
LOG_WARNING(TAG_HASP, F(D_HASP_INVALID_LAYER));
|
||||
} else {
|
||||
} else if(is_valid(pageid)) {
|
||||
LOG_TRACE(TAG_HASP, F(D_HASP_CLEAR_PAGE), pageid);
|
||||
lv_obj_clean(page);
|
||||
}
|
||||
@ -55,7 +62,9 @@ void Page::clear(uint16_t pageid)
|
||||
void Page::set(uint8_t pageid, lv_scr_load_anim_t animation)
|
||||
{
|
||||
lv_obj_t* page = get_obj(pageid);
|
||||
if(!page || pageid == 0 || pageid > HASP_NUM_PAGES) {
|
||||
if(!is_valid(pageid)) {
|
||||
return;
|
||||
} else if(!page) {
|
||||
LOG_WARNING(TAG_HASP, F(D_HASP_INVALID_PAGE), pageid);
|
||||
} else {
|
||||
LOG_TRACE(TAG_HASP, F(D_HASP_CHANGE_PAGE), pageid);
|
||||
@ -67,6 +76,36 @@ void Page::set(uint8_t pageid, lv_scr_load_anim_t animation)
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t Page::get_next(uint8_t pageid)
|
||||
{
|
||||
return is_valid(pageid) ? _meta_data[pageid - PAGE_START_INDEX].next : 0;
|
||||
}
|
||||
|
||||
uint8_t Page::get_prev(uint8_t pageid)
|
||||
{
|
||||
return is_valid(pageid) ? _meta_data[pageid - PAGE_START_INDEX].prev : 0;
|
||||
}
|
||||
|
||||
uint8_t Page::get_back(uint8_t pageid)
|
||||
{
|
||||
return is_valid(pageid) ? _meta_data[pageid - PAGE_START_INDEX].back : 0;
|
||||
}
|
||||
|
||||
void Page::set_next(uint8_t pageid, uint8_t nextid)
|
||||
{
|
||||
if(is_valid(pageid) && is_valid(nextid)) _meta_data[pageid - PAGE_START_INDEX].next = nextid;
|
||||
}
|
||||
|
||||
void Page::set_prev(uint8_t pageid, uint8_t previd)
|
||||
{
|
||||
if(is_valid(pageid) && is_valid(previd)) _meta_data[pageid - PAGE_START_INDEX].prev = previd;
|
||||
}
|
||||
|
||||
void Page::set_back(uint8_t pageid, uint8_t backid)
|
||||
{
|
||||
if(is_valid(pageid) && is_valid(backid)) _meta_data[pageid - PAGE_START_INDEX].back = backid;
|
||||
}
|
||||
|
||||
void Page::next(lv_scr_load_anim_t animation)
|
||||
{
|
||||
set(_meta_data[_current_page - PAGE_START_INDEX].next, animation);
|
||||
|
@ -35,16 +35,26 @@ class Page {
|
||||
Page();
|
||||
size_t count();
|
||||
void init(uint8_t start_page);
|
||||
void clear(uint16_t pageid);
|
||||
void clear(uint8_t pageid);
|
||||
// void set(uint8_t pageid);
|
||||
void set(uint8_t pageid, lv_scr_load_anim_t animation);
|
||||
|
||||
void next(lv_scr_load_anim_t animation);
|
||||
void prev(lv_scr_load_anim_t animation);
|
||||
void back(lv_scr_load_anim_t animation);
|
||||
|
||||
uint8_t get_next(uint8_t pageid);
|
||||
uint8_t get_prev(uint8_t pageid);
|
||||
uint8_t get_back(uint8_t pageid);
|
||||
void set_next(uint8_t pageid, uint8_t nextid);
|
||||
void set_prev(uint8_t pageid, uint8_t previd);
|
||||
void set_back(uint8_t pageid, uint8_t backid);
|
||||
|
||||
uint8_t get();
|
||||
void load_jsonl(const char* pagesfile);
|
||||
lv_obj_t* get_obj(uint8_t pageid);
|
||||
bool get_id(lv_obj_t* obj, uint8_t* pageid);
|
||||
bool is_valid(uint8_t pageid);
|
||||
};
|
||||
|
||||
} // namespace hasp
|
||||
|
Loading…
x
Reference in New Issue
Block a user