From 21c34356ed8d5dc92dafd32749ba0d1be32c71ee Mon Sep 17 00:00:00 2001 From: WarmUpTill <19472752+WarmUpTill@users.noreply.github.com> Date: Tue, 9 Dec 2025 18:54:14 +0100 Subject: [PATCH] Add macro group helper functions --- lib/macro/macro-helpers.cpp | 28 ++++++++++++++++++++++++++++ lib/macro/macro-helpers.hpp | 3 +++ lib/macro/macro-search.cpp | 19 +++---------------- lib/macro/macro-tab.cpp | 15 +-------------- 4 files changed, 35 insertions(+), 30 deletions(-) diff --git a/lib/macro/macro-helpers.cpp b/lib/macro/macro-helpers.cpp index ce6a0b20..3687a8c8 100644 --- a/lib/macro/macro-helpers.cpp +++ b/lib/macro/macro-helpers.cpp @@ -117,6 +117,34 @@ GetMacroConditions(Macro *macro) return macro->Conditions(); } +bool IsGroupMacro(Macro *macro) +{ + return macro && macro->IsGroup(); +} + +std::vector> GetGroupMacroEntries(Macro *macro) +{ + if (!macro || !macro->IsGroup()) { + return {}; + } + + std::vector> entries; + entries.reserve(macro->GroupSize()); + + const auto ¯os = GetTopLevelMacros(); + for (auto it = macros.begin(); it < macros.end(); it++) { + if ((*it)->Name() != macro->Name()) { + continue; + } + for (uint32_t i = 1; i <= macro->GroupSize(); i++) { + entries.emplace_back(*std::next(it, i)); + } + break; + } + + return entries; +} + std::condition_variable &GetMacroWaitCV() { static std::condition_variable cv; diff --git a/lib/macro/macro-helpers.hpp b/lib/macro/macro-helpers.hpp index 21a4881a..840aa86d 100644 --- a/lib/macro/macro-helpers.hpp +++ b/lib/macro/macro-helpers.hpp @@ -37,6 +37,9 @@ GetMacroElseActions(Macro *); EXPORT std::optional>> GetMacroConditions(Macro *); +EXPORT bool IsGroupMacro(Macro *); +EXPORT std::vector> GetGroupMacroEntries(Macro *); + EXPORT std::condition_variable &GetMacroWaitCV(); EXPORT std::condition_variable &GetMacroTransitionCV(); diff --git a/lib/macro/macro-search.cpp b/lib/macro/macro-search.cpp index f01b6c87..1e697320 100644 --- a/lib/macro/macro-search.cpp +++ b/lib/macro/macro-search.cpp @@ -244,22 +244,9 @@ bool MacroMatchesSearchFilter(Macro *macro) } if (macro->IsGroup()) { - std::vector> subItems; - subItems.reserve(macro->GroupSize()); - - const auto ¯os = GetTopLevelMacros(); - for (auto it = macros.begin(); it < macros.end(); it++) { - if ((*it)->Name() != macro->Name()) { - continue; - } - for (uint32_t i = 1; i <= macro->GroupSize(); i++) { - subItems.emplace_back(*std::next(it, i)); - } - break; - } - - for (const auto &item : subItems) { - if (MacroMatchesSearchFilter(item.get())) { + const auto groupEntries = GetGroupMacroEntries(macro); + for (const auto &entry : groupEntries) { + if (MacroMatchesSearchFilter(entry.get())) { return true; } } diff --git a/lib/macro/macro-tab.cpp b/lib/macro/macro-tab.cpp index 9e3b3b81..4a8b8ce9 100644 --- a/lib/macro/macro-tab.cpp +++ b/lib/macro/macro-tab.cpp @@ -147,20 +147,7 @@ void AdvSceneSwitcher::on_macroAdd_clicked() static void addGroupSubitems(std::vector> ¯os, const std::shared_ptr &group) { - std::vector> subitems; - subitems.reserve(group->GroupSize()); - - // Find all subitems - auto allMacros = GetTopLevelMacros(); - for (auto it = allMacros.begin(); it < allMacros.end(); it++) { - if ((*it)->Name() != group->Name()) { - continue; - } - for (uint32_t i = 1; i <= group->GroupSize(); i++) { - subitems.emplace_back(*std::next(it, i)); - } - break; - } + auto subitems = GetGroupMacroEntries(group.get()); // Remove subitems which were already selected to avoid duplicates for (const auto &subitem : subitems) {