Browse Source

Add nesting to `SettingsLoader::load`

master
Krisjanis Rijnieks 10 years ago
parent
commit
1b7768de92
  1. 108
      src/Application/SettingsLoader.cpp

108
src/Application/SettingsLoader.cpp

@ -18,6 +18,10 @@ SettingsLoader * SettingsLoader::instance(){
bool SettingsLoader::load(SurfaceStack & surfaces, MediaServer & mediaServer, string fileName){ bool SettingsLoader::load(SurfaceStack & surfaces, MediaServer & mediaServer, string fileName){
ofxXmlSettings * xmlSettings = new ofxXmlSettings(); ofxXmlSettings * xmlSettings = new ofxXmlSettings();
string sourceType = "";
string sourceName = "";
BaseSource * source = 0;
if(!xmlSettings->loadFile(fileName)){ if(!xmlSettings->loadFile(fileName)){
ofLogWarning("SettingsLoader::load()") << "Could not load XML settings"; ofLogWarning("SettingsLoader::load()") << "Could not load XML settings";
@ -27,62 +31,72 @@ bool SettingsLoader::load(SurfaceStack & surfaces, MediaServer & mediaServer, st
if(!xmlSettings->tagExists("surfaces")){ if(!xmlSettings->tagExists("surfaces")){
ofLogWarning("SettingsLoader::load()") << "XML settings is empty or has wrong markup"; ofLogWarning("SettingsLoader::load()") << "XML settings is empty or has wrong markup";
return false; return false;
} }else{
xmlSettings->pushTag("surfaces");
xmlSettings->pushTag("surfaces");
int numSurfaces = xmlSettings->getNumTags("surface");
int numSurfaces = xmlSettings->getNumTags("surface"); for(int i = 0; i < numSurfaces; i++){
for(int i = 0; i < numSurfaces; i++){ if(xmlSettings->tagExists("surface", i)){
xmlSettings->pushTag("surface", i); xmlSettings->pushTag("surface", i);
// attempt to load surface source // attempt to load surface source
xmlSettings->pushTag("source"); if(xmlSettings->tagExists("source", 0)){
string sourceType = xmlSettings->getValue("source-type", ""); xmlSettings->pushTag("source");
string sourceName = xmlSettings->getValue("source-name", ""); sourceType = xmlSettings->getValue("source-type", "");
BaseSource * source = 0; sourceName = xmlSettings->getValue("source-name", "");
if(sourceName != "" && sourceName != "none" && sourceType != ""){
if(sourceName != "" && sourceName != "none" && sourceType != ""){
// Load source depending on type
int typeEnum = SourceType::GetSourceTypeEnum(sourceType); // Load source depending on type
if(typeEnum == SourceType::SOURCE_TYPE_FBO){ int typeEnum = SourceType::GetSourceTypeEnum(sourceType);
if(typeEnum == SourceType::SOURCE_TYPE_FBO){
// Load FBO source using sourceName // Load FBO source using sourceName
source = mediaServer.loadMedia(sourceName, typeEnum); source = mediaServer.loadMedia(sourceName, typeEnum);
}else{ }else{
// Construct full path // Construct full path
string dir = mediaServer.getDefaultMediaDir(typeEnum); string dir = mediaServer.getDefaultMediaDir(typeEnum);
stringstream pathss; stringstream pathss;
pathss << ofToDataPath(dir, true) << sourceName; pathss << ofToDataPath(dir, true) << sourceName;
string sourcePath = pathss.str(); string sourcePath = pathss.str();
// Load media by using full path // Load media by using full path
source = mediaServer.loadMedia(sourcePath, typeEnum); source = mediaServer.loadMedia(sourcePath, typeEnum);
} }
} }
xmlSettings->popTag(); // source xmlSettings->popTag(); // source
xmlSettings->pushTag("vertices"); }
int vertexCount = xmlSettings->getNumTags("vertex");
if(xmlSettings->tagExists("vertices", 0)){
xmlSettings->pushTag("vertices");
int vertexCount = xmlSettings->getNumTags("vertex");
if(vertexCount == 3){ if(vertexCount == 3){
BaseSurface * triangleSurface = getTriangleSurface(xmlSettings); BaseSurface * triangleSurface = getTriangleSurface(xmlSettings);
if(sourceName != "none" && source != 0){ if(sourceName != "none" && source != 0){
triangleSurface->setSource(source); triangleSurface->setSource(source);
}
surfaces.push_back(triangleSurface);
}else if(vertexCount == 4){
BaseSurface * quadSurface = getQuadSurface(xmlSettings);
if(sourceName != "none" && source != 0){
quadSurface->setSource(source);
}
surfaces.push_back(quadSurface);
}
//xmlSettings->popTag(); // vertices
// this is done in getTriangleSurface and getQuadSurface
}
xmlSettings->popTag(); // surface
} }
surfaces.push_back(triangleSurface);
}else if(vertexCount == 4){
BaseSurface * quadSurface = getQuadSurface(xmlSettings);
if(sourceName != "none" && source != 0){
quadSurface->setSource(source);
}
surfaces.push_back(quadSurface);
} }
xmlSettings->popTag(); // surface xmlSettings->popTag(); // surfaces
} }
xmlSettings->popTag(); // surfaces
return true; return true;
} }

Loading…
Cancel
Save