mirror of
https://github.com/WerWolv/ImHex.git
synced 2026-02-11 14:58:40 -06:00
feat: Added virtual files to the pattern language
This commit is contained in:
@@ -2,43 +2,44 @@
|
||||
|
||||
#include <hex/api/content_registry.hpp>
|
||||
|
||||
#include <hex/providers/memory_provider.hpp>
|
||||
|
||||
#include <pl/patterns/pattern.hpp>
|
||||
#include <wolv/utils/lock.hpp>
|
||||
|
||||
namespace hex::plugin::builtin {
|
||||
|
||||
ViewPatternData::ViewPatternData() : View::Window("hex.builtin.view.pattern_data.name", ICON_VS_DATABASE) {
|
||||
m_patternDrawer = std::make_unique<ui::PatternDrawer>();
|
||||
|
||||
// Handle tree style setting changes
|
||||
EventSettingsChanged::subscribe(this, [this] {
|
||||
auto patternStyle = ContentRegistry::Settings::read("hex.builtin.setting.interface", "hex.builtin.setting.interface.pattern_tree_style", 0);
|
||||
m_patternDrawer->setTreeStyle(patternStyle);
|
||||
m_treeStyle = ContentRegistry::Settings::read("hex.builtin.setting.interface", "hex.builtin.setting.interface.pattern_tree_style", 0);
|
||||
for (auto &drawer : m_patternDrawer.all())
|
||||
drawer->setTreeStyle(m_treeStyle);
|
||||
|
||||
auto rowColoring = ContentRegistry::Settings::read("hex.builtin.setting.interface", "hex.builtin.setting.interface.pattern_data_row_bg", false);
|
||||
m_patternDrawer->enableRowColoring(rowColoring);
|
||||
});
|
||||
|
||||
// Reset the pattern drawer when the provider changes
|
||||
EventProviderChanged::subscribe(this, [this](auto, auto) {
|
||||
m_patternDrawer->reset();
|
||||
m_rowColoring = ContentRegistry::Settings::read("hex.builtin.setting.interface", "hex.builtin.setting.interface.pattern_data_row_bg", false);
|
||||
for (auto &drawer : m_patternDrawer.all())
|
||||
drawer->enableRowColoring(m_rowColoring);
|
||||
});
|
||||
|
||||
EventPatternEvaluating::subscribe(this, [this]{
|
||||
m_patternDrawer->reset();
|
||||
(*m_patternDrawer)->reset();
|
||||
});
|
||||
|
||||
EventPatternExecuted::subscribe(this, [this](auto){
|
||||
m_patternDrawer->reset();
|
||||
(*m_patternDrawer)->reset();
|
||||
});
|
||||
|
||||
// Handle jumping to a pattern's location when it is clicked
|
||||
m_patternDrawer->setSelectionCallback([](Region region){ ImHexApi::HexEditor::setSelection(region); });
|
||||
m_patternDrawer.setOnCreateCallback([this](prv::Provider *, auto &drawer) {
|
||||
drawer = std::make_unique<ui::PatternDrawer>();
|
||||
|
||||
drawer->setSelectionCallback([](Region region){ ImHexApi::HexEditor::setSelection(region); });
|
||||
drawer->setTreeStyle(m_treeStyle);
|
||||
drawer->enableRowColoring(m_rowColoring);
|
||||
});
|
||||
}
|
||||
|
||||
ViewPatternData::~ViewPatternData() {
|
||||
EventSettingsChanged::unsubscribe(this);
|
||||
EventProviderChanged::unsubscribe(this);
|
||||
EventPatternEvaluating::unsubscribe(this);
|
||||
EventPatternExecuted::unsubscribe(this);
|
||||
}
|
||||
@@ -51,11 +52,11 @@ namespace hex::plugin::builtin {
|
||||
|
||||
const auto height = std::max(ImGui::GetContentRegionAvail().y - ImGui::GetTextLineHeightWithSpacing() - ImGui::GetStyle().FramePadding.y * 2, ImGui::GetTextLineHeightWithSpacing() * 5);
|
||||
if (!runtime.arePatternsValid()) {
|
||||
m_patternDrawer->draw({ }, nullptr, height);
|
||||
(*m_patternDrawer)->draw({ }, nullptr, height);
|
||||
} else {
|
||||
// If the runtime has finished evaluating, draw the patterns
|
||||
if (TRY_LOCK(ContentRegistry::PatternLanguage::getRuntimeLock())) {
|
||||
m_patternDrawer->draw(runtime.getPatterns(), &runtime, height);
|
||||
(*m_patternDrawer)->draw(runtime.getPatterns(), &runtime, height);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user