diff --git a/example/bin/data/defaultSurfaces.xml b/example/bin/data/defaultSurfaces.xml index 2d90507..2ecff44 100755 --- a/example/bin/data/defaultSurfaces.xml +++ b/example/bin/data/defaultSurfaces.xml @@ -2,15 +2,15 @@ - 144.596435547 + 155.596435547 350.618133545 - 334.612976074 + 345.612976074 138.055999756 - 93.018066406 + 104.018066406 109.018371582 @@ -33,25 +33,23 @@ Custom FBO Source - - - 370.015960693 - 71.820503235 + 393.015960693 + 110.820503235 - 426.714202881 - 137.484405518 + 449.714202881 + 176.484405518 - 404.540893555 - 250.199127197 + 425.000000000 + 292.000000000 - 176.995574951 - 287.742950439 + 199.995574951 + 326.742950439 @@ -80,45 +78,43 @@ 1 - - - 429.168884277 - 232.234344482 + 448.000000000 + 201.000000000 - 493.644958496 - 218.507308960 + 536.000000000 + 149.000000000 - 573.095703125 - 218.091369629 + 623.000000000 + 166.000000000 - 419.185028076 - 282.983367920 + 449.000000000 + 263.000000000 - 485.740966797 - 285.063232422 + 534.000000000 + 226.000000000 - 576.008056641 - 274.663574219 + 662.000000000 + 240.000000000 - 431.248046875 - 324.164886475 + 477.000000000 + 322.000000000 - 504.876403809 - 327.908752441 + 554.000000000 + 337.000000000 - 591.815185547 - 310.437927246 + 648.000000000 + 306.000000000 diff --git a/src/Application/SettingsLoader.cpp b/src/Application/SettingsLoader.cpp index 46726ec..6af4394 100644 --- a/src/Application/SettingsLoader.cpp +++ b/src/Application/SettingsLoader.cpp @@ -144,15 +144,21 @@ bool SettingsLoader::load( } // TODO: Save all presets, not just the active one. -bool SettingsLoader::save(SurfaceStack & surfaces, string fileName){ +bool SettingsLoader::save(SurfaceManager & surfaceManager, string fileName){ ofxXmlSettings * xmlSettings = new ofxXmlSettings(); + + unsigned int numPresets = surfaceManager.getNumPresets(); + + for(unsigned int i = 0; i < numPresets; ++i){ + + SurfaceStack * surfaces = surfaceManager.getPresetAt(i); // Save surfaces xmlSettings->addTag("surfaces"); - xmlSettings->pushTag("surfaces"); - for(int i = 0; i < surfaces.size(); i++){ - BaseSurface * surface = surfaces[i]; + xmlSettings->pushTag("surfaces", i); + for(int i = 0; i < surfaces->size(); i++){ + BaseSurface * surface = surfaces->at(i); xmlSettings->addTag("surface"); xmlSettings->addAttribute("surface", "type", surface->getType(), i); @@ -219,6 +225,9 @@ bool SettingsLoader::save(SurfaceStack & surfaces, string fileName){ xmlSettings->popTag(); // surface } xmlSettings->popTag(); // surfaces + + } // for + xmlSettings->save(fileName); } diff --git a/src/Application/SettingsLoader.h b/src/Application/SettingsLoader.h index 50f2cfd..eee6327 100644 --- a/src/Application/SettingsLoader.h +++ b/src/Application/SettingsLoader.h @@ -18,7 +18,7 @@ class SettingsLoader { static SettingsLoader * instance(); bool load(SurfaceManager & surfaceManager, MediaServer & mediaServer, string fileName); - bool save(SurfaceStack & surfaces, string fileName); + bool save(SurfaceManager & surfaceManager, string fileName); string getLastLoadedFilename(){ return _lastLoadedFilename; }; diff --git a/src/Surfaces/SurfaceManager.cpp b/src/Surfaces/SurfaceManager.cpp index e5181b3..e096c76 100644 --- a/src/Surfaces/SurfaceManager.cpp +++ b/src/Surfaces/SurfaceManager.cpp @@ -107,7 +107,7 @@ void SurfaceManager::saveXmlSettings(string fileName){ exit(EXIT_FAILURE); } - SettingsLoader::instance()->save(*_presets[_activePresetIndex], fileName); + SettingsLoader::instance()->save(*this, fileName); } // TODO: We need to load all presets. Not just the active one. @@ -358,7 +358,11 @@ int SurfaceManager::getSelectedVertexIndex(){ } int SurfaceManager::getActivePresetIndex(){ - return 0; + return _activePresetIndex; +} + +unsigned int SurfaceManager::getNumPresets(){ + return _presets.size(); } void SurfaceManager::onVertexChanged(int & i){ @@ -402,6 +406,13 @@ SurfaceStack * SurfaceManager::createPreset(){ // TODO: Create command for this. And what not. } +SurfaceStack * SurfaceManager::getPresetAt(unsigned int i){ + if(i >= _presets.size()){ + throw runtime_error("SurfaceManager::getPresetAt index out of bounds."); + } + return _presets[i]; +} + void SurfaceManager::setNextPreset(){ if(_presets.size() <= 1){ return; diff --git a/src/Surfaces/SurfaceManager.h b/src/Surfaces/SurfaceManager.h index afc30d5..17b5bb9 100644 --- a/src/Surfaces/SurfaceManager.h +++ b/src/Surfaces/SurfaceManager.h @@ -61,6 +61,7 @@ class SurfaceManager { int size(); int getSelectedVertexIndex(); int getActivePresetIndex(); + unsigned int getNumPresets(); ofEvent vertexChangedEvent; ofEvent > verticesChangedEvent; @@ -73,6 +74,7 @@ class SurfaceManager { SurfaceStack * getActivePreset(); SurfaceStack * createPreset(); + SurfaceStack * getPresetAt(unsigned int i); void setNextPreset();