From 219f0c1c85d8f98cdbc92d9f322d88a30868fad0 Mon Sep 17 00:00:00 2001 From: Jan Laupetin Date: Fri, 10 Oct 2025 10:57:07 +0100 Subject: [PATCH] chore: save shared modman info in context --- src/ModMan/Context/ModManContext.cpp | 7 ++++ src/ModMan/Context/ModManContext.h | 14 +++++++ src/ModMan/Web/Binds/Binds.cpp | 11 +++++ src/ModMan/Web/Binds/Binds.h | 8 ++++ src/ModMan/main.cpp | 61 +++++++++++----------------- src/ModManUi/src/App.vue | 25 +----------- src/ModManUi/src/native/index.ts | 6 +-- 7 files changed, 68 insertions(+), 64 deletions(-) create mode 100644 src/ModMan/Context/ModManContext.cpp create mode 100644 src/ModMan/Context/ModManContext.h create mode 100644 src/ModMan/Web/Binds/Binds.cpp create mode 100644 src/ModMan/Web/Binds/Binds.h diff --git a/src/ModMan/Context/ModManContext.cpp b/src/ModMan/Context/ModManContext.cpp new file mode 100644 index 00000000..ff4bbe9e --- /dev/null +++ b/src/ModMan/Context/ModManContext.cpp @@ -0,0 +1,7 @@ +#include "ModManContext.h" + +ModManContext& ModManContext::Get() +{ + static ModManContext context; + return context; +} diff --git a/src/ModMan/Context/ModManContext.h b/src/ModMan/Context/ModManContext.h new file mode 100644 index 00000000..05f72099 --- /dev/null +++ b/src/ModMan/Context/ModManContext.h @@ -0,0 +1,14 @@ +#pragma once + +#include "Web/WebViewLib.h" + +#include + +class ModManContext +{ +public: + static ModManContext& Get(); + + std::unique_ptr m_main_webview; + std::unique_ptr m_dev_tools_webview; +}; diff --git a/src/ModMan/Web/Binds/Binds.cpp b/src/ModMan/Web/Binds/Binds.cpp new file mode 100644 index 00000000..9e41b3a0 --- /dev/null +++ b/src/ModMan/Web/Binds/Binds.cpp @@ -0,0 +1,11 @@ +#include "Binds.h" + +#include "Web/Binds/DialogBinds.h" + +namespace ui +{ + void RegisterAllBinds(webview::webview& wv) + { + RegisterDialogHandlerBinds(wv); + } +} // namespace ui diff --git a/src/ModMan/Web/Binds/Binds.h b/src/ModMan/Web/Binds/Binds.h new file mode 100644 index 00000000..3dd717ba --- /dev/null +++ b/src/ModMan/Web/Binds/Binds.h @@ -0,0 +1,8 @@ +#pragma once + +#include "Web/WebViewLib.h" + +namespace ui +{ + void RegisterAllBinds(webview::webview& wv); +} diff --git a/src/ModMan/main.cpp b/src/ModMan/main.cpp index 66780792..9321760e 100644 --- a/src/ModMan/main.cpp +++ b/src/ModMan/main.cpp @@ -1,5 +1,6 @@ -#include "GitVersion.h" -#include "Web/Binds/DialogBinds.h" +#include "Context/ModManContext.h" +#include "GitVersion.h" +#include "Web/Binds/Binds.h" #include "Web/Platform/AssetHandler.h" #include "Web/UiCommunication.h" #include "Web/ViteAssets.h" @@ -7,7 +8,6 @@ #include #include -#include #include #include @@ -21,15 +21,17 @@ using namespace PLATFORM_NAMESPACE; namespace { #ifdef _DEBUG - std::optional devToolWindow; - - void RunDevToolsWindow() + void SpawnDevToolsWindow() { con::debug("Creating dev tools window"); + auto& context = ModManContext::Get(); + try { - auto& newWindow = devToolWindow.emplace(false, nullptr); + context.m_dev_tools_webview = std::make_unique(false, nullptr); + auto& newWindow = *context.m_dev_tools_webview; + newWindow.set_title("Devtools"); newWindow.set_size(640, 480, WEBVIEW_HINT_NONE); newWindow.set_size(480, 320, WEBVIEW_HINT_MIN); @@ -42,59 +44,44 @@ namespace } #endif - int RunMainWindow() + int SpawnMainWindow() { con::debug("Creating main window"); + auto& context = ModManContext::Get(); try { - webview::webview w( + context.m_main_webview = std::make_unique( #ifdef _DEBUG true, #else false, #endif nullptr); - w.set_title("OpenAssetTools ModMan"); - w.set_size(1280, 640, WEBVIEW_HINT_NONE); - w.set_size(480, 320, WEBVIEW_HINT_MIN); + auto& newWindow = *context.m_main_webview; - ui::RegisterDialogHandlerBinds(w); + newWindow.set_title("OpenAssetTools ModMan"); + newWindow.set_size(1280, 640, WEBVIEW_HINT_NONE); + newWindow.set_size(480, 320, WEBVIEW_HINT_MIN); - // A binding that counts up or down and immediately returns the new value. - ui::Bind(w, - "greet", - [&w](std::string name) -> std::string - { - ui::Notify(w, "greeting", name); - return std::format("Hello from C++ {}!", name); - }); - -#if defined(WEBVIEW_PLATFORM_WINDOWS) && defined(WEBVIEW_EDGE) - InstallAssetHandler(w); - constexpr auto urlPrefix = URL_PREFIX; -#elif defined(WEBVIEW_PLATFORM_LINUX) && defined(WEBVIEW_GTK) - InstallAssetHandler(w); - constexpr auto urlPrefix = URL_PREFIX; -#else -#error Unsupported platform -#endif + InstallAssetHandler(newWindow); + ui::RegisterAllBinds(newWindow); #ifdef _DEBUG - w.navigate(VITE_DEV_SERVER ? std::format("http://localhost:{}", VITE_DEV_SERVER_PORT) : std::format("{}index.html", urlPrefix)); + newWindow.navigate(VITE_DEV_SERVER ? std::format("http://localhost:{}", VITE_DEV_SERVER_PORT) : std::format("{}index.html", URL_PREFIX)); if (VITE_DEV_SERVER) { - w.dispatch( + newWindow.dispatch( [] { - RunDevToolsWindow(); + SpawnDevToolsWindow(); }); } #else - w.navigate(std::format("{}index.html", urlPrefix)); + newWindow.navigate(std::format("{}index.html", URL_PREFIX)); #endif - w.run(); + newWindow.run(); } catch (const webview::exception& e) { @@ -129,7 +116,7 @@ int main() con::info("Starting ModMan " GIT_VERSION); - const auto result = RunMainWindow(); + const auto result = SpawnMainWindow(); return result; } diff --git a/src/ModManUi/src/App.vue b/src/ModManUi/src/App.vue index 1ff66ed6..0db0d725 100644 --- a/src/ModManUi/src/App.vue +++ b/src/ModManUi/src/App.vue @@ -1,28 +1,13 @@