void SceneSerializer::serializeNode(QDataStream* out, Node* node) { *out << quint32(node->getNodeType()); *out << node->objectName(); // Serialize child nodes first. serializeNodes(out, node); Datum* deferred = NULL; auto datums = node->findChildren<Datum*>(QString(), Qt::FindDirectChildrenOnly); *out << quint32(datums.length()); for (auto d : datums) { if (dynamic_cast<ScriptDatum*>(d)) { Q_ASSERT(deferred == NULL); Q_ASSERT(node->getNodeType() == NodeType::SCRIPT);; deferred = d; } else { serializeDatum(out, d); } } if (deferred) { serializeDatum(out, deferred); } }
QJsonObject SceneSerializer::run(SerializerMode mode) { QJsonObject out; out["type"] = "sb"; out["protocol"] = PROTOCOL_VERSION; out["nodes"] = serializeNodes(node_root); if (mode == SERIALIZE_ALL) out["connections"] = serializeConnections(); return out; }
String MarkupAccumulator::serializeNodes(Node* targetNode, Node* nodeToSkip, EChildrenOnly childrenOnly) { return serializeNodes(targetNode, nodeToSkip, childrenOnly, 0); }
void SceneSerializer::run(QDataStream* out) { *out << QString("sb") << quint32(1) << quint32(0); serializeNodes(out, NodeManager::manager()); serializeConnections(out); }