diff --git a/include/openspace/documentation/documentationengine.h b/include/openspace/documentation/documentationengine.h index 82f2ef33b8..84ef2275f7 100644 --- a/include/openspace/documentation/documentationengine.h +++ b/include/openspace/documentation/documentationengine.h @@ -33,8 +33,11 @@ namespace documentation { class DocumentationEngine { public: + void addDocumentation(Documentation doc); private: + std::vector _documentations; + }; } // namespace documentation diff --git a/include/openspace/engine/openspaceengine.h b/include/openspace/engine/openspaceengine.h index 99b6507d78..1ea655b46d 100644 --- a/include/openspace/engine/openspaceengine.h +++ b/include/openspace/engine/openspaceengine.h @@ -55,6 +55,7 @@ class ModuleEngine; class WindowWrapper; class SettingsEngine; +namespace documentation { class DocumentationEngine; } namespace interaction { class InteractionHandler; } namespace gui { class GUI; } //namespace scripting { class ScriptEngine; } @@ -77,6 +78,7 @@ public: // Guaranteed to return a valid pointer ConfigurationManager& configurationManager(); + documentation::DocumentationEngine& documentationEngine(); interaction::InteractionHandler& interactionHandler(); RenderEngine& renderEngine(); scripting::ScriptEngine& scriptEngine(); @@ -135,6 +137,7 @@ private: // Components std::unique_ptr _configurationManager; + std::unique_ptr _documentationEngine; std::unique_ptr _interactionHandler; std::unique_ptr _renderEngine; std::unique_ptr _scriptEngine; diff --git a/include/openspace/util/openspacemodule.h b/include/openspace/util/openspacemodule.h index 350c853f65..2cda76686a 100644 --- a/include/openspace/util/openspacemodule.h +++ b/include/openspace/util/openspacemodule.h @@ -27,6 +27,8 @@ #include +#include + #include #include @@ -64,6 +66,8 @@ public: */ void deinitialize(); + virtual std::vector documentations() const; + protected: /** * Customization point for each derived class. The internalInitialize method is called diff --git a/modules/base/basemodule.cpp b/modules/base/basemodule.cpp index 196913f848..fb5731ec9f 100644 --- a/modules/base/basemodule.cpp +++ b/modules/base/basemodule.cpp @@ -119,4 +119,10 @@ void BaseModule::internalInitialize() { fModelGeometry->registerClass("MultiModelGeometry"); } +std::vector BaseModule::documentations() const { + return { + StaticScale::Documentation() + }; +} + } // namespace openspace diff --git a/modules/base/basemodule.h b/modules/base/basemodule.h index ffad43acf1..f9838dbe31 100644 --- a/modules/base/basemodule.h +++ b/modules/base/basemodule.h @@ -33,6 +33,8 @@ class BaseModule : public OpenSpaceModule { public: BaseModule(); + std::vector documentations() const override; + protected: void internalInitialize() override; }; diff --git a/src/documentation/documentationengine.cpp b/src/documentation/documentationengine.cpp index efc4309bae..455242b7f1 100644 --- a/src/documentation/documentationengine.cpp +++ b/src/documentation/documentationengine.cpp @@ -24,10 +24,16 @@ #include +#include + namespace openspace { namespace documentation { +void DocumentationEngine::addDocumentation(Documentation doc) { + _documentations.push_back(std::move(doc)); +} + } // namespace documentation } // namespace openspace diff --git a/src/engine/openspaceengine.cpp b/src/engine/openspaceengine.cpp index c6c58c861e..0904fc12ef 100644 --- a/src/engine/openspaceengine.cpp +++ b/src/engine/openspaceengine.cpp @@ -26,6 +26,7 @@ #include +#include #include #include #include @@ -120,6 +121,7 @@ OpenSpaceEngine* OpenSpaceEngine::_engine = nullptr; OpenSpaceEngine::OpenSpaceEngine(std::string programName, std::unique_ptr windowWrapper) : _configurationManager(new ConfigurationManager) + , _documentationEngine(new documentation::DocumentationEngine) , _interactionHandler(new interaction::InteractionHandler) , _renderEngine(new RenderEngine) , _scriptEngine(new scripting::ScriptEngine) @@ -147,6 +149,7 @@ OpenSpaceEngine::OpenSpaceEngine(std::string programName, _interactionHandler->setPropertyOwner(_globalPropertyNamespace.get()); _globalPropertyNamespace->addPropertySubOwner(_interactionHandler.get()); _globalPropertyNamespace->addPropertySubOwner(_settingsEngine.get()); + FactoryManager::initialize(); FactoryManager::ref().addFactory( std::make_unique>() @@ -158,6 +161,8 @@ OpenSpaceEngine::OpenSpaceEngine(std::string programName, Time::initialize(); ghoul::systemcapabilities::SystemCapabilities::initialize(); TransformationManager::initialize(); + + _documentationEngine->addDocumentation(ConfigurationManager::Documentation()); } OpenSpaceEngine::~OpenSpaceEngine() { @@ -292,6 +297,14 @@ bool OpenSpaceEngine::create(int argc, char** argv, // Register modules _engine->_moduleEngine->initialize(); + // After registering the modules, the documentations for the available classes + // can be added as well + for (OpenSpaceModule* m : _engine->_moduleEngine->modules()) { + for (auto&& doc : m->documentations()) { + _engine->_documentationEngine->addDocumentation(doc); + } + } + // Create the cachemanager FileSys.createCacheManager( absPath("${" + ConfigurationManager::KeyCache + "}"), CacheVersion diff --git a/src/rendering/renderengine.cpp b/src/rendering/renderengine.cpp index 26f4f2efa7..61752e8a93 100644 --- a/src/rendering/renderengine.cpp +++ b/src/rendering/renderengine.cpp @@ -40,6 +40,7 @@ #include +#include #include #include #include @@ -136,6 +137,8 @@ RenderEngine::RenderEngine() 12, -1 }; + + OsEng.documentationEngine().addDocumentation(Scene::Documentation()); } RenderEngine::~RenderEngine() { @@ -493,8 +496,7 @@ void RenderEngine::toggleFrametimeType(int t) { } Scene* RenderEngine::scene() { - // TODO custom assert (ticket #5) - assert(_sceneGraph); + ghoul_assert(_sceneGraph, "Scenegraph not initialized"); return _sceneGraph; } diff --git a/src/util/openspacemodule.cpp b/src/util/openspacemodule.cpp index 3c71ffaf67..dc61f1c014 100644 --- a/src/util/openspacemodule.cpp +++ b/src/util/openspacemodule.cpp @@ -63,6 +63,10 @@ void OpenSpaceModule::deinitialize() { internalDeinitialize(); } +std::vector OpenSpaceModule::documentations() const { + return {}; +} + std::string OpenSpaceModule::modulePath() const { std::string moduleName = name(); std::transform(moduleName.begin(), moduleName.end(), moduleName.begin(), tolower);