diff --git a/src/shared/Core/Window/Window.cpp b/src/shared/Core/Window/Window.cpp index 87f0f4c7ebcf3e917a54a7224169e48c89813538..2d5ebbecab4372b15c592d31d74d0d31a8262e3c 100644 --- a/src/shared/Core/Window/Window.cpp +++ b/src/shared/Core/Window/Window.cpp @@ -18,6 +18,7 @@ #include "Window.h" +#include <Core/MessageBroker/MessageBroker.h> #include <Modules/Empty/EmptyModule.h> #include <Modules/ModulesList.h> @@ -35,23 +36,26 @@ Window::Window(XmlObject configuration) } } +Window::~Window() +{ + MessageBroker::getInstance().unsubscribeFromAll(activeModule); +} + void Window::setChild(std::shared_ptr<Module> module) { + Module *rawModule = module.get(); this->activeModule = module; - setCentralWidget(module.get()); + setCentralWidget(rawModule); module->lower(); - connect(module.get(), &Module::replaceMe, this, &Window::replaceChild); - connect(module.get(), &Module::closeMe, this, &Window::closeChild); + connect(rawModule, &Module::replaceMe, this, &Window::replaceChild); + connect(rawModule, &Module::closeMe, this, &Window::closeChild); } -void Window::replaceChild(std::shared_ptr<Module> _oldModule, - std::shared_ptr<Module> newModule) +void Window::replaceChild(Module *_oldModule, std::shared_ptr<Module> newModule) { std::shared_ptr<Module> oldModule = this->activeModule; - setChild(newModule); - - oldModule.reset(); + MessageBroker::getInstance().unsubscribeFromAll(oldModule); } void Window::closeChild(Module *module) { close(); } @@ -65,4 +69,4 @@ void Window::closeEvent(QCloseEvent *event) { emit onWindowClosed(); event->accept(); -} +} \ No newline at end of file diff --git a/src/shared/Core/Window/Window.h b/src/shared/Core/Window/Window.h index 66b35021b7e77cc9b9f4f45a2e268dee359b3fd9..30bd3b0126851c450ca054453d721fab5539bdfb 100644 --- a/src/shared/Core/Window/Window.h +++ b/src/shared/Core/Window/Window.h @@ -34,6 +34,7 @@ class Window : public QMainWindow public: explicit Window(XmlObject configuration); + ~Window(); XmlObject toXmlObject(); @@ -50,7 +51,6 @@ private: void setChild(std::shared_ptr<Module> module); private slots: - void replaceChild(std::shared_ptr<Module> oldModule, - std::shared_ptr<Module> newModule); + void replaceChild(Module *oldModule, std::shared_ptr<Module> newModule); void closeChild(Module *module); };