mirror of
https://github.com/HASwitchPlate/openHASP.git
synced 2025-07-27 21:26:43 +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
|
#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
|
// OK - this function is missing in lvgl
|
||||||
static uint8_t my_roller_get_visible_row_count(lv_obj_t* roller)
|
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 ########################################################
|
// ##################### 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)
|
static void hasp_process_obj_attribute_txt(lv_obj_t* obj, const char* attr, const char* payload, bool update)
|
||||||
{
|
{
|
||||||
/* Attributes depending on objecttype */
|
/* 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));
|
LOG_WARNING(TAG_ATTR, F(D_OBJECT_UNKNOWN));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int16_t val = atoi(payload);
|
|
||||||
|
|
||||||
char* attr = (char*)attr_p;
|
char* attr = (char*)attr_p;
|
||||||
if(*attr == '.') attr++; // strip leading '.'
|
if(*attr == '.') attr++; // strip leading '.'
|
||||||
|
|
||||||
uint16_t attr_hash = Parser::get_sdbm(attr);
|
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 */
|
/* 16-bit Hash Lookup Table */
|
||||||
switch(attr_hash) {
|
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
|
break; // attribute_found
|
||||||
|
|
||||||
case ATTR_SWIPE:
|
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);
|
: attr_out_int(obj, attr, obj->user_data.swipeid);
|
||||||
break; // attribute_found
|
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);
|
lv_obj_move_background(obj);
|
||||||
break; // attribute_found
|
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:
|
default:
|
||||||
hasp_local_style_attr(obj, attr, attr_hash, payload, update);
|
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_WIDTH 36017
|
||||||
#define ATTR_SCALE_END_COLOR 44074
|
#define ATTR_SCALE_END_COLOR 44074
|
||||||
|
|
||||||
|
/* Page Attributes */
|
||||||
|
#define ATTR_NEXT 60915
|
||||||
|
#define ATTR_PREV 21587
|
||||||
|
#define ATTR_BACK 57799
|
||||||
|
|
||||||
/* Object Attributes */
|
/* Object Attributes */
|
||||||
#define ATTR_X 120
|
#define ATTR_X 120
|
||||||
#define ATTR_Y 121
|
#define ATTR_Y 121
|
||||||
|
@ -35,6 +35,7 @@ enum lv_hasp_obj_type_t {
|
|||||||
LV_HASP_CALENDER = 54,
|
LV_HASP_CALENDER = 54,
|
||||||
|
|
||||||
/* Containers */
|
/* Containers */
|
||||||
|
LV_HASP_SCREEN = 1,
|
||||||
LV_HASP_CONTAINER = 70,
|
LV_HASP_CONTAINER = 70,
|
||||||
LV_HASP_WINDOW = 71, // placeholder
|
LV_HASP_WINDOW = 71, // placeholder
|
||||||
LV_HASP_MSGBOX = 72, // placeholder
|
LV_HASP_MSGBOX = 72, // placeholder
|
||||||
|
@ -8,6 +8,14 @@
|
|||||||
|
|
||||||
namespace hasp {
|
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()
|
Page::Page()
|
||||||
{
|
{
|
||||||
// LVGL is not yet initialized at construction time
|
// LVGL is not yet initialized at construction time
|
||||||
@ -21,7 +29,8 @@ size_t Page::count()
|
|||||||
void Page::init(uint8_t start_page)
|
void Page::init(uint8_t start_page)
|
||||||
{
|
{
|
||||||
for(int i = 0; i < count(); i++) {
|
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);
|
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.*/
|
/**< 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);
|
lv_obj_t* page = get_obj(pageid);
|
||||||
if(!page || (pageid > HASP_NUM_PAGES)) {
|
if(page == lv_layer_sys() /*|| page == lv_layer_top()*/) {
|
||||||
LOG_WARNING(TAG_HASP, F(D_HASP_INVALID_PAGE), pageid);
|
|
||||||
} else if(page == lv_layer_sys() /*|| page == lv_layer_top()*/) {
|
|
||||||
LOG_WARNING(TAG_HASP, F(D_HASP_INVALID_LAYER));
|
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);
|
LOG_TRACE(TAG_HASP, F(D_HASP_CLEAR_PAGE), pageid);
|
||||||
lv_obj_clean(page);
|
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)
|
void Page::set(uint8_t pageid, lv_scr_load_anim_t animation)
|
||||||
{
|
{
|
||||||
lv_obj_t* page = get_obj(pageid);
|
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);
|
LOG_WARNING(TAG_HASP, F(D_HASP_INVALID_PAGE), pageid);
|
||||||
} else {
|
} else {
|
||||||
LOG_TRACE(TAG_HASP, F(D_HASP_CHANGE_PAGE), pageid);
|
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)
|
void Page::next(lv_scr_load_anim_t animation)
|
||||||
{
|
{
|
||||||
set(_meta_data[_current_page - PAGE_START_INDEX].next, animation);
|
set(_meta_data[_current_page - PAGE_START_INDEX].next, animation);
|
||||||
|
@ -35,16 +35,26 @@ class Page {
|
|||||||
Page();
|
Page();
|
||||||
size_t count();
|
size_t count();
|
||||||
void init(uint8_t start_page);
|
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);
|
||||||
void set(uint8_t pageid, lv_scr_load_anim_t animation);
|
void set(uint8_t pageid, lv_scr_load_anim_t animation);
|
||||||
|
|
||||||
void next(lv_scr_load_anim_t animation);
|
void next(lv_scr_load_anim_t animation);
|
||||||
void prev(lv_scr_load_anim_t animation);
|
void prev(lv_scr_load_anim_t animation);
|
||||||
void back(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();
|
uint8_t get();
|
||||||
void load_jsonl(const char* pagesfile);
|
void load_jsonl(const char* pagesfile);
|
||||||
lv_obj_t* get_obj(uint8_t pageid);
|
lv_obj_t* get_obj(uint8_t pageid);
|
||||||
bool get_id(lv_obj_t* obj, uint8_t* pageid);
|
bool get_id(lv_obj_t* obj, uint8_t* pageid);
|
||||||
|
bool is_valid(uint8_t pageid);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace hasp
|
} // namespace hasp
|
||||||
|
Loading…
x
Reference in New Issue
Block a user