#pragma once #include "FlowScene.hpp" #include "PortType.hpp" #include "FlowSceneModel.hpp" #include "QUuidStdHash.hpp" #include "ConnectionID.hpp" #include "Export.hpp" #include "TypeConverter.hpp" #include #include #include namespace QtNodes { class Connection; class DataModelRegistry; class NodeDataModel; class Node; /// A FlowScene that uses a simple data flow model. /// This class is a drop-in replacement for the old FlowScene class NODE_EDITOR_PUBLIC DataFlowScene : public FlowScene { Q_OBJECT public: explicit DataFlowScene(std::shared_ptr registry = std::make_shared(), QObject* parent = Q_NULLPTR); std::shared_ptr createConnection(Node& nodeIn, PortIndex portIndexIn, Node& nodeOut, PortIndex portIndexOut, TypeConverter const& converter = TypeConverter()); std::shared_ptr restoreConnection(QJsonObject const &connectionJson); void deleteConnection(Connection& connection); Node& createNode(std::unique_ptr && dataModel); Node& restoreNode(QJsonObject const& nodeJson); void removeNode(Node& node); DataModelRegistry& registry() const; void setRegistry(std::shared_ptr registry); void iterateOverNodes(std::function const& visitor); void iterateOverNodeData(std::function const& visitor); void iterateOverNodeDataDependentOrder(std::function const& visitor); QPointF getNodePosition(Node const& node) const; void setNodePosition(Node& node, QPointF const& pos) const; public: std::unordered_map > const & nodes() const; std::unordered_map > const & connections() const; std::vector selectedNodes() const; public: void clearScene(); void save() const; void load(); QByteArray saveToMemory() const; void loadFromMemory(const QByteArray& data); signals: void nodeCreated(Node &n); void nodeDeleted(Node &n); void connectionCreated(Connection &c); void connectionDeleted(Connection &c); void nodeMoved(Node& n, const QPointF& newLocation); void nodeDoubleClicked(Node& n); void connectionHovered(Connection& c, QPoint screenPos); void nodeHovered(Node& n, QPoint screenPos); void connectionHoverLeft(Connection& c); void nodeHoverLeft(Node& n); private: // default model class class DataFlowModel; DataFlowModel* _dataFlowModel; }; } // namespace QtNodes