diff --git a/src/Engine/Network/NetworkManager.h b/src/Engine/Network/NetworkManager.h index 6532197..5a12832 100644 --- a/src/Engine/Network/NetworkManager.h +++ b/src/Engine/Network/NetworkManager.h @@ -7,30 +7,95 @@ #include namespace enzo::nt { +/** +* @brief The central coordinator of the engine's node system. +* +* The network manager is the central coordinator of the engine’s node system. +* It manages the lifecycle of operators, including their creation, storage, +* and validation, while also tracking dependencies between them. Acting +* as a singleton, it ensures that all parts of the engine work with a single +* consistent view of the network, providing global access. Beyond just storing +* operators, it also controls cooking and traversing dependency graphs, +* ensuring that updates flow correctly through the network when nodes change. +* +* @todo remove Qobject inheritance, this is no longer needed since switching to boost signals. +* +*/ class NetworkManager : public QObject { Q_OBJECT public: - // delete copy constructor + /// @brief Deleted the copy constructor for singleton. NetworkManager(const NetworkManager& obj) = delete; + /// @brief Returns a reference to the singleton instance. static NetworkManager& getInstance(); - // functions + /** + * @brief Creates a new node in the network + * + * @param OpInfo Data designating the properties of the node. + * + * @returns The operator ID of the newly created onode + */ OpId addOperator(op::OpInfo opInfo); + + /** @brief Returns the operator ID for the node with its display flag set. + * There can only be only be one operator displayed at a time. + * Return value is nullop if no node is set to display + */ std::optional getDisplayOp(); + + + /** + * @brief Returns whether the node exists in the network and is valid. + * @param opId Operator ID of the node to check the validity of. + */ bool isValidOp(nt::OpId opId); + + /** + * @brief Returns a reference to the GeometryOperator with the given OpId + */ GeometryOperator& getGeoOperator(nt::OpId opId); + + /** + * @brief Sets given OpId to be dislayed, releasing previous display Node + */ void setDisplayOp(OpId opId); + + /** + * @brief Set the selection state for the given node. + * + * @param opId The node to set the state on. + * @param selected The selection state, true selects the node, false unselects it. + * @param add By default all other nodes are unselected, this parameter + * allows adding a selected node without deslecting any others. + */ void setSelectedNode(OpId opId, bool selected, bool add=false); + + /** + * @brief Returns the OpIds for all selected nodes. + */ const std::vector& getSelectedNodes(); + /** @name Signals + * @{ + */ + // @brief A signal emitted when the display node is changed boost::signals2::signal displayNodeChanged; - boost::signals2::signal selectedNodeIds)> selectedNodesChanged; + + // @brief A signal emitted when the geometry to be displayed is changed + // This is different to #displayNodeChanged because the state of geometry + // in a node can change based on parameters or other factors. boost::signals2::signal displayGeoChanged; + // @brief A signal emitted when the selection of nodes changes + boost::signals2::signal selectedNodeIds)> selectedNodesChanged; + /** @} */ + #ifdef UNIT_TEST + /// @brief For use in unit tests, resets the state of the operator. void _reset(); #endif