1
mirror of https://github.com/flipperdevices/flipperzero-firmware.git synced 2025-12-12 20:59:50 +04:00

JS: gui: viewDispatcher.currentView

This commit is contained in:
Willy-JL
2024-10-17 18:03:29 +01:00
parent 78a0544b7a
commit d05c20bd9b
3 changed files with 14 additions and 3 deletions

View File

@@ -105,9 +105,13 @@ eventLoop.subscribe(views.bytekb.input, function (_sub, data, gui, views) {
}, gui, views); }, gui, views);
// go to the demo chooser screen when the back key is pressed // go to the demo chooser screen when the back key is pressed
eventLoop.subscribe(gui.viewDispatcher.navigation, function (_sub, _, gui, views) { eventLoop.subscribe(gui.viewDispatcher.navigation, function (_sub, _, gui, views, eventLoop) {
if (gui.viewDispatcher.currentView === views.demos) {
eventLoop.stop();
return;
}
gui.viewDispatcher.switchTo(views.demos); gui.viewDispatcher.switchTo(views.demos);
}, gui, views); }, gui, views, eventLoop);
// run UI // run UI
gui.viewDispatcher.switchTo(views.demos); gui.viewDispatcher.switchTo(views.demos);

View File

@@ -101,8 +101,10 @@ static void js_gui_vd_switch_to(struct mjs* mjs) {
mjs_val_t view; mjs_val_t view;
JS_FETCH_ARGS_OR_RETURN(mjs, JS_EXACTLY, JS_ARG_OBJ(&view)); JS_FETCH_ARGS_OR_RETURN(mjs, JS_EXACTLY, JS_ARG_OBJ(&view));
JsGuiViewData* view_data = JS_GET_INST(mjs, view); JsGuiViewData* view_data = JS_GET_INST(mjs, view);
JsGui* module = JS_GET_CONTEXT(mjs); mjs_val_t vd_obj = mjs_get_this(mjs);
JsGui* module = JS_GET_INST(mjs, vd_obj);
view_dispatcher_switch_to_view(module->dispatcher, (uint32_t)view_data->id); view_dispatcher_switch_to_view(module->dispatcher, (uint32_t)view_data->id);
mjs_set(mjs, vd_obj, "currentView", ~0, view);
} }
static void* js_gui_create(struct mjs* mjs, mjs_val_t* object, JsModules* modules) { static void* js_gui_create(struct mjs* mjs, mjs_val_t* object, JsModules* modules) {
@@ -154,6 +156,7 @@ static void* js_gui_create(struct mjs* mjs, mjs_val_t* object, JsModules* module
JS_FIELD("switchTo", MJS_MK_FN(js_gui_vd_switch_to)); JS_FIELD("switchTo", MJS_MK_FN(js_gui_vd_switch_to));
JS_FIELD("custom", mjs_mk_foreign(mjs, &module->custom_contract)); JS_FIELD("custom", mjs_mk_foreign(mjs, &module->custom_contract));
JS_FIELD("navigation", mjs_mk_foreign(mjs, &module->navigation_contract)); JS_FIELD("navigation", mjs_mk_foreign(mjs, &module->navigation_contract));
JS_FIELD("currentView", MJS_NULL);
} }
// create API object // create API object

View File

@@ -20,6 +20,10 @@ declare class ViewDispatcher {
* Event source for navigation events (back key presses) * Event source for navigation events (back key presses)
*/ */
navigation: Contract; navigation: Contract;
/**
* View object currently shown
*/
currentView: View<any>;
/** /**
* Sends a number to the custom event handler * Sends a number to the custom event handler
* @param event number to send * @param event number to send