XmlNodeRef State_t::SaveToXmlNode(Agent* pAgent) const { XmlNodeRef xmlInfo = CreateXmlNode("AgentState"); CTextNode node(xmlInfo); CSerializationID attrId("agentType"); node.setAttr(attrId, this->m_agentType); if (pAgent) { CSerializationID membersId("members"); ISerializableNode* membersNode = node.newChild(membersId); pAgent->Save(membersNode); } this->m_vars.Save(&node); if (this->m_bt) { this->m_bt->Save(&node); } return xmlInfo; }
bool State_t::SaveToFile(IFile* file) const { XmlNodeRef xmlInfo = CreateXmlNode("AgentState"); CTextNode node(xmlInfo); this->m_vars.Save(&node); return xmlInfo->saveToFile(file); }
struct sCbData * sQtGenerateDesignerFile(sXformsNode *head,xmlDoc *modelDocPtr,CallBackInterfaceFunction func ) { xmlDoc *doc = NULL; xmlNode *root_node = NULL; xmlNode *current_node = NULL; /* required for every window */ doc = xmlNewDoc(BAD_CAST"1.0"); // create a new document root_node = xmlNewNode(NULL,BAD_CAST"ui"); // root node CreateNodeAttribute(root_node,"version","4.0"); xmlDocSetRootElement(doc, root_node); // set root node xmlNode *classname = Create1ObjectNode(root_node,"class", "SimpleUiQt"); // create main window xmlNode * classwidget = Create1WidgetNodeWithStringProp(root_node,"classwidget","QWidget","windowTitle",sQT_MAIN_WINDOW_NAME); Create1GeometryProp(classwidget,"0","0",QT_WINDOW_WIDTH, QT_WINDOW_HEIGHT); xmlNode *main_layout = CreateLayout(classwidget,"QVBoxLayout","verticalLayout_2"); xmlNode *ContentItem = CreateItemNode(main_layout,0,0,0); xmlNode *gridLayout = CreateLayout(ContentItem,"QGridLayout","gridLayout_1"); xmlNode *lowerBarItem = CreateItemNode(main_layout,0,0,0); xmlNode *horizontalLayout2 = CreateLayout(lowerBarItem,"QHBoxLayout","horizontalLayout2"); xmlNode *horizontalLayout2Item = CreateItemNode(horizontalLayout2,0,0,0); xmlNode *horizontalLayout = CreateLayout(horizontalLayout2Item,"QHBoxLayout","horizontalLayout"); xmlNode *spacer = CreateSpacer(horizontalLayout,"horizontalSpacer","Qt::Horizontal","40","20", 0,0 ); xmlNode *DoneBtnItem = CreateItemNode(horizontalLayout,0,0,0); xmlNode *DoneBtn = Create1WidgetNodeWithStringProp(DoneBtnItem,sQT_CLOSE_BUTTON,"QPushButton","text","Done"); xmlNode *layoutdefault = CreateXmlNode(NULL,"layoutdefault"); CreateNodeAttribute(layoutdefault,"spacing","6"); CreateNodeAttribute(layoutdefault,"margin","11"); xmlNode *resources = CreateXmlNode(NULL,"resources"); struct sCbData *temp = (struct sCbData *)0; sQtGenerateUIFromTree(head,gridLayout,&temp,modelDocPtr,func); // main content area xmlSaveFormatFileEnc(sQT_UI_FILE, doc, "UTF-8", 1); // save file xmlFreeDoc(doc); // free document xmlCleanupParser(); //clean parse //AppendNode(&temp,"NULL-REFERENCE", "NULL-INITVAL","NULL-VAL",sQT_CLOSE_BUTTON,"QPushButton",modelDocPtr,func); return temp; }
bool State_t::LoadFromFile(const char* fileName) { XmlNodeRef xmlInfo = CreateXmlNode("AgentState"); CTextNode node(xmlInfo); if (node.LoadFromFile(fileName)) { this->m_vars.Load(&node); return true; } return false; }
bool State_t::LoadFromFile(IFile* file, Agent* pAgent) { XmlNodeRef xmlInfo = CreateXmlNode("AgentState"); CTextNode node(xmlInfo); if (node.LoadFromFile(file)) { this->LoadFromXmlNode(node, pAgent); return true; } return false; }
bool State_t::SaveToFile(const char* fileName) const { XmlNodeRef xmlInfo = CreateXmlNode("AgentState"); CTextNode node(xmlInfo); this->m_vars.Save(&node); if (this->m_bt) { this->m_bt->Save(&node); } CFileSystem::MakeSureDirectoryExist(fileName); return xmlInfo->saveToFile(fileName); }
XmlNodeRef cloneXmlNodeFrom(xml_node<>* xmlnode) { XmlNodeRef node = CreateXmlNode(xmlnode->name()); for (xml_attribute<>* attr = xmlnode->first_attribute(); attr; attr = attr->next_attribute()) { node->setAttrText(attr->name(), attr->value()); } for (xml_node<>* subNode = xmlnode->first_node(); subNode; subNode = subNode->next_sibling()) { XmlNodeRef sub = cloneXmlNodeFrom(subNode); node->addChild(sub); } return node; }
behaviac::CMethodBase* Action::LoadMethod(const char* value_) { //Self.test_ns::AgentActionTest::Action2(0) char agentIntanceName[kNameLength]; char agentClassName[kNameLength]; char methodName[kNameLength]; const char* pBeginP = ParseMethodNames(value_, agentIntanceName, agentClassName, methodName); //propertyName = FormatString("%s::%s", agentClassName, methodName); CStringID agentClassId(agentClassName); CStringID methodId(methodName); behaviac::CMethodBase* method = Agent::CreateMethod(agentClassId, methodId); if (!method) { BEHAVIAC_LOGWARNING("No Method %s::%s registered\n", agentClassName, methodName); BEHAVIAC_ASSERT(0, "No Method %s::%s registered\n", agentClassName, methodName); } else { //if (Agent::IsInstanceNameRegistered(agentIntanceName)) { method->SetInstanceNameString(agentIntanceName, PT_INSTANCE); } BEHAVIAC_ASSERT(method, "No Method %s::%s registered", agentClassName, methodName); const char* params = pBeginP; BEHAVIAC_ASSERT(params[0] == '('); behaviac::vector<behaviac::string> tokens; { size_t len = strlen(params); BEHAVIAC_ASSERT(params[len - 1] == ')'); behaviac::string text = behaviac::string(params + 1, len - 2); //behaviac::StringUtils::SplitIntoArray(text, ",", tokens); ParseForParams(text, tokens); } if (tokens.size() > 0) { XmlNodeRef xmlNode = CreateXmlNode("Method"); for (uint32_t i = 0; i < tokens.size(); ++i) { const behaviac::string& token = tokens[i]; char attriName[1024]; string_sprintf(attriName, "param%d", i + 1); xmlNode->setAttr(attriName, token); } CTextNode node(xmlNode); method->LoadFromXML(0, node); } } return method; }
XmlNodeRef MakeXmlNodeStruct(const char* str, const behaviac::string& typeNameT) { behaviac::string src = str; //{color=0;id=;type={bLive=false;name=0;weight=0;};} //the first char is '{' //the last char is '}' behaviac::string::size_type posCloseBrackets = behaviac::StringUtils::Private::SkipPairedBrackets(src); BEHAVIAC_ASSERT(posCloseBrackets != behaviac::string::npos); bool bIsStructMember = false; XmlNodeRef xmlNode = CreateXmlNode(typeNameT.c_str()); //{color=0;id=;type={bLive=false;name=0;weight=0;};} //{color=0;id=;type={bLive=false;name=0;weight=0;};transit_points=3:{coordX=0;coordY=0;}|{coordX=0;coordY=0;}|{coordX=0;coordY=0;};} behaviac::string::size_type posBegin = 1; behaviac::string::size_type posEnd = src.find_first_of(';', posBegin); while (posEnd != behaviac::string::npos) { BEHAVIAC_ASSERT(src[posEnd] == ';'); //the last one might be empty if (posEnd > posBegin) { behaviac::string::size_type posEqual = src.find_first_of('=', posBegin); BEHAVIAC_ASSERT(posEqual > posBegin); size_t length = posEqual - posBegin; behaviac::string memmberName = src.substr(posBegin, length); behaviac::string memmberValue; char c = src[posEqual + 1]; if (c != '{') { //to check if it is an array if (IsArrayString(src, posEqual + 1, posEnd)) { length = posEnd - posEqual - 1; memmberValue = src.substr(posEqual + 1, length); } else { length = posEnd - posEqual - 1; memmberValue = src.substr(posEqual + 1, length); } } else { bIsStructMember = true; const char* pStructBegin = src.c_str(); pStructBegin += posEqual + 1; const char* posCloseBrackets_ = behaviac::StringUtils::Private::SkipPairedBrackets(pStructBegin); length = posCloseBrackets_ - pStructBegin + 1; memmberValue = src.substr(posEqual + 1, length); posEnd = posEqual + 1 + length; } if (bIsStructMember) { XmlNodeRef memberNode = MakeXmlNodeStruct(memmberValue.c_str(), memmberName); xmlNode->addChild(memberNode); } else { //behaviac::string memmberNameFull = typeNameT + "::" + memmberName; //xmlNode->setAttr(memmberNameFull.c_str(), memmberValue.c_str()); xmlNode->setAttr(memmberName.c_str(), memmberValue.c_str()); } } bIsStructMember = false; //skip ';' posBegin = posEnd + 1; //{color=0;id=;type={bLive=false;name=0;weight=0;};transit_points=3:{coordX=0;coordY=0;}|{coordX=0;coordY=0;}|{coordX=0;coordY=0;};} posEnd = src.find_first_of(';', posBegin); if (posEnd > posCloseBrackets) { break; } } return xmlNode; }