diff --git a/src/hasp/hasp_dispatch.h b/src/hasp/hasp_dispatch.h index 4409dd95..1cae7f74 100644 --- a/src/hasp/hasp_dispatch.h +++ b/src/hasp/hasp_dispatch.h @@ -62,6 +62,7 @@ void dispatch_reboot(bool saveConfig); void dispatch_output_idle_state(uint8_t state); void dispatch_output_statusupdate(const char*, const char*); void dispatch_current_state(); +void dispatch_output_current_page(); void dispatch_gpio_input_event(uint8_t pin, uint8_t group, uint8_t eventid); bool dispatch_get_event_state(uint8_t eventid); diff --git a/src/hasp/hasp_object.cpp b/src/hasp/hasp_object.cpp index 743468fc..75d628fa 100644 --- a/src/hasp/hasp_object.cpp +++ b/src/hasp/hasp_object.cpp @@ -370,11 +370,19 @@ void generic_event_handler(lv_obj_t* obj, lv_event_t event) 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); + if(obj->user_data.actionid == HASP_NUM_PAGES + 1) { + haspPages.prev(transitionid); + } else if(obj->user_data.actionid == HASP_NUM_PAGES + 2) { + haspPages.back(transitionid); + } else if(obj->user_data.actionid == HASP_NUM_PAGES + 3) { + haspPages.next(transitionid); + } else { + haspPages.set(obj->user_data.actionid, transitionid); + } + dispatch_output_current_page(); } } else { - dispatch_object_generic_event(obj, eventid); // send object event + dispatch_object_generic_event(obj, eventid); // send normal object event } dispatch_normalized_group_value(obj->user_data.groupid, obj, dispatch_get_event_state(eventid), HASP_EVENT_OFF, HASP_EVENT_ON); @@ -670,7 +678,7 @@ void hasp_new_object(const JsonObject& config, uint8_t& saved_page_id) /* Page selection */ uint8_t pageid = saved_page_id; if(!config[FPSTR(FP_PAGE)].isNull()) { - config[FPSTR(FP_PAGE)].as(); + pageid = config[FPSTR(FP_PAGE)].as(); config.remove(FPSTR(FP_PAGE)); }