mirror of
https://github.com/HASwitchPlate/openHASP.git
synced 2025-07-25 20:26:41 +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`)*/
|
/*Declare the type of the user data of object (can be e.g. `void *`, `int`, `struct`)*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t objid:8;
|
|
||||||
uint8_t pageaction:8;
|
|
||||||
uint8_t groupid:8;
|
|
||||||
uint8_t id: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;
|
} lv_obj_user_data_t;
|
||||||
|
|
||||||
/*1: enable `lv_obj_realaign()` based on `lv_obj_align()` parameters*/
|
/*1: enable `lv_obj_realaign()` based on `lv_obj_align()` parameters*/
|
||||||
|
@ -582,9 +582,11 @@ typedef void * lv_font_user_data_t;
|
|||||||
*==================*/
|
*==================*/
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
uint8_t id:8;
|
||||||
uint8_t objid:8;
|
uint8_t objid:8;
|
||||||
uint8_t groupid:8;
|
uint8_t transitionid:4;
|
||||||
uint8_t id;
|
uint8_t actionid:4;
|
||||||
|
uint8_t groupid:4;
|
||||||
} lv_obj_user_data_t;
|
} lv_obj_user_data_t;
|
||||||
|
|
||||||
#if LV_USE_USER_DATA
|
#if LV_USE_USER_DATA
|
||||||
|
@ -425,7 +425,7 @@ void haspSetup(void)
|
|||||||
|
|
||||||
haspPages.init(haspStartPage);
|
haspPages.init(haspStartPage);
|
||||||
haspPages.load_jsonl(haspPagesPath);
|
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
|
break; // attribute_found
|
||||||
|
|
||||||
case ATTR_ACTION:
|
case ATTR_ACTION:
|
||||||
update ? (void)(obj->user_data.pageaction = (uint8_t)val)
|
update ? (void)(obj->user_data.actionid = (uint8_t)val) : hasp_out_int(obj, attr, obj->user_data.actionid);
|
||||||
: hasp_out_int(obj, attr, obj->user_data.pageaction);
|
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
|
break; // attribute_found
|
||||||
|
|
||||||
case ATTR_OBJID:
|
case ATTR_OBJID:
|
||||||
|
@ -313,6 +313,7 @@ _HASP_ATTRIBUTE(SCALE_END_LINE_WIDTH, scale_end_line_width, lv_style_int_t)
|
|||||||
|
|
||||||
/* hasp user data */
|
/* hasp user data */
|
||||||
#define ATTR_ACTION 42102
|
#define ATTR_ACTION 42102
|
||||||
|
#define ATTR_TRANSITION 10933
|
||||||
#define ATTR_GROUPID 48986
|
#define ATTR_GROUPID 48986
|
||||||
#define ATTR_OBJID 41010
|
#define ATTR_OBJID 41010
|
||||||
|
|
||||||
|
@ -819,27 +819,32 @@ void dispatch_output_current_page()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Dispatch Page Get or Set
|
// 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();
|
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();
|
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();
|
dispatch_output_current_page();
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispatch_set_page(uint8_t pageid)
|
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();
|
dispatch_output_current_page();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -850,15 +855,16 @@ void dispatch_page(const char*, const char* page)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lv_scr_load_anim_t animation = LV_SCR_LOAD_ANIM_NONE;
|
||||||
if(Utilities::is_only_digits(page)) {
|
if(Utilities::is_only_digits(page)) {
|
||||||
uint8_t pageid = atoi(page);
|
uint8_t pageid = atoi(page);
|
||||||
dispatch_set_page(pageid);
|
dispatch_set_page(pageid, animation);
|
||||||
} else if(!strcasecmp_P(page, PSTR("prev"))) {
|
} else if(!strcasecmp_P(page, PSTR("prev"))) {
|
||||||
dispatch_page_prev();
|
dispatch_page_prev(animation);
|
||||||
} else if(!strcasecmp_P(page, PSTR("next"))) {
|
} else if(!strcasecmp_P(page, PSTR("next"))) {
|
||||||
dispatch_page_next();
|
dispatch_page_next(animation);
|
||||||
} else if(!strcasecmp_P(page, PSTR("back"))) {
|
} else if(!strcasecmp_P(page, PSTR("back"))) {
|
||||||
dispatch_page_back();
|
dispatch_page_back(animation);
|
||||||
} else {
|
} else {
|
||||||
LOG_WARNING(TAG_MSGR, PSTR(D_DISPATCH_INVALID_PAGE), page);
|
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_clear_page(const char* page);
|
||||||
void dispatch_json_error(uint8_t tag, DeserializationError& jsonError);
|
void dispatch_json_error(uint8_t tag, DeserializationError& jsonError);
|
||||||
|
|
||||||
void dispatch_set_page(uint8_t pageid);
|
// void dispatch_set_page(uint8_t pageid);
|
||||||
void dispatch_page_next();
|
void dispatch_set_page(uint8_t pageid, lv_scr_load_anim_t effectid);
|
||||||
void dispatch_page_prev();
|
void dispatch_page_next(lv_scr_load_anim_t effectid);
|
||||||
void dispatch_page_back();
|
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_dim(const char* level);
|
||||||
void dispatch_backlight(const char* payload);
|
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?
|
hasp_update_sleep_state(); // wakeup?
|
||||||
|
|
||||||
/* If a pageaction is attached, perform that action on UP event only */
|
/* If an actionid is attached, perform that action on UP event only */
|
||||||
if(obj->user_data.pageaction) {
|
if(obj->user_data.actionid) {
|
||||||
if(eventid == HASP_EVENT_UP) {
|
if(eventid == HASP_EVENT_UP || eventid == HASP_EVENT_SHORT) {
|
||||||
lv_scr_load_anim_t effectid = LV_SCR_LOAD_ANIM_NONE;
|
lv_scr_load_anim_t transitionid = (lv_scr_load_anim_t)obj->user_data.transitionid;
|
||||||
if(obj->user_data.pageaction >> 4 <= LV_SCR_LOAD_ANIM_FADE_ON)
|
haspPages.set(obj->user_data.actionid, transitionid);
|
||||||
effectid = (lv_scr_load_anim_t)(obj->user_data.pageaction >> 4);
|
dispatch_set_page(obj->user_data.actionid, transitionid);
|
||||||
uint8_t pageid = obj->user_data.pageaction & 0x0F;
|
|
||||||
haspPages.set(pageid, effectid);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
dispatch_object_generic_event(obj, eventid); // send object event
|
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)
|
// void Page::set(uint8_t pageid)
|
||||||
{
|
// {
|
||||||
set(pageid, LV_SCR_LOAD_ANIM_NONE);
|
// 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);
|
lv_obj_t* page = get_obj(pageid);
|
||||||
if(!page || pageid == 0 || pageid > HASP_NUM_PAGES) {
|
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 {
|
} else {
|
||||||
LOG_TRACE(TAG_HASP, F(D_HASP_CHANGE_PAGE), pageid);
|
LOG_TRACE(TAG_HASP, F(D_HASP_CHANGE_PAGE), pageid);
|
||||||
_current_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);
|
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()
|
uint8_t Page::get()
|
||||||
|
@ -36,11 +36,11 @@ class 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(uint16_t pageid);
|
||||||
void set(uint8_t pageid);
|
// void set(uint8_t pageid);
|
||||||
void set(uint8_t pageid, lv_scr_load_anim_t effectid);
|
void set(uint8_t pageid, lv_scr_load_anim_t animation);
|
||||||
void next();
|
void next(lv_scr_load_anim_t animation);
|
||||||
void prev();
|
void prev(lv_scr_load_anim_t animation);
|
||||||
void back();
|
void back(lv_scr_load_anim_t animation);
|
||||||
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);
|
||||||
|
@ -698,15 +698,15 @@ void debugLoop(void)
|
|||||||
switch(keypress = debugConsole.readKey()) {
|
switch(keypress = debugConsole.readKey()) {
|
||||||
|
|
||||||
case ConsoleInput::KEY_PAGE_UP:
|
case ConsoleInput::KEY_PAGE_UP:
|
||||||
dispatch_page_next();
|
dispatch_page_next(LV_SCR_LOAD_ANIM_NONE);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ConsoleInput::KEY_PAGE_DOWN:
|
case ConsoleInput::KEY_PAGE_DOWN:
|
||||||
dispatch_page_prev();
|
dispatch_page_prev(LV_SCR_LOAD_ANIM_NONE);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case(ConsoleInput::KEY_FN)...(ConsoleInput::KEY_FN + 12):
|
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;
|
break;
|
||||||
}
|
}
|
||||||
} while(keypress != 0);
|
} while(keypress != 0);
|
||||||
|
@ -376,11 +376,11 @@ void webHandleScreenshot()
|
|||||||
|
|
||||||
if(webServer.hasArg(F("a"))) {
|
if(webServer.hasArg(F("a"))) {
|
||||||
if(webServer.arg(F("a")) == F("next")) {
|
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")) {
|
} 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")) {
|
} 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/"), []() {
|
webServer.on(F("/page/"), []() {
|
||||||
String pageid = webServer.arg(F("page"));
|
String pageid = webServer.arg(F("page"));
|
||||||
webServer.send(200, PSTR("text/plain"), "Page: '" + pageid + "'");
|
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
|
#if HASP_USE_SPIFFS > 0 || HASP_USE_LITTLEFS > 0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user