示例#1
0
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);
  }
}
示例#3
0
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();
    }
}