1 #include "views/view_pattern_data.hpp" 2 3 #include <hex/providers/provider.hpp> 4 #include <hex/lang/pattern_data.hpp> 5 6 namespace hex { 7 ViewPatternData(std::vector<lang::PatternData * > & patternData)8 ViewPatternData::ViewPatternData(std::vector<lang::PatternData*> &patternData) 9 : View("hex.view.pattern_data.title"_lang), m_patternData(patternData) { 10 11 this->subscribeEvent(Events::PatternChanged, [this](auto data) { 12 this->m_sortedPatternData.clear(); 13 }); 14 } 15 ~ViewPatternData()16 ViewPatternData::~ViewPatternData() { 17 this->unsubscribeEvent(Events::PatternChanged); 18 } 19 beginPatternDataTable(prv::Provider * & provider,const std::vector<lang::PatternData * > & patterns,std::vector<lang::PatternData * > & sortedPatterns)20 static bool beginPatternDataTable(prv::Provider* &provider, const std::vector<lang::PatternData*> &patterns, std::vector<lang::PatternData*> &sortedPatterns) { 21 if (ImGui::BeginTable("##patterndatatable", 6, ImGuiTableFlags_Borders | ImGuiTableFlags_Resizable | ImGuiTableFlags_Sortable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_RowBg | ImGuiTableFlags_ScrollY)) { 22 ImGui::TableSetupScrollFreeze(0, 1); 23 ImGui::TableSetupColumn("hex.view.pattern_data.name"_lang, 0, -1, ImGui::GetID("name")); 24 ImGui::TableSetupColumn("hex.view.pattern_data.color"_lang, 0, -1, ImGui::GetID("color")); 25 ImGui::TableSetupColumn("hex.view.pattern_data.offset"_lang, 0, -1, ImGui::GetID("offset")); 26 ImGui::TableSetupColumn("hex.view.pattern_data.size"_lang, 0, -1, ImGui::GetID("size")); 27 ImGui::TableSetupColumn("hex.view.pattern_data.type"_lang, 0, -1, ImGui::GetID("type")); 28 ImGui::TableSetupColumn("hex.view.pattern_data.value"_lang, 0, -1, ImGui::GetID("value")); 29 30 auto sortSpecs = ImGui::TableGetSortSpecs(); 31 32 if (sortSpecs->SpecsDirty || sortedPatterns.empty()) { 33 sortedPatterns = patterns; 34 35 std::sort(sortedPatterns.begin(), sortedPatterns.end(), [&sortSpecs, &provider](lang::PatternData* left, lang::PatternData* right) -> bool { 36 return lang::PatternData::sortPatternDataTable(sortSpecs, provider, left, right); 37 }); 38 39 for (auto &pattern : sortedPatterns) 40 pattern->sort(sortSpecs, provider); 41 42 sortSpecs->SpecsDirty = false; 43 } 44 45 return true; 46 } 47 48 return false; 49 } 50 drawContent()51 void ViewPatternData::drawContent() { 52 if (ImGui::Begin("hex.view.pattern_data.title"_lang, &this->getWindowOpenState(), ImGuiWindowFlags_NoCollapse)) { 53 auto provider = SharedData::currentProvider; 54 if (provider != nullptr && provider->isReadable()) { 55 56 if (beginPatternDataTable(provider, this->m_patternData, this->m_sortedPatternData)) { 57 ImGui::TableHeadersRow(); 58 if (this->m_sortedPatternData.size() > 0) { 59 60 for (auto &patternData : this->m_sortedPatternData) 61 patternData->createEntry(provider); 62 63 } 64 65 ImGui::EndTable(); 66 } 67 68 } 69 } 70 ImGui::End(); 71 } 72 drawMenu()73 void ViewPatternData::drawMenu() { 74 75 } 76 77 }