#include #include #include #include #include namespace hex::plugin::builtin { ViewPatternData::ViewPatternData() : View("hex.builtin.view.pattern_data.name") { EventManager::subscribe(this, [this]() { if (!ImHexApi::Provider::isValid()) return; this->m_sortedPatterns[ImHexApi::Provider::get()].clear(); }); EventManager::subscribe([this](auto *provider) { this->m_sortedPatterns[provider].clear(); }); EventManager::subscribe([this]() { auto patternStyle = ContentRegistry::Settings::getSetting("hex.builtin.setting.interface", "hex.builtin.setting.interface.pattern_tree_style"); if (patternStyle.is_number()) this->m_patternDrawer.setTreeStyle(static_cast(patternStyle.get())); }); } ViewPatternData::~ViewPatternData() { EventManager::unsubscribe(this); } void ViewPatternData::drawContent() { if (ImGui::Begin(View::toWindowName("hex.builtin.view.pattern_data.name").c_str(), &this->getWindowOpenState(), ImGuiWindowFlags_NoCollapse)) { if (ImHexApi::Provider::isValid()) { auto provider = ImHexApi::Provider::get(); auto &patternLanguage = ProviderExtraData::get(provider).patternLanguage; const auto &patterns = [&] -> const auto& { if (provider->isReadable() && patternLanguage.runtime != nullptr && patternLanguage.executionDone) return ProviderExtraData::get(provider).patternLanguage.runtime->getAllPatterns(); else { static const std::vector> empty; return empty; } }(); this->m_patternDrawer.draw(patterns); } } ImGui::End(); } }