ScriptNode *SceneGraph::findScriptNode(char *name) { if (!name || strlen(name) <= 0) return NULL; for (ScriptNode *node = findScriptNode(); node; node = node->nextTraversal()) { const char *nodeName = node->getName(); if (nodeName && strlen(nodeName)) { if (!strcmp(name, nodeName)) return node; } } return NULL; }
void UndoDiagramModuleCutActionFn(void *info) { TransformNode *dgmNode = ((UndoDiagramModuleCut *)info)->mpDiagramNode; CDiagramClipboard *clipboard = ((UndoDiagramModuleCut *)info)->mpClipboard; CDiagram dgm(dgmNode); int nModule = clipboard->getNModuleNodes(); ScriptNode* (*moduleNode)[2] = new (ScriptNode *[nModule][2]); for (int n=0; n<nModule; n++) { CModule orgModule(clipboard->getModuleNode(n)); CModule copyModule(orgModule.getModuleType()); copyModule.setPositionX(orgModule.getPositionX()); copyModule.setPositionY(orgModule.getPositionY()); dgm.addModule(©Module); moduleNode[n][0] = orgModule.getScriptNode(); moduleNode[n][1] = copyModule.getScriptNode(); } int nRoute = clipboard->getNRoutes(); for (n=0; n<nRoute; n++) { Route *route = clipboard->getRoute(n); ScriptNode *outModule = (ScriptNode *)route->getEventOutNode(); for (int i=0; i<nModule; i++) { if (moduleNode[i][0] == outModule) { outModule = moduleNode[i][1]; break; } } ScriptNode *inModule = (ScriptNode *)route->getEventInNode(); for (i=0; i<nModule; i++) { if (moduleNode[i][0] == inModule) { inModule = moduleNode[i][1]; break; } } GetWorld()->getSceneGraph()->addRoute(outModule->getName(), route->getEventOutField()->getName(), inModule->getName(), route->getEventInField()->getName()); } delete []moduleNode; delete clipboard; }
void ScriptLoader::_parseNodes(std::ifstream &stream, ScriptNode *parent) { typedef std::pair<std::string, ScriptNode*> ScriptItem; while (true) { switch (mToken) { //Node case TOKEN_Text: { //Add the new node ScriptNode *newNode; if (parent) { newNode = parent->addChild(mTokenValue); } else { newNode = new ScriptNode(0, mTokenValue); } //Get values _nextToken(stream); std::string valueStr; int i=0; while (mToken == TOKEN_Text) { if (i == 0) valueStr += mTokenValue; else valueStr += " " + mTokenValue; _nextToken(stream); ++i; } newNode->setValue(valueStr); //Add root nodes to scriptList if (!parent) { std::string key; if (newNode->getValue() == "") throw std::runtime_error("Root node must have a name (\"" + newNode->getName() + "\")"); key = newNode->getValue(); m_scriptList.insert(ScriptItem(key, newNode)); } _skipNewLines(stream); //Add any sub-nodes if (mToken == TOKEN_OpenBrace) { //Parse nodes _nextToken(stream); _parseNodes(stream, newNode); //Check for matching closing brace if (mToken != TOKEN_CloseBrace) { throw std::runtime_error("Parse Error: Expecting closing brace"); } _nextToken(stream); _skipNewLines(stream); } newNode->mFileName = mCurrentFileName; break; } //Out of place brace case TOKEN_OpenBrace: throw std::runtime_error("Parse Error: Opening brace out of plane"); break; //Return if end of nodes have been reached case TOKEN_CloseBrace: return; //Return if reached end of file case TOKEN_EOF: return; case TOKEN_NewLine: _nextToken(stream); break; } }; }