1
0
mirror of synced 2024-11-15 11:33:23 +01:00
ImHex/plugins/libimhex/include/hex/data_processor/node.hpp
WerWolv 5c7a529fa1
Added Data Processor using Nodes (#152)
* Added imnodes

* Added basic data processor view. Still needs to be cleaned up

* Make sure all attached links get properly removed when a Node is deleted

* Cleanup and API exposing

* Added data provider overlays and integrate them with the data processor

* Optimized data processing

* Node UI enhancements

* Added support for all themes to the nodes editor

* Improved data processor context menus

* Fixed data processor context menu showing up everywhere

* Make hex editor context menu behave the same as data processor one

* Add different node pin types and prevent incompatible ones from being connected

* Don't require explicitly marking node as end node

* Fixed plugin copying

* Added some more nodes
2021-01-30 22:39:06 +01:00

38 lines
1.2 KiB
C++

#pragma once
#include <hex/data_processor/attribute.hpp>
namespace hex::dp {
class Node {
public:
Node(std::string_view title, std::vector<Attribute> attributes) : m_id(SharedData::dataProcessorNodeIdCounter++), m_title(title), m_attributes(std::move(attributes)) {
for (auto &attr : this->m_attributes)
attr.setParentNode(this);
}
virtual ~Node() = default;
[[nodiscard]] u32 getID() const { return this->m_id; }
[[nodiscard]] std::string_view getTitle() const { return this->m_title; }
[[nodiscard]] std::vector<Attribute>& getAttributes() { return this->m_attributes; }
virtual void drawNode() { }
virtual void process(prv::Overlay *dataOverlay) = 0;
private:
u32 m_id;
std::string m_title;
std::vector<Attribute> m_attributes;
protected:
Attribute* getConnectedInputAttribute(u32 attributeId) {
auto &connectedAttribute = this->getAttributes()[attributeId].getConnectedAttributes();
if (connectedAttribute.empty())
return nullptr;
return connectedAttribute.begin()->second;
}
};
}