//////////////////////////////////////////////////////////////////////////////// /// @brief //////////////////////////////////////////////////////////////////////////////// void EditorWindow::loadObjectVariablesData() { //Create special mapping from materials databases QMap<QString,QString> special_mapping; //Parse out list of materials by class EVDS_VARIABLE* database; if (EVDS_System_GetDatabaseByName(system,"material",&database) == EVDS_OK) { SIMC_LIST* entries; EVDS_Variable_GetList(database,&entries); SIMC_LIST_ENTRY* entry = SIMC_List_GetFirst(entries); while (entry) { char name[256] = { 0 }; char print_name[256] = { 0 }; char class_str[256] = { 0 }; EVDS_VARIABLE* attribute; EVDS_VARIABLE* material = (EVDS_VARIABLE*)SIMC_List_GetData(entries,entry); if (EVDS_Variable_GetAttribute(material,"name",&attribute) == EVDS_OK) { EVDS_Variable_GetString(attribute,name,255,0); } if (EVDS_Variable_GetAttribute(material,"print",&attribute) == EVDS_OK) { EVDS_Variable_GetString(attribute,print_name,255,0); } if (!print_name[0]) strcpy(print_name,name); //Add to list special_mapping["@materials._"] += QString(name) + "\n" + QString(print_name) + "\n"; if (EVDS_Variable_GetAttribute(material,"class",&attribute) == EVDS_OK) { EVDS_Variable_GetString(attribute,class_str,255,0); if (class_str[0]) { special_mapping["@materials."+QString(class_str)] += QString(name) + "\n" + QString(print_name) + "\n"; } else { //EVDS_BREAKPOINT(); } } entry = SIMC_List_GetNext(entries,entry); } } //Load information about editable objects and properties QFile xml_file(":/evds.xml"); if (!xml_file.open(QIODevice::ReadOnly)) { return; } QStack<QString> currentTag; QStack<QString> currentName; int variable_index = 0; QXmlStreamReader xml(&xml_file); while (!xml.atEnd()) { xml.readNext(); if (xml.isStartElement()) { currentTag.push(xml.name().toString()); currentName.push(xml.attributes().value("name").toString()); //printf("[s] %s\n",xml.name().toAscii().data()); if (currentTag.top() == "object_vars") { variable_index = 0; } if (currentTag.top() == "csection_vars") { variable_index = 0; } } else if (xml.isEndElement()) { if (currentTag.top() == "var") { variable_index++; } currentTag.pop(); currentName.pop(); //printf("[e] %s\n",xml.name().toAscii().data()); } else if (xml.isCharacters() && !xml.isWhitespace()) { if (currentTag.value(currentTag.count()-3) == "object_vars") { QString objectType = currentName.value(currentName.count()-3); if (objectVariables[objectType].count() <= variable_index) { objectVariables[objectType].append(QMap<QString,QString>()); } QString value = xml.text().toString(); QMapIterator<QString, QString> i(special_mapping); while (i.hasNext()) { i.next(); value.replace(i.key(),i.value()); } objectVariables[objectType][variable_index][currentTag.top()] = value; } if (currentTag.value(currentTag.count()-3) == "csection_vars") { QString csectionType = currentName.value(currentName.count()-3); if (csectionVariables[csectionType].count() <= variable_index) { csectionVariables[csectionType].append(QMap<QString,QString>()); } QString value = xml.text().toString(); QMapIterator<QString, QString> i(special_mapping); while (i.hasNext()) { i.next(); value.replace(i.key(),i.value()); } csectionVariables[csectionType][variable_index][currentTag.top()] = value; } } } }