From 75cc9e4d846ba952e4b88a5723bae720b928c3e3 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Wed, 26 Jun 2024 19:14:23 +0200 Subject: [PATCH] fix: Pattern data filtering not applying correctly after rerunning pattern --- plugins/ui/source/ui/pattern_drawer.cpp | 112 ++++++++++++------------ 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/plugins/ui/source/ui/pattern_drawer.cpp b/plugins/ui/source/ui/pattern_drawer.cpp index ea1e8f1c3..4045cc1ca 100644 --- a/plugins/ui/source/ui/pattern_drawer.cpp +++ b/plugins/ui/source/ui/pattern_drawer.cpp @@ -1246,62 +1246,6 @@ namespace hex::ui { ImGui::EndPopup(); } - if (!m_filtersUpdated && !patterns.empty()) { - m_filtersUpdated = true; - - if (!m_favoritesUpdateTask.isRunning()) { - m_favoritesUpdateTask = TaskManager::createTask("hex.ui.pattern_drawer.updating"_lang, TaskManager::NoProgress, [this, patterns](auto &task) { - size_t updatedFavorites = 0; - - for (auto &pattern : patterns) { - std::vector patternPath; - traversePatternTree(*pattern, patternPath, [&, this](const pl::ptrn::Pattern &currPattern) { - if (currPattern.hasAttribute("hex::favorite")) - m_favorites.insert({ patternPath, currPattern.clone() }); - - if (const auto &args = currPattern.getAttributeArguments("hex::group"); !args.empty()) { - auto groupName = args.front().toString(); - - if (!m_groups.contains(groupName)) - m_groups.insert({groupName, std::vector>()}); - - m_groups[groupName].push_back(currPattern.clone()); - } - }); - - if (updatedFavorites == m_favorites.size()) - task.interrupt(); - task.update(); - - patternPath.clear(); - traversePatternTree(*pattern, patternPath, [&, this](const pl::ptrn::Pattern &currPattern) { - for (auto &[path, favoritePattern] : m_favorites) { - if (updatedFavorites == m_favorites.size()) - task.interrupt(); - task.update(); - - if (matchesFilter(patternPath, path, true)) { - favoritePattern = currPattern.clone(); - updatedFavorites += 1; - - break; - } - } - }); - } - - std::erase_if(m_favorites, [](const auto &entry) { - const auto &[path, favoritePattern] = entry; - - return favoritePattern == nullptr; - }); - }); - } - - updateFilter(); - - } - if (beginPatternTable(patterns, m_sortedPatterns, height)) { ImGui::TableHeadersRow(); @@ -1376,6 +1320,62 @@ namespace hex::ui { ImGui::EndTable(); } + if (!m_filtersUpdated && !patterns.empty()) { + m_filtersUpdated = true; + + if (!m_favoritesUpdateTask.isRunning()) { + m_favoritesUpdateTask = TaskManager::createTask("hex.ui.pattern_drawer.updating"_lang, TaskManager::NoProgress, [this, patterns](auto &task) { + size_t updatedFavorites = 0; + + for (auto &pattern : patterns) { + std::vector patternPath; + traversePatternTree(*pattern, patternPath, [&, this](const pl::ptrn::Pattern &currPattern) { + if (currPattern.hasAttribute("hex::favorite")) + m_favorites.insert({ patternPath, currPattern.clone() }); + + if (const auto &args = currPattern.getAttributeArguments("hex::group"); !args.empty()) { + auto groupName = args.front().toString(); + + if (!m_groups.contains(groupName)) + m_groups.insert({groupName, std::vector>()}); + + m_groups[groupName].push_back(currPattern.clone()); + } + }); + + if (updatedFavorites == m_favorites.size()) + task.interrupt(); + task.update(); + + patternPath.clear(); + traversePatternTree(*pattern, patternPath, [&, this](const pl::ptrn::Pattern &currPattern) { + for (auto &[path, favoritePattern] : m_favorites) { + if (updatedFavorites == m_favorites.size()) + task.interrupt(); + task.update(); + + if (matchesFilter(patternPath, path, true)) { + favoritePattern = currPattern.clone(); + updatedFavorites += 1; + + break; + } + } + }); + } + + std::erase_if(m_favorites, [](const auto &entry) { + const auto &[path, favoritePattern] = entry; + + return favoritePattern == nullptr; + }); + }); + } + + updateFilter(); + + } + m_jumpToPattern = nullptr; if (m_favoritesUpdateTask.isRunning()) {