1
0
mirror of synced 2025-02-06 14:14:22 +01:00

impr: Make integer node accept math expressions

This commit is contained in:
WerWolv 2024-04-29 21:20:38 +02:00
parent df04acc1b9
commit a685d2e97d

View File

@ -9,6 +9,8 @@
#include <nlohmann/json.hpp> #include <nlohmann/json.hpp>
#include <imgui.h> #include <imgui.h>
#include <fonts/codicons_font.h>
#include <wolv/math_eval/math_evaluator.hpp>
namespace hex::plugin::builtin { namespace hex::plugin::builtin {
@ -91,26 +93,34 @@ namespace hex::plugin::builtin {
void drawNode() override { void drawNode() override {
ImGui::PushItemWidth(100_scaled); ImGui::PushItemWidth(100_scaled);
ImGuiExt::InputHexadecimal("##integer_value", &m_value); ImGuiExt::InputTextIcon("##integer_value", ICON_VS_SYMBOL_OPERATOR, m_input, ImGuiInputTextFlags_AutoSelectAll);
ImGui::PopItemWidth(); ImGui::PopItemWidth();
} }
void process() override { void process() override {
this->setIntegerOnOutput(0, m_value); wolv::math_eval::MathEvaluator<i128> evaluator;
if (auto result = evaluator.evaluate(m_input); result.has_value())
this->setIntegerOnOutput(0, *result);
else
throwNodeError(evaluator.getLastError().value_or("Unknown math evaluator error"));
} }
void store(nlohmann::json &j) const override { void store(nlohmann::json &j) const override {
j = nlohmann::json::object(); j = nlohmann::json::object();
j["data"] = m_value; j["input"] = m_input;
} }
void load(const nlohmann::json &j) override { void load(const nlohmann::json &j) override {
m_value = j.at("data"); if (j.contains("input"))
m_input = j.at("input");
else if (j.contains("data"))
m_input = std::to_string(j.at("data").get<i64>());
} }
private: private:
u64 m_value = 0; std::string m_input = "0x00";
}; };
class NodeFloat : public dp::Node { class NodeFloat : public dp::Node {