From 6ecdf811fc1cafacb430802872176864d4212e3c 2017-06-13 08:10:52 From: Alexandre Leroux Date: 2017-06-13 08:10:52 Subject: [PATCH] Inits variable controller and adds it to the SciQlop app --- diff --git a/core/include/Variable/VariableController.h b/core/include/Variable/VariableController.h new file mode 100644 index 0000000..5c51817 --- /dev/null +++ b/core/include/Variable/VariableController.h @@ -0,0 +1,31 @@ +#ifndef SCIQLOP_VARIABLECONTROLLER_H +#define SCIQLOP_VARIABLECONTROLLER_H + +#include +#include + +#include + +Q_DECLARE_LOGGING_CATEGORY(LOG_VariableController) + +/** + * @brief The VariableController class aims to handle the variables in SciQlop. + */ +class VariableController : public QObject { + Q_OBJECT +public: + explicit VariableController(QObject *parent = 0); + virtual ~VariableController(); + +public slots: + void initialize(); + void finalize(); + +private: + void waitForFinish(); + + class VariableControllerPrivate; + spimpl::unique_impl_ptr impl; +}; + +#endif // SCIQLOP_VARIABLECONTROLLER_H diff --git a/core/src/Variable/VariableController.cpp b/core/src/Variable/VariableController.cpp new file mode 100644 index 0000000..734de3c --- /dev/null +++ b/core/src/Variable/VariableController.cpp @@ -0,0 +1,46 @@ +#include + +#include +#include + +Q_LOGGING_CATEGORY(LOG_VariableController, "VariableController") + +struct VariableController::VariableControllerPrivate { + explicit VariableControllerPrivate() + : m_WorkingMutex{} + { + } + + QMutex m_WorkingMutex; +}; + +VariableController::VariableController(QObject *parent) + : QObject{parent}, impl{spimpl::make_unique_impl()} +{ + qCDebug(LOG_VariableController()) + << tr("VariableController construction") << QThread::currentThread(); +} + +VariableController::~VariableController() +{ + qCDebug(LOG_VariableController()) + << tr("VariableController destruction") << QThread::currentThread(); + this->waitForFinish(); +} + +void VariableController::initialize() +{ + qCDebug(LOG_VariableController()) << tr("VariableController init") << QThread::currentThread(); + impl->m_WorkingMutex.lock(); + qCDebug(LOG_VariableController()) << tr("VariableController init END"); +} + +void VariableController::finalize() +{ + impl->m_WorkingMutex.unlock(); +} + +void VariableController::waitForFinish() +{ + QMutexLocker locker{&impl->m_WorkingMutex}; +} diff --git a/gui/include/SqpApplication.h b/gui/include/SqpApplication.h index db80758..2d2944a 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 VariableController; class VisualizationController; /** @@ -36,6 +37,7 @@ public: /// Accessors for the differents sciqlop controllers DataSourceController &dataSourceController() const noexcept; + VariableController &variableController() const noexcept; VisualizationController &visualizationController() const noexcept; private: diff --git a/gui/src/SqpApplication.cpp b/gui/src/SqpApplication.cpp index 0a69f1f..5d6c7d8 100644 --- a/gui/src/SqpApplication.cpp +++ b/gui/src/SqpApplication.cpp @@ -2,6 +2,7 @@ #include #include +#include #include Q_LOGGING_CATEGORY(LOG_SqpApplication, "SqpApplication") @@ -10,9 +11,11 @@ class SqpApplication::SqpApplicationPrivate { public: SqpApplicationPrivate() : m_DataSourceController{std::make_unique()}, + m_VariableController{std::make_unique()}, m_VisualizationController{std::make_unique()} { m_DataSourceController->moveToThread(&m_DataSourceControllerThread); + m_VariableController->moveToThread(&m_VariableControllerThread); m_VisualizationController->moveToThread(&m_VisualizationControllerThread); } @@ -22,13 +25,18 @@ public: m_DataSourceControllerThread.quit(); m_DataSourceControllerThread.wait(); + m_VariableControllerThread.quit(); + m_VariableControllerThread.wait(); + m_VisualizationControllerThread.quit(); m_VisualizationControllerThread.wait(); } std::unique_ptr m_DataSourceController; + std::unique_ptr m_VariableController; std::unique_ptr m_VisualizationController; QThread m_DataSourceControllerThread; + QThread m_VariableControllerThread; QThread m_VisualizationControllerThread; }; @@ -43,6 +51,11 @@ SqpApplication::SqpApplication(int &argc, char **argv) connect(&impl->m_DataSourceControllerThread, &QThread::finished, impl->m_DataSourceController.get(), &DataSourceController::finalize); + connect(&impl->m_VariableControllerThread, &QThread::started, impl->m_VariableController.get(), + &VariableController::initialize); + connect(&impl->m_VariableControllerThread, &QThread::finished, impl->m_VariableController.get(), + &VariableController::finalize); + connect(&impl->m_VisualizationControllerThread, &QThread::started, impl->m_VisualizationController.get(), &VisualizationController::initialize); connect(&impl->m_VisualizationControllerThread, &QThread::finished, @@ -50,6 +63,7 @@ SqpApplication::SqpApplication(int &argc, char **argv) impl->m_DataSourceControllerThread.start(); + impl->m_VariableControllerThread.start(); impl->m_VisualizationControllerThread.start(); } @@ -66,6 +80,11 @@ DataSourceController &SqpApplication::dataSourceController() const noexcept return *impl->m_DataSourceController; } +VariableController &SqpApplication::variableController() const noexcept +{ + return *impl->m_VariableController; +} + VisualizationController &SqpApplication::visualizationController() const noexcept { return *impl->m_VisualizationController;