From 7f34e52a11b5da4942e0b30a5b4b90552e24d9be Mon Sep 17 00:00:00 2001 From: Mads Buvik Sandvei Date: Tue, 18 Feb 2025 19:33:29 +0100 Subject: [PATCH 1/5] lua interface for window visibility --- apps/openmw/mwbase/windowmanager.hpp | 1 + apps/openmw/mwgui/windowmanagerimp.cpp | 5 +++++ apps/openmw/mwgui/windowmanagerimp.hpp | 1 + apps/openmw/mwlua/uibindings.cpp | 2 ++ files/data/scripts/omw/ui.lua | 7 +++++++ 5 files changed, 16 insertions(+) diff --git a/apps/openmw/mwbase/windowmanager.hpp b/apps/openmw/mwbase/windowmanager.hpp index 8164501b4b..037f719e6d 100644 --- a/apps/openmw/mwbase/windowmanager.hpp +++ b/apps/openmw/mwbase/windowmanager.hpp @@ -384,6 +384,7 @@ namespace MWBase // Used in Lua bindings virtual const std::vector& getGuiModeStack() const = 0; virtual void setDisabledByLua(std::string_view windowId, bool disabled) = 0; + virtual bool isWindowVisible(std::string_view windowId) const = 0; virtual std::vector getAllWindowIds() const = 0; virtual std::vector getAllowedWindowIds(MWGui::GuiMode mode) const = 0; }; diff --git a/apps/openmw/mwgui/windowmanagerimp.cpp b/apps/openmw/mwgui/windowmanagerimp.cpp index 565fb43127..2c1741977c 100644 --- a/apps/openmw/mwgui/windowmanagerimp.cpp +++ b/apps/openmw/mwgui/windowmanagerimp.cpp @@ -2406,6 +2406,11 @@ namespace MWGui updateVisible(); } + bool WindowManager::isWindowVisible(std::string_view windowId) const + { + return mLuaIdToWindow.at(windowId)->isVisible(); + } + std::vector WindowManager::getAllWindowIds() const { std::vector res; diff --git a/apps/openmw/mwgui/windowmanagerimp.hpp b/apps/openmw/mwgui/windowmanagerimp.hpp index 650e2bab78..1a96092b60 100644 --- a/apps/openmw/mwgui/windowmanagerimp.hpp +++ b/apps/openmw/mwgui/windowmanagerimp.hpp @@ -390,6 +390,7 @@ namespace MWGui // Used in Lua bindings const std::vector& getGuiModeStack() const override { return mGuiModes; } void setDisabledByLua(std::string_view windowId, bool disabled) override; + bool isWindowVisible(std::string_view windowId) const override; std::vector getAllWindowIds() const override; std::vector getAllowedWindowIds(GuiMode mode) const override; diff --git a/apps/openmw/mwlua/uibindings.cpp b/apps/openmw/mwlua/uibindings.cpp index bc5581eb74..826338ca7d 100644 --- a/apps/openmw/mwlua/uibindings.cpp +++ b/apps/openmw/mwlua/uibindings.cpp @@ -296,6 +296,8 @@ namespace MWLua luaManager->addAction( [=, window = std::move(window)]() { windowManager->setDisabledByLua(window, disabled); }); }; + api["_isWindowVisible"] + = [windowManager](std::string_view window) { return windowManager->isWindowVisible(window); }; // TODO // api["_showMouseCursor"] = [](bool) {}; diff --git a/files/data/scripts/omw/ui.lua b/files/data/scripts/omw/ui.lua index e29bbe254e..379396bd35 100644 --- a/files/data/scripts/omw/ui.lua +++ b/files/data/scripts/omw/ui.lua @@ -240,6 +240,13 @@ return { -- @return #boolean isHudVisible = function() return ui._isHudVisible() end, + --- + -- Returns if the given window is visible or not + -- @function [parent=#UI] isWindowVisible + -- @param #string windowName + -- @return #boolean + isWindowVisible = ui._isWindowVisible, + -- TODO -- registerHudElement = function(name, showFn, hideFn) end, -- showHudElement = function(name, bool) end, From 593988e82b8b30be57b209f2ca597f8a3cc7f7c4 Mon Sep 17 00:00:00 2001 From: Mads Buvik Sandvei Date: Tue, 18 Feb 2025 20:43:03 +0100 Subject: [PATCH 2/5] bump lua revision --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7301496172..123462b8fd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,7 +82,7 @@ message(STATUS "Configuring OpenMW...") set(OPENMW_VERSION_MAJOR 0) set(OPENMW_VERSION_MINOR 50) set(OPENMW_VERSION_RELEASE 0) -set(OPENMW_LUA_API_REVISION 78) +set(OPENMW_LUA_API_REVISION 79) set(OPENMW_POSTPROCESSING_API_REVISION 2) set(OPENMW_VERSION_COMMITHASH "") From 9fe420e562d3b5ee02bfa8aedd33ca34c0db88e0 Mon Sep 17 00:00:00 2001 From: Mads Buvik Sandvei Date: Tue, 18 Feb 2025 20:59:46 +0100 Subject: [PATCH 3/5] improve error report when windowId is invalid. --- apps/openmw/mwgui/windowmanagerimp.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwgui/windowmanagerimp.cpp b/apps/openmw/mwgui/windowmanagerimp.cpp index 2c1741977c..4ff297dd94 100644 --- a/apps/openmw/mwgui/windowmanagerimp.cpp +++ b/apps/openmw/mwgui/windowmanagerimp.cpp @@ -2408,7 +2408,10 @@ namespace MWGui bool WindowManager::isWindowVisible(std::string_view windowId) const { - return mLuaIdToWindow.at(windowId)->isVisible(); + auto it = mLuaIdToWindow.find(windowId); + if (it == mLuaIdToWindow.end()) + throw std::logic_error("Invalid window name: " + std::string(windowId)); + return it->second->isVisible(); } std::vector WindowManager::getAllWindowIds() const From b1f32c8cee871cee60339a20b5c1cc683bd8a858 Mon Sep 17 00:00:00 2001 From: Mads Buvik Sandvei Date: Wed, 19 Feb 2025 14:59:05 +0100 Subject: [PATCH 4/5] isWindowVisible must handle replaced windows' visibility --- files/data/scripts/omw/ui.lua | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/files/data/scripts/omw/ui.lua b/files/data/scripts/omw/ui.lua index 379396bd35..9d5133b3d0 100644 --- a/files/data/scripts/omw/ui.lua +++ b/files/data/scripts/omw/ui.lua @@ -155,6 +155,13 @@ local function onUiModeChangedEvent(data) end end +local function isWindowVisible(windowName) + if replacedWindows[windowName] then + return replacedWindows[windowName].visible + end + return ui._isWindowVisible(windowName) +end + return { interfaceName = 'UI', --- @@ -245,7 +252,7 @@ return { -- @function [parent=#UI] isWindowVisible -- @param #string windowName -- @return #boolean - isWindowVisible = ui._isWindowVisible, + isWindowVisible = isWindowVisible, -- TODO -- registerHudElement = function(name, showFn, hideFn) end, From ec3357ff3f9f233ceff676a9916fd224ca50f373 Mon Sep 17 00:00:00 2001 From: Mads Buvik Sandvei Date: Fri, 4 Jul 2025 20:30:31 +0200 Subject: [PATCH 5/5] Bump UI interface version number --- files/data/scripts/omw/ui.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/data/scripts/omw/ui.lua b/files/data/scripts/omw/ui.lua index 9d5133b3d0..31502fd6ee 100644 --- a/files/data/scripts/omw/ui.lua +++ b/files/data/scripts/omw/ui.lua @@ -171,7 +171,7 @@ return { interface = { --- Interface version -- @field [parent=#UI] #number version - version = 1, + version = 2, --- All available UI modes. -- Use `view(I.UI.MODE)` in `luap` console mode to see the list.