From 289a78f309b16a495e2ace5da916a8d9ea356576 2017-06-06 13:14:11 From: mperrinel Date: 2017-06-06 13:14:11 Subject: [PATCH] Add the visualization controller --- diff --git a/core/include/Visualization/VisualizationController.h b/core/include/Visualization/VisualizationController.h new file mode 100644 index 0000000..09a53ff --- /dev/null +++ b/core/include/Visualization/VisualizationController.h @@ -0,0 +1,39 @@ +#ifndef SCIQLOP_VISUALIZATIONCONTROLLER_H +#define SCIQLOP_VISUALIZATIONCONTROLLER_H + +#include +#include +#include + +#include + +Q_DECLARE_LOGGING_CATEGORY(LOG_VisualizationController) + +class DataSourceItem; + +/** + * @brief The VisualizationController class aims to make the link between SciQlop and its plugins. + * This is the intermediate class that SciQlop has to use in the way to connect a data source. + * Please first use register method to initialize a plugin specified by its metadata name (JSON + * plugin source) then others specifics method will be able to access it. You can load a data source + * driver plugin then create a data source. + */ +class VisualizationController : public QObject { + Q_OBJECT +public: + explicit VisualizationController(QObject *parent = 0); + virtual ~VisualizationController(); + +public slots: + /// Manage init/end of the controller + void initialize(); + void finalize(); + +private: + void waitForFinish(); + + class VisualizationControllerPrivate; + spimpl::unique_impl_ptr impl; +}; + +#endif // SCIQLOP_VISUALIZATIONCONTROLLER_H diff --git a/core/src/Visualization/VisualizationController.cpp b/core/src/Visualization/VisualizationController.cpp new file mode 100644 index 0000000..d4c246f --- /dev/null +++ b/core/src/Visualization/VisualizationController.cpp @@ -0,0 +1,46 @@ +#include + +#include +#include + +#include +#include + +Q_LOGGING_CATEGORY(LOG_VisualizationController, "VisualizationController") + +class VisualizationController::VisualizationControllerPrivate { +public: + QMutex m_WorkingMutex; +}; + +VisualizationController::VisualizationController(QObject *parent) + : impl{spimpl::make_unique_impl()} +{ + qCDebug(LOG_VisualizationController()) + << tr("VisualizationController construction") << QThread::currentThread(); +} + +VisualizationController::~VisualizationController() +{ + qCDebug(LOG_VisualizationController()) + << tr("VisualizationController destruction") << QThread::currentThread(); + this->waitForFinish(); +} + +void VisualizationController::initialize() +{ + qCDebug(LOG_VisualizationController()) + << tr("VisualizationController init") << QThread::currentThread(); + impl->m_WorkingMutex.lock(); + qCDebug(LOG_VisualizationController()) << tr("VisualizationController init END"); +} + +void VisualizationController::finalize() +{ + impl->m_WorkingMutex.unlock(); +} + +void VisualizationController::waitForFinish() +{ + QMutexLocker locker{&impl->m_WorkingMutex}; +} diff --git a/gui/include/SqpApplication.h b/gui/include/SqpApplication.h index 21dee94..db80758 100644 --- a/gui/include/SqpApplication.h +++ b/gui/include/SqpApplication.h @@ -16,6 +16,7 @@ Q_DECLARE_LOGGING_CATEGORY(LOG_SqpApplication) #define sqpApp (static_cast(QCoreApplication::instance())) class DataSourceController; +class VisualizationController; /** * @brief The SqpApplication class aims to make the link between SciQlop @@ -33,7 +34,9 @@ public: virtual ~SqpApplication(); void initialize(); + /// Accessors for the differents sciqlop controllers DataSourceController &dataSourceController() const noexcept; + VisualizationController &visualizationController() const noexcept; private: class SqpApplicationPrivate; diff --git a/gui/src/SqpApplication.cpp b/gui/src/SqpApplication.cpp index bd378d0..596145a 100644 --- a/gui/src/SqpApplication.cpp +++ b/gui/src/SqpApplication.cpp @@ -2,6 +2,7 @@ #include #include +#include Q_LOGGING_CATEGORY(LOG_SqpApplication, "SqpApplication") @@ -17,10 +18,15 @@ public: qCInfo(LOG_SqpApplication()) << tr("SqpApplicationPrivate destruction"); m_DataSourceControllerThread.quit(); m_DataSourceControllerThread.wait(); + + m_VisualizationThread.quit(); + m_VisualizationThread.wait(); } std::unique_ptr m_DataSourceController; + std::unique_ptr m_VisualizationController; QThread m_DataSourceControllerThread; + QThread m_VisualizationThread; }; @@ -34,7 +40,14 @@ SqpApplication::SqpApplication(int &argc, char **argv) connect(&impl->m_DataSourceControllerThread, &QThread::finished, impl->m_DataSourceController.get(), &DataSourceController::finalize); + connect(&impl->m_VisualizationThread, &QThread::started, impl->m_VisualizationController.get(), + &VisualizationController::initialize); + connect(&impl->m_VisualizationThread, &QThread::finished, impl->m_VisualizationController.get(), + &VisualizationController::finalize); + + impl->m_DataSourceControllerThread.start(); + impl->m_VisualizationThread.start(); } SqpApplication::~SqpApplication() @@ -49,3 +62,8 @@ DataSourceController &SqpApplication::dataSourceController() const noexcept { return *impl->m_DataSourceController; } + +VisualizationController &SqpApplication::visualizationController() const noexcept +{ + return *impl->m_VisualizationController; +}