From 8e4d0ea66537d8d05fbad5530f901b97164300a2 Mon Sep 17 00:00:00 2001 From: Mads Buvik Sandvei Date: Tue, 18 Feb 2025 19:33:29 +0100 Subject: [PATCH 1/4] 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 df334bbfe8..8d1403aa93 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 e51350d19f..3a120510cf 100644 --- a/apps/openmw/mwgui/windowmanagerimp.cpp +++ b/apps/openmw/mwgui/windowmanagerimp.cpp @@ -2402,6 +2402,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 052a269188..8c186c3e53 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 9652df1238..c0e9172a6e 100644 --- a/apps/openmw/mwlua/uibindings.cpp +++ b/apps/openmw/mwlua/uibindings.cpp @@ -288,6 +288,8 @@ namespace MWLua = [windowManager, luaManager = context.mLuaManager](std::string_view window, bool disabled) { luaManager->addAction([=]() { 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 1e76b8e141..c69b23c49a 100644 --- a/files/data/scripts/omw/ui.lua +++ b/files/data/scripts/omw/ui.lua @@ -239,6 +239,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 9c49843f5ceb012b6c8dcf6025839a7d762af2fe Mon Sep 17 00:00:00 2001 From: Mads Buvik Sandvei Date: Tue, 18 Feb 2025 20:43:03 +0100 Subject: [PATCH 2/4] bump lua revision --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 170a56aade..1805ea6fea 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,7 +82,7 @@ message(STATUS "Configuring OpenMW...") set(OPENMW_VERSION_MAJOR 0) set(OPENMW_VERSION_MINOR 49) set(OPENMW_VERSION_RELEASE 0) -set(OPENMW_LUA_API_REVISION 70) +set(OPENMW_LUA_API_REVISION 71) set(OPENMW_POSTPROCESSING_API_REVISION 2) set(OPENMW_VERSION_COMMITHASH "") From f438d68aadd1ae27c04d97fc681c8905138dde06 Mon Sep 17 00:00:00 2001 From: Mads Buvik Sandvei Date: Tue, 18 Feb 2025 20:59:46 +0100 Subject: [PATCH 3/4] 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 3a120510cf..1341a621b8 100644 --- a/apps/openmw/mwgui/windowmanagerimp.cpp +++ b/apps/openmw/mwgui/windowmanagerimp.cpp @@ -2404,7 +2404,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 10e10ca7e856bd6ac237421399d60683700aef2a Mon Sep 17 00:00:00 2001 From: Mads Buvik Sandvei Date: Wed, 19 Feb 2025 14:59:05 +0100 Subject: [PATCH 4/4] 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 c69b23c49a..5fecbe8dae 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', --- @@ -244,7 +251,7 @@ return { -- @function [parent=#UI] isWindowVisible -- @param #string windowName -- @return #boolean - isWindowVisible = ui._isWindowVisible, + isWindowVisible = isWindowVisible, -- TODO -- registerHudElement = function(name, showFn, hideFn) end,