mirror of
https://github.com/HASwitchPlate/openHASP.git
synced 2025-07-24 11:46:34 +00:00
Add local page transitions
This commit is contained in:
parent
cc6ce5c4f8
commit
27e7c95cef
@ -517,10 +517,11 @@ typedef void* lv_font_user_data_t;
|
||||
|
||||
/*Declare the type of the user data of object (can be e.g. `void *`, `int`, `struct`)*/
|
||||
typedef struct {
|
||||
uint8_t objid:8;
|
||||
uint8_t pageaction:8;
|
||||
uint8_t groupid:8;
|
||||
uint8_t id:8;
|
||||
uint8_t objid:8;
|
||||
uint8_t transitionid:4;
|
||||
uint8_t actionid:4;
|
||||
uint8_t groupid:4;
|
||||
} lv_obj_user_data_t;
|
||||
|
||||
/*1: enable `lv_obj_realaign()` based on `lv_obj_align()` parameters*/
|
||||
|
@ -582,9 +582,11 @@ typedef void * lv_font_user_data_t;
|
||||
*==================*/
|
||||
|
||||
typedef struct {
|
||||
uint8_t id:8;
|
||||
uint8_t objid:8;
|
||||
uint8_t groupid:8;
|
||||
uint8_t id;
|
||||
uint8_t transitionid:4;
|
||||
uint8_t actionid:4;
|
||||
uint8_t groupid:4;
|
||||
} lv_obj_user_data_t;
|
||||
|
||||
#if LV_USE_USER_DATA
|
||||
|
@ -425,7 +425,7 @@ void haspSetup(void)
|
||||
|
||||
haspPages.init(haspStartPage);
|
||||
haspPages.load_jsonl(haspPagesPath);
|
||||
haspPages.set(haspStartPage);
|
||||
haspPages.set(haspStartPage, LV_SCR_LOAD_ANIM_NONE);
|
||||
}
|
||||
|
||||
/**********************
|
||||
|
@ -1407,8 +1407,12 @@ void hasp_process_obj_attribute(lv_obj_t* obj, const char* attr_p, const char* p
|
||||
break; // attribute_found
|
||||
|
||||
case ATTR_ACTION:
|
||||
update ? (void)(obj->user_data.pageaction = (uint8_t)val)
|
||||
: hasp_out_int(obj, attr, obj->user_data.pageaction);
|
||||
update ? (void)(obj->user_data.actionid = (uint8_t)val) : hasp_out_int(obj, attr, obj->user_data.actionid);
|
||||
break; // attribute_found
|
||||
|
||||
case ATTR_TRANSITION:
|
||||
update ? (void)(obj->user_data.transitionid = (uint8_t)val)
|
||||
: hasp_out_int(obj, attr, obj->user_data.transitionid);
|
||||
break; // attribute_found
|
||||
|
||||
case ATTR_OBJID:
|
||||
|
@ -313,6 +313,7 @@ _HASP_ATTRIBUTE(SCALE_END_LINE_WIDTH, scale_end_line_width, lv_style_int_t)
|
||||
|
||||
/* hasp user data */
|
||||
#define ATTR_ACTION 42102
|
||||
#define ATTR_TRANSITION 10933
|
||||
#define ATTR_GROUPID 48986
|
||||
#define ATTR_OBJID 41010
|
||||
|
||||
|
@ -819,27 +819,32 @@ void dispatch_output_current_page()
|
||||
}
|
||||
|
||||
// Dispatch Page Get or Set
|
||||
void dispatch_page_next()
|
||||
void dispatch_page_next(lv_scr_load_anim_t animation)
|
||||
{
|
||||
haspPages.next();
|
||||
haspPages.next(animation);
|
||||
dispatch_output_current_page();
|
||||
}
|
||||
|
||||
void dispatch_page_prev()
|
||||
void dispatch_page_prev(lv_scr_load_anim_t animation)
|
||||
{
|
||||
haspPages.prev();
|
||||
haspPages.prev(animation);
|
||||
dispatch_output_current_page();
|
||||
}
|
||||
|
||||
void dispatch_page_back()
|
||||
void dispatch_page_back(lv_scr_load_anim_t animation)
|
||||
{
|
||||
haspPages.back();
|
||||
haspPages.back(animation);
|
||||
dispatch_output_current_page();
|
||||
}
|
||||
|
||||
void dispatch_set_page(uint8_t pageid)
|
||||
{
|
||||
haspPages.set(pageid);
|
||||
dispatch_set_page(pageid, LV_SCR_LOAD_ANIM_NONE);
|
||||
}
|
||||
|
||||
void dispatch_set_page(uint8_t pageid, lv_scr_load_anim_t animation)
|
||||
{
|
||||
haspPages.set(pageid, animation);
|
||||
dispatch_output_current_page();
|
||||
}
|
||||
|
||||
@ -850,15 +855,16 @@ void dispatch_page(const char*, const char* page)
|
||||
return;
|
||||
}
|
||||
|
||||
lv_scr_load_anim_t animation = LV_SCR_LOAD_ANIM_NONE;
|
||||
if(Utilities::is_only_digits(page)) {
|
||||
uint8_t pageid = atoi(page);
|
||||
dispatch_set_page(pageid);
|
||||
dispatch_set_page(pageid, animation);
|
||||
} else if(!strcasecmp_P(page, PSTR("prev"))) {
|
||||
dispatch_page_prev();
|
||||
dispatch_page_prev(animation);
|
||||
} else if(!strcasecmp_P(page, PSTR("next"))) {
|
||||
dispatch_page_next();
|
||||
dispatch_page_next(animation);
|
||||
} else if(!strcasecmp_P(page, PSTR("back"))) {
|
||||
dispatch_page_back();
|
||||
dispatch_page_back(animation);
|
||||
} else {
|
||||
LOG_WARNING(TAG_MSGR, PSTR(D_DISPATCH_INVALID_PAGE), page);
|
||||
}
|
||||
|
@ -47,10 +47,11 @@ void dispatch_parse_jsonl(std::istringstream& stream);
|
||||
void dispatch_clear_page(const char* page);
|
||||
void dispatch_json_error(uint8_t tag, DeserializationError& jsonError);
|
||||
|
||||
void dispatch_set_page(uint8_t pageid);
|
||||
void dispatch_page_next();
|
||||
void dispatch_page_prev();
|
||||
void dispatch_page_back();
|
||||
// void dispatch_set_page(uint8_t pageid);
|
||||
void dispatch_set_page(uint8_t pageid, lv_scr_load_anim_t effectid);
|
||||
void dispatch_page_next(lv_scr_load_anim_t effectid);
|
||||
void dispatch_page_prev(lv_scr_load_anim_t effectid);
|
||||
void dispatch_page_back(lv_scr_load_anim_t effectid);
|
||||
|
||||
void dispatch_dim(const char* level);
|
||||
void dispatch_backlight(const char* payload);
|
||||
|
@ -352,14 +352,12 @@ void generic_event_handler(lv_obj_t* obj, lv_event_t event)
|
||||
|
||||
hasp_update_sleep_state(); // wakeup?
|
||||
|
||||
/* If a pageaction is attached, perform that action on UP event only */
|
||||
if(obj->user_data.pageaction) {
|
||||
if(eventid == HASP_EVENT_UP) {
|
||||
lv_scr_load_anim_t effectid = LV_SCR_LOAD_ANIM_NONE;
|
||||
if(obj->user_data.pageaction >> 4 <= LV_SCR_LOAD_ANIM_FADE_ON)
|
||||
effectid = (lv_scr_load_anim_t)(obj->user_data.pageaction >> 4);
|
||||
uint8_t pageid = obj->user_data.pageaction & 0x0F;
|
||||
haspPages.set(pageid, effectid);
|
||||
/* If an actionid is attached, perform that action on UP event only */
|
||||
if(obj->user_data.actionid) {
|
||||
if(eventid == HASP_EVENT_UP || eventid == HASP_EVENT_SHORT) {
|
||||
lv_scr_load_anim_t transitionid = (lv_scr_load_anim_t)obj->user_data.transitionid;
|
||||
haspPages.set(obj->user_data.actionid, transitionid);
|
||||
dispatch_set_page(obj->user_data.actionid, transitionid);
|
||||
}
|
||||
} else {
|
||||
dispatch_object_generic_event(obj, eventid); // send object event
|
||||
|
@ -43,12 +43,12 @@ void Page::clear(uint16_t pageid)
|
||||
}
|
||||
}
|
||||
|
||||
void Page::set(uint8_t pageid)
|
||||
{
|
||||
set(pageid, LV_SCR_LOAD_ANIM_NONE);
|
||||
}
|
||||
// void Page::set(uint8_t pageid)
|
||||
// {
|
||||
// set(pageid, LV_SCR_LOAD_ANIM_NONE);
|
||||
// }
|
||||
|
||||
void Page::set(uint8_t pageid, lv_scr_load_anim_t effectid)
|
||||
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) {
|
||||
@ -56,24 +56,24 @@ void Page::set(uint8_t pageid, lv_scr_load_anim_t effectid)
|
||||
} else {
|
||||
LOG_TRACE(TAG_HASP, F(D_HASP_CHANGE_PAGE), pageid);
|
||||
_current_page = pageid;
|
||||
lv_scr_load_anim(page, effectid, 1000, 0, false);
|
||||
lv_scr_load_anim(page, animation, 1000, 0, false);
|
||||
hasp_object_tree(page, pageid, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void Page::next()
|
||||
void Page::next(lv_scr_load_anim_t animation)
|
||||
{
|
||||
set(_meta_data[_current_page - PAGE_START_INDEX].next);
|
||||
set(_meta_data[_current_page - PAGE_START_INDEX].next, animation);
|
||||
}
|
||||
|
||||
void Page::prev()
|
||||
void Page::prev(lv_scr_load_anim_t animation)
|
||||
{
|
||||
set(_meta_data[_current_page - PAGE_START_INDEX].prev);
|
||||
set(_meta_data[_current_page - PAGE_START_INDEX].prev, animation);
|
||||
}
|
||||
|
||||
void Page::back()
|
||||
void Page::back(lv_scr_load_anim_t animation)
|
||||
{
|
||||
set(_meta_data[_current_page - PAGE_START_INDEX].back);
|
||||
set(_meta_data[_current_page - PAGE_START_INDEX].back, animation);
|
||||
}
|
||||
|
||||
uint8_t Page::get()
|
||||
|
@ -36,11 +36,11 @@ class Page {
|
||||
size_t count();
|
||||
void init(uint8_t start_page);
|
||||
void clear(uint16_t pageid);
|
||||
void set(uint8_t pageid);
|
||||
void set(uint8_t pageid, lv_scr_load_anim_t effectid);
|
||||
void next();
|
||||
void prev();
|
||||
void back();
|
||||
// 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();
|
||||
void load_jsonl(const char* pagesfile);
|
||||
lv_obj_t* get_obj(uint8_t pageid);
|
||||
|
@ -698,15 +698,15 @@ void debugLoop(void)
|
||||
switch(keypress = debugConsole.readKey()) {
|
||||
|
||||
case ConsoleInput::KEY_PAGE_UP:
|
||||
dispatch_page_next();
|
||||
dispatch_page_next(LV_SCR_LOAD_ANIM_NONE);
|
||||
break;
|
||||
|
||||
case ConsoleInput::KEY_PAGE_DOWN:
|
||||
dispatch_page_prev();
|
||||
dispatch_page_prev(LV_SCR_LOAD_ANIM_NONE);
|
||||
break;
|
||||
|
||||
case(ConsoleInput::KEY_FN)...(ConsoleInput::KEY_FN + 12):
|
||||
dispatch_set_page(keypress - ConsoleInput::KEY_FN);
|
||||
dispatch_set_page(keypress - ConsoleInput::KEY_FN, LV_SCR_LOAD_ANIM_NONE);
|
||||
break;
|
||||
}
|
||||
} while(keypress != 0);
|
||||
|
@ -376,11 +376,11 @@ void webHandleScreenshot()
|
||||
|
||||
if(webServer.hasArg(F("a"))) {
|
||||
if(webServer.arg(F("a")) == F("next")) {
|
||||
dispatch_page_next();
|
||||
dispatch_page_next(LV_SCR_LOAD_ANIM_NONE);
|
||||
} else if(webServer.arg(F("a")) == F("prev")) {
|
||||
dispatch_page_prev();
|
||||
dispatch_page_prev(LV_SCR_LOAD_ANIM_NONE);
|
||||
} else if(webServer.arg(F("a")) == F("back")) {
|
||||
dispatch_page_back();
|
||||
dispatch_page_back(LV_SCR_LOAD_ANIM_NONE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1962,7 +1962,7 @@ void httpSetup()
|
||||
webServer.on(F("/page/"), []() {
|
||||
String pageid = webServer.arg(F("page"));
|
||||
webServer.send(200, PSTR("text/plain"), "Page: '" + pageid + "'");
|
||||
dispatch_set_page(pageid.toInt());
|
||||
dispatch_set_page(pageid.toInt(), LV_SCR_LOAD_ANIM_NONE);
|
||||
});
|
||||
|
||||
#if HASP_USE_SPIFFS > 0 || HASP_USE_LITTLEFS > 0
|
||||
|
Loading…
x
Reference in New Issue
Block a user