From 1a246e2ae01bb6179d0a719da2b81b8370b5dc79 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Thu, 16 Jan 2025 07:40:34 +0300 Subject: [PATCH] feat: menu pages dispatching --- res/layouts/pages/scripts.xml.lua | 2 ++ res/modules/gui_util.lua | 20 +++++++++++++++++++- res/scripts/stdlib.lua | 3 ++- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/res/layouts/pages/scripts.xml.lua b/res/layouts/pages/scripts.xml.lua index 259792b8..3529b3d2 100644 --- a/res/layouts/pages/scripts.xml.lua +++ b/res/layouts/pages/scripts.xml.lua @@ -37,4 +37,6 @@ end function on_open() refresh() + + input.add_callback("key:f5", refresh, document.root) end diff --git a/res/modules/gui_util.lua b/res/modules/gui_util.lua index d2983765..877d4b01 100644 --- a/res/modules/gui_util.lua +++ b/res/modules/gui_util.lua @@ -1,4 +1,6 @@ -local gui_util = {} +local gui_util = { + local_dispatchers = {} +} --- Parse `pagename?arg1=value1&arg2=value2` queries --- @param query page query string @@ -25,6 +27,11 @@ end --- @return document_id function gui_util.load_page(query) local name, args = gui_util.parse_query(query) + for i = #gui_util.local_dispatchers, 1, -1 do + local newname, newargs = gui_util.local_dispatchers[i](name, args) + name = newname or name + args = newargs or args + end local filename = file.find(string.format("layouts/pages/%s.xml", name)) if filename then name = file.prefix(filename)..":pages/"..name @@ -33,4 +40,15 @@ function gui_util.load_page(query) end end +function gui_util.add_page_dispatcher(dispatcher) + if type(dispatcher) ~= "function" then + error("function expected") + end + table.insert(gui_util.local_dispatchers, dispatcher) +end + +function gui_util.reset_local() + gui_util.local_dispatchers = {} +end + return gui_util diff --git a/res/scripts/stdlib.lua b/res/scripts/stdlib.lua index 71ba2f4f..81dd115d 100644 --- a/res/scripts/stdlib.lua +++ b/res/scripts/stdlib.lua @@ -201,7 +201,7 @@ _GUI_ROOT = Document.new("core:root") _MENU = _GUI_ROOT.menu menu = _MENU -local gui_util = require "core:gui_util" +gui_util = require "core:gui_util" __vc_page_loader = gui_util.load_page --- Console library extension --- @@ -408,6 +408,7 @@ end function __vc_on_world_quit() _rules.clear() + gui_util:reset_local() end local __vc_coroutines = {}