mirror of
https://github.com/WerWolv/ImHex.git
synced 2026-04-02 13:37:42 -05:00
views: Added constants search view
This commit is contained in:
111
source/views/view_constants.cpp
Normal file
111
source/views/view_constants.cpp
Normal file
@@ -0,0 +1,111 @@
|
||||
#include "views/view_constants.hpp"
|
||||
|
||||
#include <fstream>
|
||||
#include <filesystem>
|
||||
#include <nlohmann/json.hpp>
|
||||
|
||||
namespace hex {
|
||||
|
||||
ViewConstants::ViewConstants() : View("hex.view.constants.name") {
|
||||
this->reloadConstants();
|
||||
this->m_search.resize(0xFFF, 0x00);
|
||||
}
|
||||
|
||||
ViewConstants::~ViewConstants() {
|
||||
|
||||
}
|
||||
|
||||
void ViewConstants::reloadConstants() {
|
||||
this->m_constants.clear();
|
||||
|
||||
for (auto &path : hex::getPath(ImHexPath::Constants)) {
|
||||
if (!std::filesystem::exists(path)) continue;
|
||||
|
||||
for (auto &file : std::filesystem::directory_iterator(path)) {
|
||||
if (!file.is_regular_file()) continue;
|
||||
|
||||
try {
|
||||
nlohmann::json content;
|
||||
std::ifstream(file.path()) >> content;
|
||||
|
||||
for (auto value : content["values"]) {
|
||||
Constant constant;
|
||||
constant.category = content["name"];
|
||||
constant.name = value["name"];
|
||||
if (value.contains("desc"))
|
||||
constant.description = value["desc"];
|
||||
constant.value = value["value"];
|
||||
|
||||
auto type = value["type"];
|
||||
if (type == "int10")
|
||||
constant.type = ConstantType::Int10;
|
||||
else if (type == "int16be")
|
||||
constant.type = ConstantType::Int16BigEndian;
|
||||
else if (type == "int16le")
|
||||
constant.type = ConstantType::Int16LittleEndian;
|
||||
else
|
||||
throw std::runtime_error("Invalid type");
|
||||
|
||||
this->m_constants.push_back(constant);
|
||||
}
|
||||
} catch (...) {
|
||||
log::info("Error");
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ViewConstants::drawContent() {
|
||||
if (ImGui::Begin(View::toWindowName("hex.view.constants.name").c_str(), &this->getWindowOpenState(), ImGuiWindowFlags_NoCollapse)) {
|
||||
|
||||
if (ImGui::InputText("##search", this->m_search.data(), this->m_search.size())) {
|
||||
this->m_filteredConstants.clear();
|
||||
for (auto &constant : this->m_constants) {
|
||||
if (constant.value.starts_with(this->m_search.c_str()) || constant.name.starts_with(this->m_search.c_str()) || constant.description.starts_with(this->m_search.c_str()))
|
||||
this->m_filteredConstants.push_back(&constant);
|
||||
}
|
||||
}
|
||||
|
||||
if (ImGui::BeginTable("##strings", 4,
|
||||
ImGuiTableFlags_Borders | ImGuiTableFlags_Resizable | ImGuiTableFlags_Sortable |
|
||||
ImGuiTableFlags_Reorderable | ImGuiTableFlags_RowBg | ImGuiTableFlags_ScrollY)) {
|
||||
ImGui::TableSetupScrollFreeze(0, 1);
|
||||
ImGui::TableSetupColumn("hex.view.constants.category"_lang, 0, -1, ImGui::GetID("category"));
|
||||
ImGui::TableSetupColumn("hex.view.constants.name"_lang, 0, -1, ImGui::GetID("name"));
|
||||
ImGui::TableSetupColumn("hex.view.constants.desc"_lang, 0, -1, ImGui::GetID("desc"));
|
||||
ImGui::TableSetupColumn("hex.view.constants.value"_lang, 0, -1, ImGui::GetID("value"));
|
||||
|
||||
ImGui::TableHeadersRow();
|
||||
|
||||
ImGuiListClipper clipper;
|
||||
clipper.Begin(this->m_filteredConstants.size());
|
||||
|
||||
while (clipper.Step()) {
|
||||
for (u64 i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) {
|
||||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("%s", this->m_filteredConstants[i]->category.c_str());
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("%s", this->m_filteredConstants[i]->name.c_str());
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("%s", this->m_filteredConstants[i]->description.c_str());
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("%s", this->m_filteredConstants[i]->value.c_str());
|
||||
}
|
||||
}
|
||||
clipper.End();
|
||||
|
||||
ImGui::EndTable();
|
||||
}
|
||||
}
|
||||
ImGui::End();
|
||||
}
|
||||
|
||||
void ViewConstants::drawMenu() {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user