bool SceneDeserializer::run(QJsonObject in, Graph* graph, Info* info) { if (!checkType(in, info)) return false; if (!checkProtocol(in, info)) return false; // Make sure there's a "nodes" array if (in.find("nodes") == in.end() || !in["nodes"].isArray()) { if (info) info->error_message = "File does not contain any nodes."; return false; } deserializeGraph(in["nodes"].toArray(), graph, info); return true; }
void deserializeIntentStory(const nlohmann::json& story, IntentStoryModel& intentStoryModel) { nlohmann::json::const_iterator it; it = story.find("root"); if (it != story.end() && (*it).is_string()) { IntentStoryModel::VertexInfo vInfo; vInfo.stateId = *it; IntentStoryModel::StoryGraph::Vertex v = intentStoryModel.graph.addVertex(vInfo); intentStoryModel.vertexByStateId[vInfo.stateId] = v; intentStoryModel.rootStateId = vInfo.stateId; } it = story.find("graph"); if (it != story.end() && (*it).is_object()) { deserializeGraph(*it, intentStoryModel); } }
void SceneDeserializer::deserializeNode(QJsonObject in, Graph* p, Info* info) { Q_ASSERT(in.contains("script") ^ in.contains("subgraph")); Node* node = NULL; if (in.contains("script")) node = new ScriptNode(in["name"].toString().toStdString(), in["uid"].toDouble(), p); else if (in.contains("subgraph")) node = new GraphNode(in["name"].toString().toStdString(), in["uid"].toDouble(), p); // Deserialize inspector position if (info && in.contains("inspector")) { auto i = in["inspector"].toArray(); info->frames.inspector[node] = QPointF(i[0].toDouble(), i[1].toDouble()); } for (auto d : in["datums"].toArray()) deserializeDatum(d.toObject(), node, info); if (auto script_node = dynamic_cast<ScriptNode*>(node)) { QStringList s; for (auto line : in["script"].toArray()) s.append(line.toString()); script_node->setScript(s.join("\n").toStdString()); } else if (auto graph_node = dynamic_cast<GraphNode*>(node)) { deserializeGraph(in["subgraph"].toArray(), graph_node->getGraph(), info); graph_node->triggerWatchers(); graph_node->getGraph()->triggerWatchers(); } }