From dc490ccaf0f4174cfe6cb25030cdeaf66e0f32e9 Mon Sep 17 00:00:00 2001 From: Mr-Wiseguy Date: Mon, 20 Jan 2025 12:38:33 -0500 Subject: [PATCH] Reimplement mechanism to open the config menu to a specific tab --- include/recomp_ui.h | 11 +++++++++++ src/ui/ui_config.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ src/ui/ui_launcher.cpp | 9 ++++++--- 3 files changed, 58 insertions(+), 3 deletions(-) diff --git a/include/recomp_ui.h b/include/recomp_ui.h index 5cc74be..ffa9381 100644 --- a/include/recomp_ui.h +++ b/include/recomp_ui.h @@ -57,6 +57,17 @@ namespace recompui { ContextId get_config_sub_menu_context_id(); ContextId get_close_prompt_context_id(); + enum class ConfigTab { + General, + Controls, + Graphics, + Sound, + Mods, + Debug, + }; + + void set_config_tab(ConfigTab tab); + enum class ButtonVariant { Primary, Secondary, diff --git a/src/ui/ui_config.cpp b/src/ui/ui_config.cpp index 4b2fcb5..f88cf54 100644 --- a/src/ui/ui_config.cpp +++ b/src/ui/ui_config.cpp @@ -978,3 +978,44 @@ void recompui::open_prompt( bool recompui::is_prompt_open() { return false; } + +void recompui::set_config_tab(ConfigTab tab) { + ContextId config_context = recompui::get_config_context_id(); + + Rml::ElementDocument* doc = config_context.get_document(); + assert(doc != nullptr); + + Rml::Element* tabset_el = doc->GetElementById("config_tabset"); + assert(tabset_el != nullptr); + + Rml::ElementTabSet* tabset = rmlui_dynamic_cast(tabset_el); + assert(tabset != nullptr); + + int tab_index = 0; + + switch (tab) { + case ConfigTab::General: + tab_index = 0; + break; + case ConfigTab::Controls: + tab_index = 1; + break; + case ConfigTab::Graphics: + tab_index = 2; + break; + case ConfigTab::Sound: + tab_index = 3; + break; + case ConfigTab::Mods: + tab_index = 4; + break; + case ConfigTab::Debug: + tab_index = 5; + break; + default: + assert(false); + return; + } + + tabset->SetActiveTab(tab_index); +} diff --git a/src/ui/ui_launcher.cpp b/src/ui/ui_launcher.cpp index 3d550e0..1366267 100644 --- a/src/ui/ui_launcher.cpp +++ b/src/ui/ui_launcher.cpp @@ -92,20 +92,23 @@ public: ); recompui::register_event(listener, "open_controls", [](const std::string& param, Rml::Event& event) { + recompui::set_config_tab(recompui::ConfigTab::Controls); recompui::hide_all_contexts(); - recompui::show_context(recompui::get_config_context_id(), "controls"); + recompui::show_context(recompui::get_config_context_id(), ""); } ); recompui::register_event(listener, "open_settings", [](const std::string& param, Rml::Event& event) { + recompui::set_config_tab(recompui::ConfigTab::General); recompui::hide_all_contexts(); - recompui::show_context(recompui::get_config_context_id(), "general"); + recompui::show_context(recompui::get_config_context_id(), ""); } ); recompui::register_event(listener, "open_mods", [](const std::string ¶m, Rml::Event &event) { + recompui::set_config_tab(recompui::ConfigTab::Mods); recompui::hide_all_contexts(); - recompui::show_context(recompui::get_config_context_id(), "mods"); + recompui::show_context(recompui::get_config_context_id(), ""); } ); recompui::register_event(listener, "exit_game",