From fdb90f74ac8acb1c0ccdfd8ae9d6fe46e9041a57 Mon Sep 17 00:00:00 2001 From: Matthew Territo Date: Wed, 27 Jul 2016 16:45:43 -0600 Subject: [PATCH] Added scene selector in the SettingsEngine, in the GUI under Global Properties. Has placeholder functionality for what's coming in the next commit. --- include/openspace/engine/settingsengine.h | 12 ++++-- src/engine/openspaceengine.cpp | 3 ++ src/engine/settingsengine.cpp | 48 +++++++++++++++++++++-- 3 files changed, 56 insertions(+), 7 deletions(-) diff --git a/include/openspace/engine/settingsengine.h b/include/openspace/engine/settingsengine.h index 583abba854..ce79ac0996 100644 --- a/include/openspace/engine/settingsengine.h +++ b/include/openspace/engine/settingsengine.h @@ -27,18 +27,24 @@ #include #include +#include namespace openspace { class SettingsEngine : public properties::PropertyOwner { public: - SettingsEngine(); + SettingsEngine(); + + void initialize(); private: - properties::FloatProperty _eyeSeparation; + void initEyeSeparation(); + void initSceneFiles(); + + properties::FloatProperty _eyeSeparation; + properties::OptionProperty _scenes; }; } // namespace openspace - #endif //#ifndef __SETTINGSENGINE_H__ diff --git a/src/engine/openspaceengine.cpp b/src/engine/openspaceengine.cpp index 99630b394a..9e72793d23 100644 --- a/src/engine/openspaceengine.cpp +++ b/src/engine/openspaceengine.cpp @@ -416,6 +416,9 @@ bool OpenSpaceEngine::initialize() { ConfigurationManager::KeyShutdownCountdown, _shutdownWait ); + // Initialize the SettingsEngine + _settingsEngine->initialize(); + // Load scenegraph Scene* sceneGraph = new Scene; _renderEngine->setSceneGraph(sceneGraph); diff --git a/src/engine/settingsengine.cpp b/src/engine/settingsengine.cpp index 0dd553da15..9f0ad0615c 100644 --- a/src/engine/settingsengine.cpp +++ b/src/engine/settingsengine.cpp @@ -25,17 +25,57 @@ #include #include +#include #include +#include + +#include +#include namespace openspace { -SettingsEngine::SettingsEngine() : - _eyeSeparation("eyeSeparation", "Eye Separation" , 0.f, 0.f, 10.f) +SettingsEngine::SettingsEngine() + : _eyeSeparation("eyeSeparation", "Eye Separation" , 0.f, 0.f, 10.f) + , _scenes("scenes", "Scene", properties::OptionProperty::DisplayType::DROPDOWN) { + setName("Global Properties"); +} + +void SettingsEngine::initialize() { + initEyeSeparation(); + initSceneFiles(); +} + + +void SettingsEngine::initEyeSeparation() { addProperty(_eyeSeparation); - setName("Global"); + + // Set interaction to change the window's (SGCT's) eye separation _eyeSeparation.onChange( - [this](){ OsEng.windowWrapper().setEyeSeparationDistance(_eyeSeparation); }); + [this]() { OsEng.windowWrapper().setEyeSeparationDistance(_eyeSeparation); }); +} + +void SettingsEngine::initSceneFiles() { + addProperty(_scenes); + + // Load all matching files in the Scene + // TODO: match regex with either with new ghoul readFiles or local code + std::string sceneDir = "${SCENE}"; + std::vector scenes = ghoul::filesystem::Directory(sceneDir).readFiles(); + for (std::size_t i = 0; i < scenes.size(); ++i) { + _scenes.addOption(i, scenes[i]); + } + + // Set interaction to change ConfigurationManager and schedule the load + _scenes.onChange( + [this]() { + std::string sceneFile = _scenes.getDescriptionByValue(_scenes); + OsEng.configurationManager().setValue( + ConfigurationManager::KeyConfigScene, sceneFile); + std::cout << "For a relatively atomic commit, just pretending to load " + << sceneFile << std::endl; + } + ); } }