##// END OF EJS Templates
Inits variable controller and adds it to the SciQlop app
Alexandre Leroux -
r111:6ecdf811fc1c
parent child
Show More
@@ -0,0 +1,31
1 #ifndef SCIQLOP_VARIABLECONTROLLER_H
2 #define SCIQLOP_VARIABLECONTROLLER_H
3
4 #include <QLoggingCategory>
5 #include <QObject>
6
7 #include <Common/spimpl.h>
8
9 Q_DECLARE_LOGGING_CATEGORY(LOG_VariableController)
10
11 /**
12 * @brief The VariableController class aims to handle the variables in SciQlop.
13 */
14 class VariableController : public QObject {
15 Q_OBJECT
16 public:
17 explicit VariableController(QObject *parent = 0);
18 virtual ~VariableController();
19
20 public slots:
21 void initialize();
22 void finalize();
23
24 private:
25 void waitForFinish();
26
27 class VariableControllerPrivate;
28 spimpl::unique_impl_ptr<VariableControllerPrivate> impl;
29 };
30
31 #endif // SCIQLOP_VARIABLECONTROLLER_H
@@ -0,0 +1,46
1 #include <Variable/VariableController.h>
2
3 #include <QMutex>
4 #include <QThread>
5
6 Q_LOGGING_CATEGORY(LOG_VariableController, "VariableController")
7
8 struct VariableController::VariableControllerPrivate {
9 explicit VariableControllerPrivate()
10 : m_WorkingMutex{}
11 {
12 }
13
14 QMutex m_WorkingMutex;
15 };
16
17 VariableController::VariableController(QObject *parent)
18 : QObject{parent}, impl{spimpl::make_unique_impl<VariableControllerPrivate>()}
19 {
20 qCDebug(LOG_VariableController())
21 << tr("VariableController construction") << QThread::currentThread();
22 }
23
24 VariableController::~VariableController()
25 {
26 qCDebug(LOG_VariableController())
27 << tr("VariableController destruction") << QThread::currentThread();
28 this->waitForFinish();
29 }
30
31 void VariableController::initialize()
32 {
33 qCDebug(LOG_VariableController()) << tr("VariableController init") << QThread::currentThread();
34 impl->m_WorkingMutex.lock();
35 qCDebug(LOG_VariableController()) << tr("VariableController init END");
36 }
37
38 void VariableController::finalize()
39 {
40 impl->m_WorkingMutex.unlock();
41 }
42
43 void VariableController::waitForFinish()
44 {
45 QMutexLocker locker{&impl->m_WorkingMutex};
46 }
@@ -16,6 +16,7 Q_DECLARE_LOGGING_CATEGORY(LOG_SqpApplication)
16 16 #define sqpApp (static_cast<SqpApplication *>(QCoreApplication::instance()))
17 17
18 18 class DataSourceController;
19 class VariableController;
19 20 class VisualizationController;
20 21
21 22 /**
@@ -36,6 +37,7 public:
36 37
37 38 /// Accessors for the differents sciqlop controllers
38 39 DataSourceController &dataSourceController() const noexcept;
40 VariableController &variableController() const noexcept;
39 41 VisualizationController &visualizationController() const noexcept;
40 42
41 43 private:
@@ -2,6 +2,7
2 2
3 3 #include <DataSource/DataSourceController.h>
4 4 #include <QThread>
5 #include <Variable/VariableController.h>
5 6 #include <Visualization/VisualizationController.h>
6 7
7 8 Q_LOGGING_CATEGORY(LOG_SqpApplication, "SqpApplication")
@@ -10,9 +11,11 class SqpApplication::SqpApplicationPrivate {
10 11 public:
11 12 SqpApplicationPrivate()
12 13 : m_DataSourceController{std::make_unique<DataSourceController>()},
14 m_VariableController{std::make_unique<VariableController>()},
13 15 m_VisualizationController{std::make_unique<VisualizationController>()}
14 16 {
15 17 m_DataSourceController->moveToThread(&m_DataSourceControllerThread);
18 m_VariableController->moveToThread(&m_VariableControllerThread);
16 19 m_VisualizationController->moveToThread(&m_VisualizationControllerThread);
17 20 }
18 21
@@ -22,13 +25,18 public:
22 25 m_DataSourceControllerThread.quit();
23 26 m_DataSourceControllerThread.wait();
24 27
28 m_VariableControllerThread.quit();
29 m_VariableControllerThread.wait();
30
25 31 m_VisualizationControllerThread.quit();
26 32 m_VisualizationControllerThread.wait();
27 33 }
28 34
29 35 std::unique_ptr<DataSourceController> m_DataSourceController;
36 std::unique_ptr<VariableController> m_VariableController;
30 37 std::unique_ptr<VisualizationController> m_VisualizationController;
31 38 QThread m_DataSourceControllerThread;
39 QThread m_VariableControllerThread;
32 40 QThread m_VisualizationControllerThread;
33 41 };
34 42
@@ -43,6 +51,11 SqpApplication::SqpApplication(int &argc, char **argv)
43 51 connect(&impl->m_DataSourceControllerThread, &QThread::finished,
44 52 impl->m_DataSourceController.get(), &DataSourceController::finalize);
45 53
54 connect(&impl->m_VariableControllerThread, &QThread::started, impl->m_VariableController.get(),
55 &VariableController::initialize);
56 connect(&impl->m_VariableControllerThread, &QThread::finished, impl->m_VariableController.get(),
57 &VariableController::finalize);
58
46 59 connect(&impl->m_VisualizationControllerThread, &QThread::started,
47 60 impl->m_VisualizationController.get(), &VisualizationController::initialize);
48 61 connect(&impl->m_VisualizationControllerThread, &QThread::finished,
@@ -50,6 +63,7 SqpApplication::SqpApplication(int &argc, char **argv)
50 63
51 64
52 65 impl->m_DataSourceControllerThread.start();
66 impl->m_VariableControllerThread.start();
53 67 impl->m_VisualizationControllerThread.start();
54 68 }
55 69
@@ -66,6 +80,11 DataSourceController &SqpApplication::dataSourceController() const noexcept
66 80 return *impl->m_DataSourceController;
67 81 }
68 82
83 VariableController &SqpApplication::variableController() const noexcept
84 {
85 return *impl->m_VariableController;
86 }
87
69 88 VisualizationController &SqpApplication::visualizationController() const noexcept
70 89 {
71 90 return *impl->m_VisualizationController;
General Comments 0
You need to be logged in to leave comments. Login now