From 49ca1a082d4b6d8e038c03511ec46ef6b4ad45e8 Mon Sep 17 00:00:00 2001 From: izawartka <59137928+izawartka@users.noreply.github.com> Date: Sun, 16 Aug 2026 18:40:28 +0200 Subject: [PATCH] Add an option to hide toasts - Added an option to hide ModMenuModule::ToastManager toasts trough ModMenuModule::SeukomodOptionsMenu --- .../modmenu/menus/seukomod-options-menu.cpp | 17 ++++++++++++++++ .../modmenu/menus/seukomod-options-menu.h | 2 ++ src/modules/modmenu/toast-manager.cpp | 20 +++++++++++++++++++ src/modules/modmenu/toast-manager.h | 5 +++++ 4 files changed, 44 insertions(+) diff --git a/src/modules/modmenu/menus/seukomod-options-menu.cpp b/src/modules/modmenu/menus/seukomod-options-menu.cpp index a38f778..330b395 100644 --- a/src/modules/modmenu/menus/seukomod-options-menu.cpp +++ b/src/modules/modmenu/menus/seukomod-options-menu.cpp @@ -2,6 +2,7 @@ #include "../root.h" #include "menu-controls-menu.h" #include "version-menu.h" +#include "../../../converters/enabled-disabled.h" ModMenuModule::SeukomodOptionsMenu::SeukomodOptionsMenu() { @@ -24,6 +25,22 @@ bool ModMenuModule::SeukomodOptionsMenu::Attach() m_menuController->CreateItem(vertCont, L"Menu controls", options.textSize); m_menuController->CreateItem(vertCont, L"Version details", options.textSize); + // toasts + ToastManager* toastManager = ToastManager::GetInstance(); + UiModule::Text* toastsVisibleText = m_menuController->CreateItem(vertCont, L"", options.textSize); + m_toastsVisibleController = m_menuController->CreateLatestItemController>( + toastsVisibleText, + [toastManager]() -> bool { + return toastManager->GetToastsVisible(); + }, + UiModule::VarTextSelectOptionList{ false, true }, + UiModule::VarTextSelectControllerOptions{ L"Toasts: #", L"#" } + ); + m_toastsVisibleController->SetConverter(); + m_toastsVisibleController->SetCustomSaveCallback([toastManager](bool newValue) { + toastManager->SetToastsVisible(newValue); + }); + SetPreviousSelectedIndex(); return true; diff --git a/src/modules/modmenu/menus/seukomod-options-menu.h b/src/modules/modmenu/menus/seukomod-options-menu.h index 138b729..4c5226b 100644 --- a/src/modules/modmenu/menus/seukomod-options-menu.h +++ b/src/modules/modmenu/menus/seukomod-options-menu.h @@ -12,5 +12,7 @@ namespace ModMenuModule { virtual bool Attach() override; void OnMenuAction(UiModule::Selectable* item, UiModule::MenuItemId id) override; + + UiModule::VarTextSelectController* m_toastsVisibleController = nullptr; }; } diff --git a/src/modules/modmenu/toast-manager.cpp b/src/modules/modmenu/toast-manager.cpp index 61518e0..d9cde95 100644 --- a/src/modules/modmenu/toast-manager.cpp +++ b/src/modules/modmenu/toast-manager.cpp @@ -1,6 +1,8 @@ #include "toast-manager.h" #include "root.h" +static const char TOASTS_VISIBLE_PERSISTENCE_KEY[] = "ModMenu_ToastManager_ToastsVisible"; + ModMenuModule::ToastManager* ModMenuModule::ToastManager::m_instance = nullptr; ModMenuModule::ToastManager* ModMenuModule::ToastManager::GetInstance() { @@ -26,12 +28,21 @@ void ModMenuModule::ToastManager::Show(const Toast& toast) { m_toasts.emplace_back(toast); } +void ModMenuModule::ToastManager::SetToastsVisible(bool isHidden) +{ + m_toastsVisible = isHidden; + UpdateToastsVisible(); +} + void ModMenuModule::ToastManager::Attach() { const auto& options = ModMenuModule::RootModule::GetInstance()->GetOptions(); UiModule::RootModule* uiRoot = UiModule::RootModule::GetInstance(); m_mainContainer = uiRoot->AddComponent(nullptr, std::nullopt, options.toastPadding); m_toastListContainer = uiRoot->AddComponent(m_mainContainer); + PersistenceModule::PersistenceManager* persistence = PersistenceModule::PersistenceManager::GetInstance(); + m_toastsVisible = persistence->Load(TOASTS_VISIBLE_PERSISTENCE_KEY, true); + AddEventListener(&ToastManager::OnPreUpdateUI); AddEventListener(&ToastManager::OnGameEnd); } @@ -45,6 +56,9 @@ void ModMenuModule::ToastManager::Detach() { uiRoot->RemoveComponent(m_mainContainer, true); m_mainContainer = nullptr; m_toastListContainer = nullptr; + + PersistenceModule::PersistenceManager* persistence = PersistenceModule::PersistenceManager::GetInstance(); + persistence->Save(TOASTS_VISIBLE_PERSISTENCE_KEY, m_toastsVisible); } void ModMenuModule::ToastManager::OnPreUpdateUI(UiModule::PreUpdateUIEvent& event) { @@ -115,3 +129,9 @@ void ModMenuModule::ToastManager::Update() { ); } } + +void ModMenuModule::ToastManager::UpdateToastsVisible() +{ + if (!m_toastListContainer) return; + m_toastListContainer->SetVisible(m_toastsVisible); +} diff --git a/src/modules/modmenu/toast-manager.h b/src/modules/modmenu/toast-manager.h index 6d2d305..66abdca 100644 --- a/src/modules/modmenu/toast-manager.h +++ b/src/modules/modmenu/toast-manager.h @@ -22,6 +22,9 @@ namespace ModMenuModule { void Show(const Toast& toast); + void SetToastsVisible(bool isHidden); + bool GetToastsVisible() const { return m_toastsVisible; } + private: friend class RootModule; ToastManager(); @@ -38,6 +41,7 @@ namespace ModMenuModule { void OnGameEnd(GameEndEvent& event); static short GetToastTypeRemap(ToastType type); void Update(); + void UpdateToastsVisible(); struct ToastItem : public Toast { UiModule::HorCentered* container = nullptr; @@ -51,5 +55,6 @@ namespace ModMenuModule { std::vector m_toasts = {}; UiModule::OverridePos* m_mainContainer = nullptr; UiModule::VertCont* m_toastListContainer = nullptr; + bool m_toastsVisible = false; }; } \ No newline at end of file