2021-12-07 21:47:41 +00:00
|
|
|
#include "content/views/view_pattern_data.hpp"
|
2020-11-10 20:31:04 +00:00
|
|
|
|
2021-01-13 16:28:27 +00:00
|
|
|
#include <hex/providers/provider.hpp>
|
2021-09-08 13:18:24 +00:00
|
|
|
#include <hex/pattern_language/pattern_data.hpp>
|
2020-11-11 09:47:02 +00:00
|
|
|
|
2021-12-07 21:47:41 +00:00
|
|
|
namespace hex::plugin::builtin {
|
2020-11-10 20:31:04 +00:00
|
|
|
|
2021-12-07 21:47:41 +00:00
|
|
|
ViewPatternData::ViewPatternData() : View("hex.builtin.view.pattern_data.name") {
|
2020-11-10 20:31:04 +00:00
|
|
|
|
2022-02-03 23:29:47 +00:00
|
|
|
EventManager::subscribe<EventHighlightingChanged>(this, [this]() {
|
2022-02-01 17:09:40 +00:00
|
|
|
if (!ImHexApi::Provider::isValid()) return;
|
|
|
|
|
|
|
|
this->m_sortedPatterns[ImHexApi::Provider::get()].clear();
|
2020-11-14 23:46:18 +00:00
|
|
|
});
|
2020-11-10 20:31:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
ViewPatternData::~ViewPatternData() {
|
2022-02-03 23:29:47 +00:00
|
|
|
EventManager::unsubscribe<EventHighlightingChanged>(this);
|
2020-11-10 20:31:04 +00:00
|
|
|
}
|
|
|
|
|
2022-01-24 19:53:17 +00:00
|
|
|
static bool beginPatternDataTable(prv::Provider *&provider, const std::vector<pl::PatternData *> &patterns, std::vector<pl::PatternData *> &sortedPatterns) {
|
2022-01-11 21:38:50 +00:00
|
|
|
if (ImGui::BeginTable("##patterndatatable", 6, ImGuiTableFlags_Borders | ImGuiTableFlags_Resizable | ImGuiTableFlags_Sortable | ImGuiTableFlags_Hideable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_RowBg | ImGuiTableFlags_ScrollY)) {
|
2020-11-23 14:22:26 +00:00
|
|
|
ImGui::TableSetupScrollFreeze(0, 1);
|
2022-01-24 19:53:17 +00:00
|
|
|
ImGui::TableSetupColumn("hex.builtin.view.pattern_data.var_name"_lang, 0, 0, ImGui::GetID("name"));
|
|
|
|
ImGui::TableSetupColumn("hex.builtin.view.pattern_data.color"_lang, 0, 0, ImGui::GetID("color"));
|
|
|
|
ImGui::TableSetupColumn("hex.builtin.view.pattern_data.offset"_lang, 0, 0, ImGui::GetID("offset"));
|
|
|
|
ImGui::TableSetupColumn("hex.builtin.view.pattern_data.size"_lang, 0, 0, ImGui::GetID("size"));
|
|
|
|
ImGui::TableSetupColumn("hex.builtin.view.pattern_data.type"_lang, 0, 0, ImGui::GetID("type"));
|
|
|
|
ImGui::TableSetupColumn("hex.builtin.view.pattern_data.value"_lang, 0, 0, ImGui::GetID("value"));
|
2020-11-19 20:19:03 +00:00
|
|
|
|
|
|
|
auto sortSpecs = ImGui::TableGetSortSpecs();
|
|
|
|
|
|
|
|
if (sortSpecs->SpecsDirty || sortedPatterns.empty()) {
|
|
|
|
sortedPatterns = patterns;
|
|
|
|
|
2022-01-24 19:53:17 +00:00
|
|
|
std::sort(sortedPatterns.begin(), sortedPatterns.end(), [&sortSpecs, &provider](pl::PatternData *left, pl::PatternData *right) -> bool {
|
2021-09-08 13:18:24 +00:00
|
|
|
return pl::PatternData::sortPatternDataTable(sortSpecs, provider, left, right);
|
2020-11-19 20:19:03 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
for (auto &pattern : sortedPatterns)
|
|
|
|
pattern->sort(sortSpecs, provider);
|
|
|
|
|
|
|
|
sortSpecs->SpecsDirty = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2020-12-22 17:10:01 +00:00
|
|
|
void ViewPatternData::drawContent() {
|
2021-12-07 21:47:41 +00:00
|
|
|
if (ImGui::Begin(View::toWindowName("hex.builtin.view.pattern_data.name").c_str(), &this->getWindowOpenState(), ImGuiWindowFlags_NoCollapse)) {
|
2021-09-21 00:29:54 +00:00
|
|
|
auto provider = ImHexApi::Provider::get();
|
|
|
|
if (ImHexApi::Provider::isValid() && provider->isReadable()) {
|
2020-11-10 20:31:04 +00:00
|
|
|
|
2022-02-01 17:09:40 +00:00
|
|
|
auto &sortedPatterns = this->m_sortedPatterns[ImHexApi::Provider::get()];
|
|
|
|
if (beginPatternDataTable(provider, provider->getPatternLanguageRuntime().getPatterns(), sortedPatterns)) {
|
2021-01-11 08:53:20 +00:00
|
|
|
ImGui::TableHeadersRow();
|
2022-02-01 17:09:40 +00:00
|
|
|
if (!sortedPatterns.empty()) {
|
2020-11-19 20:59:27 +00:00
|
|
|
|
2022-02-01 17:09:40 +00:00
|
|
|
for (auto &patternData : sortedPatterns)
|
2021-06-17 21:42:43 +00:00
|
|
|
patternData->draw(provider);
|
2020-11-14 23:46:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
ImGui::EndTable();
|
2020-11-11 08:18:35 +00:00
|
|
|
}
|
2020-11-10 20:31:04 +00:00
|
|
|
}
|
|
|
|
}
|
2020-11-11 09:47:02 +00:00
|
|
|
ImGui::End();
|
2020-11-10 20:31:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|