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();