diff --git a/modules/skybrowser/CMakeLists.txt b/modules/skybrowser/CMakeLists.txt index f792be4c41..7c45c9431d 100644 --- a/modules/skybrowser/CMakeLists.txt +++ b/modules/skybrowser/CMakeLists.txt @@ -30,9 +30,10 @@ set(HEADER_FILES include/screenspaceskybrowser.h include/screenspaceskytarget.h include/wwtdatahandler.h - tinyxml2/tinyxml2.h include/utility.h include/renderableskybrowser.h + include/pair.h + tinyxml2/tinyxml2.h ) source_group("Header Files" FILES ${HEADER_FILES}) @@ -44,9 +45,10 @@ set(SOURCE_FILES src/screenspaceskybrowser.cpp src/screenspaceskytarget.cpp src/wwtdatahandler.cpp - tinyxml2/tinyxml2.cpp src/utility.cpp src/renderableskybrowser.cpp + src/pair.cpp + tinyxml2/tinyxml2.cpp ) source_group("Source Files" FILES ${SOURCE_FILES}) diff --git a/modules/skybrowser/skybrowsermodule.cpp b/modules/skybrowser/skybrowsermodule.cpp index d70c9b5527..6240f20a12 100644 --- a/modules/skybrowser/skybrowsermodule.cpp +++ b/modules/skybrowser/skybrowsermodule.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include #include "skybrowsermodule_lua.inl" #include @@ -391,7 +392,7 @@ SkyBrowserModule::SkyBrowserModule() double deltaTime = global::windowDelegate->deltaTime(); // Fade out or in browser & target - for (SkyBrowserModule::Pair pair : _targetsBrowsers) { + for (Pair pair : _targetsBrowsers) { ScreenSpaceSkyBrowser* browser = pair.getBrowser(); // If outside solar system and browser is visible if (!_cameraInSolarSystem && browser->isEnabled()) { @@ -668,12 +669,12 @@ const WwtDataHandler* SkyBrowserModule::getWWTDataHandler() { return _dataHandler; } -std::vector& SkyBrowserModule::getPairs() +std::vector& SkyBrowserModule::getPairs() { return _targetsBrowsers; } -SkyBrowserModule::Pair* SkyBrowserModule::getPair(std::string id) +Pair* SkyBrowserModule::getPair(std::string id) { auto it = std::find_if(std::begin(_targetsBrowsers), std::end(_targetsBrowsers), [&](Pair& pair) { diff --git a/modules/skybrowser/skybrowsermodule.h b/modules/skybrowser/skybrowsermodule.h index f8fec8fb67..b9bb517dd7 100644 --- a/modules/skybrowser/skybrowsermodule.h +++ b/modules/skybrowser/skybrowsermodule.h @@ -43,11 +43,11 @@ namespace openspace { class ScreenSpaceSkyBrowser; class ScreenSpaceSkyTarget; class RenderableSkyBrowser; -class ScreenSpaceRenderable; class ScreenSpaceImageLocal; class WwtDataHandler; class SceneGraphNode; class ImageData; +class Pair; class SkyBrowserModule : public OpenSpaceModule { @@ -55,41 +55,6 @@ public: constexpr static const char* Name = "SkyBrowser"; - class Pair { - public: - - Pair(ScreenSpaceSkyBrowser* browser, ScreenSpaceSkyTarget* target) - : _target(target), _browser(browser) {} - - Pair(Pair const&) = default; - - Pair& operator=(Pair other) - { - std::swap(_target, other._target); - std::swap(_browser, other._browser); - return *this; - } - - ScreenSpaceSkyTarget* getTarget() { - return _target; - } - - ScreenSpaceSkyBrowser* getBrowser() { - return _browser; - } - - friend bool operator==(const Pair& lhs, const Pair& rhs) { - return lhs._target == rhs._target && lhs._browser == rhs._browser; - } - friend bool operator!=(const Pair& lhs, const Pair& rhs) { - return !(lhs == rhs); - } - - private: - ScreenSpaceSkyTarget* _target{ nullptr }; - ScreenSpaceSkyBrowser* _browser{ nullptr }; - }; - // Constructor & destructor SkyBrowserModule(); virtual ~SkyBrowserModule(); diff --git a/modules/skybrowser/skybrowsermodule_lua.inl b/modules/skybrowser/skybrowsermodule_lua.inl index 2b6a7239ce..f22f6cd827 100644 --- a/modules/skybrowser/skybrowsermodule_lua.inl +++ b/modules/skybrowser/skybrowsermodule_lua.inl @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -75,8 +76,7 @@ namespace openspace::skybrowser::luascriptfunctions { const std::string id = ghoul::lua::value(L, 1); SkyBrowserModule* module = global::moduleEngine->module(); if (module->getPair(id)) { - SkyBrowserModule::Pair* pair = module->getPair(id); - pair->getTarget()->lock(); + module->getPair(id)->lock(); } return 0; } @@ -86,8 +86,7 @@ namespace openspace::skybrowser::luascriptfunctions { const std::string id = ghoul::lua::value(L, 1); SkyBrowserModule* module = global::moduleEngine->module(); if (module->getPair(id)) { - SkyBrowserModule::Pair* pair = module->getPair(id); - pair->getTarget()->unlock(); + module->getPair(id)->unlock(); } return 0; } @@ -101,8 +100,7 @@ namespace openspace::skybrowser::luascriptfunctions { SkyBrowserModule* module = global::moduleEngine->module(); if (module->getPair(id)) { - SkyBrowserModule::Pair* pair = module->getPair(id); - pair->getBrowser()->setImageOrder(i, order); + module->getPair(id)->setImageOrder(i, order); } else if (module->get3dBrowser() != nullptr) { RenderableSkyBrowser* browser3d = dynamic_cast( @@ -153,8 +151,8 @@ namespace openspace::skybrowser::luascriptfunctions { // Send out ID's to the browsers SkyBrowserModule* module = global::moduleEngine->module(); - std::vector pairs = module->getPairs(); - for (SkyBrowserModule::Pair pair : pairs) { + std::vector pairs = module->getPairs(); + for (Pair pair : pairs) { pair.getBrowser()->sendIdToBrowser(); } SceneGraphNode* node = module->get3dBrowser(); @@ -362,9 +360,9 @@ namespace openspace::skybrowser::luascriptfunctions { // Pass data for all the browsers and the corresponding targets if (module->cameraInSolarSystem()) { - std::vector pairs = module->getPairs(); + std::vector pairs = module->getPairs(); - for (SkyBrowserModule::Pair pair : pairs) { + for (Pair pair : pairs) { ScreenSpaceSkyBrowser* browser = pair.getBrowser(); ScreenSpaceSkyTarget* target = pair.getTarget(); std::string id = browser->identifier(); @@ -461,7 +459,7 @@ namespace openspace::skybrowser::luascriptfunctions { SkyBrowserModule* module = global::moduleEngine->module(); if(module->cameraInSolarSystem() && module->getPair(id)) { - SkyBrowserModule::Pair* pair = module->getPair(id); + Pair* pair = module->getPair(id); module->startRotation(pair->getTarget()->targetDirectionGalactic()); } else if (!module->cameraInSolarSystem() && module->get3dBrowser()) { @@ -475,7 +473,7 @@ namespace openspace::skybrowser::luascriptfunctions { ghoul::lua::checkArgumentsAndThrow(L, 1, "lua::set3dSelectedImagesAs2dSelection"); const std::string id = ghoul::lua::value(L, 1); SkyBrowserModule* module = global::moduleEngine->module(); - SkyBrowserModule::Pair* pair = module->getPair(id); + Pair* pair = module->getPair(id); if (pair && module->get3dBrowser()) { RenderableSkyBrowser* browser3d = dynamic_cast( @@ -502,7 +500,7 @@ namespace openspace::skybrowser::luascriptfunctions { ghoul::Dictionary message = wwtmessage::setImageOpacity(i, opacity); if (module->getPair(id)) { - SkyBrowserModule::Pair* pair = module->getPair(id); + Pair* pair = module->getPair(id); pair->getBrowser()->sendMessageToWwt(message); } else if (module->get3dBrowser() != nullptr) { @@ -518,7 +516,7 @@ namespace openspace::skybrowser::luascriptfunctions { ghoul::lua::checkArgumentsAndThrow(L, 1, "lua::centerTargetOnScreen"); const std::string id = ghoul::lua::value(L, 1); SkyBrowserModule* module = global::moduleEngine->module(); - SkyBrowserModule::Pair* pair = module->getPair(id); + Pair* pair = module->getPair(id); if (pair) { // Animate the target to the center of the screen pair->getTarget()->unlock(); @@ -591,7 +589,7 @@ namespace openspace::skybrowser::luascriptfunctions { if (module->getPair(id)) { - SkyBrowserModule::Pair* pair = module->getPair(id); + Pair* pair = module->getPair(id); // Remove image pair->getBrowser()->removeSelectedImage(image, i); }