5c7a529fa1
* 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
38 lines
1.2 KiB
C++
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;
|
|
}
|
|
};
|
|
|
|
} |