From ad481fd0f74bfe7e299180b51c68f8ffe6f5be9b Mon Sep 17 00:00:00 2001 From: bookmist Date: Sat, 21 Feb 2026 18:12:08 +0300 Subject: [PATCH] gui: settings_dialog/debug: Add "Select all" toggle for Tracy modules list --- vita3k/gui/src/settings_dialog.cpp | 36 +++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/vita3k/gui/src/settings_dialog.cpp b/vita3k/gui/src/settings_dialog.cpp index 0b39cfa57..33cc62aaf 100644 --- a/vita3k/gui/src/settings_dialog.cpp +++ b/vita3k/gui/src/settings_dialog.cpp @@ -46,6 +46,7 @@ #include #include #include +#include #include #include @@ -1499,9 +1500,9 @@ void draw_settings_dialog(GuiState &gui, EmuEnvState &emuenv) { "be manually instrumented in source code."; // Tracy modules list + static std::vector tracy_modules = tracy_module_utils::get_available_module_names(); if (ImGui::BeginListBox(tracy_modules_list_label, { 0.0f, ImGui::GetTextLineHeightWithSpacing() * 8.25f + ImGui::GetStyle().FramePadding.y * 2.0f })) { // Get all HLE modules available for advanced profiling using Tracy. Do it only once. - static std::vector tracy_modules = tracy_module_utils::get_available_module_names(); // For every HLE module available for advanced profiling using Tracy for (auto &module : tracy_modules) { bool activation_state = tracy_module_utils::is_tracy_active(module); @@ -1523,6 +1524,39 @@ void draw_settings_dialog(GuiState &gui, EmuEnvState &emuenv) { } ImGui::EndListBox(); } + // Calculate checkbox state based on Tracy modules selection + int selected_count = 0; + int visible_count = static_cast(tracy_modules.size()); + for (const auto &module : tracy_modules) { + if (tracy_module_utils::is_tracy_active(module)) + selected_count++; + } + + bool all_selected = selected_count == visible_count; + bool partial_selected = (selected_count > 0) && (selected_count < visible_count); + + // Set checkbox appearance based on state (indeterminate when partially selected) + if (partial_selected) { + ImGui::PushItemFlag(ImGuiItemFlags_MixedValue, true); + } + + static bool selection_state = all_selected || partial_selected; + if (ImGui::Checkbox("Select all##tracy", &selection_state)) { + // Toggle all tracy modules + for (const auto &module : tracy_modules) { + tracy_module_utils::set_tracy_active(module, selection_state); + const bool module_existed = vector_utils::contains(emuenv.cfg.tracy_advanced_profiling_modules, module); + if (selection_state && !module_existed) { + emuenv.cfg.tracy_advanced_profiling_modules.push_back(module); + } else if (!selection_state && module_existed) { + std::erase(emuenv.cfg.tracy_advanced_profiling_modules, module); + } + } + } + + if (partial_selected) { + ImGui::PopItemFlag(); + } #endif // TRACY_ENABLE ImGui::EndTabItem();