123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- #pragma once
- #include "Definitions.hpp"
- #include <QJsonObject>
- #include <iostream>
- #include <string>
- namespace QtNodes {
- inline PortIndex getNodeId(PortType portType, ConnectionId connectionId)
- {
- NodeId id = InvalidNodeId;
- if (portType == PortType::Out) {
- id = connectionId.outNodeId;
- } else if (portType == PortType::In) {
- id = connectionId.inNodeId;
- }
- return id;
- }
- inline PortIndex getPortIndex(PortType portType, ConnectionId connectionId)
- {
- PortIndex index = InvalidPortIndex;
- if (portType == PortType::Out) {
- index = connectionId.outPortIndex;
- } else if (portType == PortType::In) {
- index = connectionId.inPortIndex;
- }
- return index;
- }
- inline PortType oppositePort(PortType port)
- {
- PortType result = PortType::None;
- switch (port) {
- case PortType::In:
- result = PortType::Out;
- break;
- case PortType::Out:
- result = PortType::In;
- break;
- case PortType::None:
- result = PortType::None;
- break;
- default:
- break;
- }
- return result;
- }
- inline bool isPortIndexValid(PortIndex index)
- {
- return index != InvalidPortIndex;
- }
- inline bool isPortTypeValid(PortType portType)
- {
- return portType != PortType::None;
- }
- /**
- * Creates a connection Id instance filled just on one side.
- */
- inline ConnectionId makeIncompleteConnectionId(NodeId const connectedNodeId,
- PortType const connectedPort,
- PortIndex const connectedPortIndex)
- {
- return (connectedPort == PortType::In)
- ? ConnectionId{InvalidNodeId, InvalidPortIndex, connectedNodeId, connectedPortIndex}
- : ConnectionId{connectedNodeId, connectedPortIndex, InvalidNodeId, InvalidPortIndex};
- }
- /**
- * Turns a full connection Id into an incomplete one by removing the
- * data on the given side
- */
- inline ConnectionId makeIncompleteConnectionId(ConnectionId connectionId,
- PortType const portToDisconnect)
- {
- if (portToDisconnect == PortType::Out) {
- connectionId.outNodeId = InvalidNodeId;
- connectionId.outPortIndex = InvalidPortIndex;
- } else {
- connectionId.inNodeId = InvalidNodeId;
- connectionId.inPortIndex = InvalidPortIndex;
- }
- return connectionId;
- }
- inline ConnectionId makeCompleteConnectionId(ConnectionId incompleteConnectionId,
- NodeId const nodeId,
- PortIndex const portIndex)
- {
- if (incompleteConnectionId.outNodeId == InvalidNodeId) {
- incompleteConnectionId.outNodeId = nodeId;
- incompleteConnectionId.outPortIndex = portIndex;
- } else {
- incompleteConnectionId.inNodeId = nodeId;
- incompleteConnectionId.inPortIndex = portIndex;
- }
- return incompleteConnectionId;
- }
- inline std::ostream &operator<<(std::ostream &ostr, ConnectionId const connectionId)
- {
- ostr << "(" << connectionId.outNodeId << ", "
- << (isPortIndexValid(connectionId.outPortIndex) ? std::to_string(connectionId.outPortIndex)
- : "INVALID")
- << ", " << connectionId.inNodeId << ", "
- << (isPortIndexValid(connectionId.inPortIndex) ? std::to_string(connectionId.inPortIndex)
- : "INVALID")
- << ")" << std::endl;
- return ostr;
- }
- inline QJsonObject toJson(ConnectionId const &connId)
- {
- QJsonObject connJson;
- connJson["outNodeId"] = static_cast<qint64>(connId.outNodeId);
- connJson["outPortIndex"] = static_cast<qint64>(connId.outPortIndex);
- connJson["intNodeId"] = static_cast<qint64>(connId.inNodeId);
- connJson["inPortIndex"] = static_cast<qint64>(connId.inPortIndex);
- return connJson;
- }
- inline ConnectionId fromJson(QJsonObject const &connJson)
- {
- ConnectionId connId{static_cast<NodeId>(connJson["outNodeId"].toInt(InvalidNodeId)),
- static_cast<PortIndex>(connJson["outPortIndex"].toInt(InvalidPortIndex)),
- static_cast<NodeId>(connJson["intNodeId"].toInt(InvalidNodeId)),
- static_cast<PortIndex>(connJson["inPortIndex"].toInt(InvalidPortIndex))};
- return connId;
- }
- } // namespace QtNodes
|