##// END OF EJS Templates
Merge branch 'feature/TimeWidgetInUse' into develop
perrinel -
r194:435054a2a67e merge
parent child
Show More
@@ -0,0 +1,15
1 #ifndef SCIQLOP_SQPDATETIME_H
2 #define SCIQLOP_SQPDATETIME_H
3
4 /**
5 * @brief The SqpDateTime struct holds the information of time parameters
6 * @sa SqpDateTime
7 */
8 struct SqpDateTime {
9 /// Start time
10 double m_TStart;
11 /// End time
12 double m_TEnd;
13 };
14
15 #endif // SCIQLOP_SQPDATETIME_H
@@ -0,0 +1,37
1 #ifndef SCIQLOP_TIMECONTROLLER_H
2 #define SCIQLOP_TIMECONTROLLER_H
3
4 #include <Data/SqpDateTime.h>
5
6 #include <QLoggingCategory>
7 #include <QObject>
8
9 #include <Common/spimpl.h>
10
11
12 Q_DECLARE_LOGGING_CATEGORY(LOG_TimeController)
13
14 /**
15 * @brief The TimeController class aims to handle the Time parameters notification in SciQlop.
16 */
17 class TimeController : public QObject {
18 Q_OBJECT
19 public:
20 explicit TimeController(QObject *parent = 0);
21
22 SqpDateTime dateTime() const noexcept;
23
24 signals:
25 /// Signal emitted to notify that time parameters has beed updated
26 void timeUpdated(SqpDateTime time);
27
28 public slots:
29 /// Slot called when a new dateTime has been defined. Call timeUpdated signal
30 void onTimeToUpdate(SqpDateTime dateTime);
31
32 private:
33 class TimeControllerPrivate;
34 spimpl::unique_impl_ptr<TimeControllerPrivate> impl;
35 };
36
37 #endif // SCIQLOP_TIMECONTROLLER_H
@@ -0,0 +1,26
1 #include "Time/TimeController.h"
2
3 Q_LOGGING_CATEGORY(LOG_TimeController, "TimeController")
4
5 struct TimeController::TimeControllerPrivate {
6
7 SqpDateTime m_DateTime;
8 };
9
10 TimeController::TimeController(QObject *parent)
11 : QObject{parent}, impl{spimpl::make_unique_impl<TimeControllerPrivate>()}
12 {
13 qCDebug(LOG_TimeController()) << tr("TimeController construction");
14 }
15
16 SqpDateTime TimeController::dateTime() const noexcept
17 {
18 return impl->m_DateTime;
19 }
20
21 void TimeController::onTimeToUpdate(SqpDateTime dateTime)
22 {
23 impl->m_DateTime = dateTime;
24
25 emit timeUpdated(dateTime);
26 }
@@ -26,6 +26,7
26 26 #include <DataSource/DataSourceWidget.h>
27 27 #include <SidePane/SqpSidePane.h>
28 28 #include <SqpApplication.h>
29 #include <Time/TimeController.h>
29 30 #include <TimeWidget/TimeWidget.h>
30 31 #include <Variable/Variable.h>
31 32 #include <Visualization/VisualizationController.h>
@@ -168,12 +169,20 MainWindow::MainWindow(QWidget *parent)
168 169 this->menuBar()->addAction(tr("File"));
169 170 auto mainToolBar = this->addToolBar(QStringLiteral("MainToolBar"));
170 171
171 mainToolBar->addWidget(new TimeWidget{});
172 auto timeWidget = new TimeWidget{};
173 mainToolBar->addWidget(timeWidget);
172 174
173 175 // Widgets / controllers connections
176
177 // DataSource
174 178 connect(&sqpApp->dataSourceController(), SIGNAL(dataSourceItemSet(DataSourceItem *)),
175 179 m_Ui->dataSourceWidget, SLOT(addDataSource(DataSourceItem *)));
176 180
181 // Time
182 connect(timeWidget, SIGNAL(timeUpdated(SqpDateTime)), &sqpApp->timeController(),
183 SLOT(onTimeToUpdate(SqpDateTime)));
184
185 // Variable
177 186 qRegisterMetaType<std::shared_ptr<Variable> >();
178 187 connect(&sqpApp->visualizationController(), SIGNAL(variableCreated(std::shared_ptr<Variable>)),
179 188 m_Ui->view, SLOT(displayVariable(std::shared_ptr<Variable>)));
@@ -1,16 +1,15
1 1 #ifndef SCIQLOP_DATAPROVIDERPARAMETERS_H
2 2 #define SCIQLOP_DATAPROVIDERPARAMETERS_H
3 3
4 #include "SqpDateTime.h"
5
4 6 /**
5 7 * @brief The DataProviderParameters struct holds the information needed to retrieve data from a
6 8 * data provider
7 9 * @sa IDataProvider
8 10 */
9 11 struct DataProviderParameters {
10 /// Start time
11 double m_TStart;
12 /// End time
13 double m_TEnd;
12 SqpDateTime m_Time;
14 13 };
15 14
16 15 #endif // SCIQLOP_DATAPROVIDERPARAMETERS_H
@@ -7,6 +7,7
7 7 #include <Common/spimpl.h>
8 8
9 9 class IDataProvider;
10 class TimeController;
10 11 class Variable;
11 12 class VariableModel;
12 13
@@ -23,6 +24,8 public:
23 24
24 25 VariableModel *variableModel() noexcept;
25 26
27 void setTimeController(TimeController *timeController) noexcept;
28
26 29 signals:
27 30 /// Signal emitted when a variable has been created
28 31 void variableCreated(std::shared_ptr<Variable> variable);
@@ -4,6 +4,7
4 4 #include <Data/DataProviderParameters.h>
5 5 #include <Data/IDataProvider.h>
6 6 #include <Data/IDataSeries.h>
7 #include <Time/TimeController.h>
7 8
8 9 #include <QDateTime>
9 10 #include <QMutex>
@@ -15,14 +16,10 namespace {
15 16
16 17 /// @todo Generates default dataseries, according to the provider passed in parameter. This method
17 18 /// will be deleted when the timerange is recovered from SciQlop
18 std::unique_ptr<IDataSeries> generateDefaultDataSeries(const IDataProvider &provider) noexcept
19 std::unique_ptr<IDataSeries> generateDefaultDataSeries(const IDataProvider &provider,
20 const SqpDateTime &dateTime) noexcept
19 21 {
20 auto parameters = DataProviderParameters{
21 // Remarks : we don't use toSecsSinceEpoch() here (method is for Qt 5.8 or above)
22 static_cast<double>(QDateTime{QDate{2017, 01, 01}, QTime{12, 00}}.toMSecsSinceEpoch()
23 / 1000.),
24 static_cast<double>(QDateTime{QDate{2017, 01, 01}, QTime{12, 01}}.toMSecsSinceEpoch())
25 / 1000.};
22 auto parameters = DataProviderParameters{dateTime};
26 23
27 24 return provider.retrieveData(parameters);
28 25 }
@@ -38,6 +35,8 struct VariableController::VariableControllerPrivate {
38 35 QMutex m_WorkingMutex;
39 36 /// Variable model. The VariableController has the ownership
40 37 VariableModel *m_VariableModel;
38
39 TimeController *m_TimeController;
41 40 };
42 41
43 42 VariableController::VariableController(QObject *parent)
@@ -59,16 +58,36 VariableModel *VariableController::variableModel() noexcept
59 58 return impl->m_VariableModel;
60 59 }
61 60
61 void VariableController::setTimeController(TimeController *timeController) noexcept
62 {
63 impl->m_TimeController = timeController;
64 }
65
62 66 void VariableController::createVariable(const QString &name,
63 67 std::shared_ptr<IDataProvider> provider) noexcept
64 68 {
69 // TORM
70 // auto dateTime = SqpDateTime{
71 // // Remarks : we don't use toSecsSinceEpoch() here (method is for Qt 5.8 or above)
72 // static_cast<double>(QDateTime{QDate{2017, 01, 01}, QTime{12, 00}}.toMSecsSinceEpoch()
73 // / 1000.),
74 // static_cast<double>(QDateTime{QDate{2017, 01, 01}, QTime{12, 01}}.toMSecsSinceEpoch())
75 // / 1000.};
76
77 if (!impl->m_TimeController) {
78 qCCritical(LOG_VariableController())
79 << tr("Impossible to create variable: The time controller is null");
80 return;
81 }
82
83
65 84 /// @todo : for the moment :
66 85 /// - the provider is only used to retrieve data from the variable for its initialization, but
67 86 /// it will be retained later
68 87 /// - default data are generated for the variable, without taking into account the timerange set
69 88 /// in sciqlop
70 if (auto newVariable
71 = impl->m_VariableModel->createVariable(name, generateDefaultDataSeries(*provider))) {
89 if (auto newVariable = impl->m_VariableModel->createVariable(
90 name, generateDefaultDataSeries(*provider, impl->m_TimeController->dateTime()))) {
72 91 emit variableCreated(newVariable);
73 92 }
74 93 }
@@ -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 TimeController;
19 20 class VariableController;
20 21 class VisualizationController;
21 22
@@ -37,6 +38,7 public:
37 38
38 39 /// Accessors for the differents sciqlop controllers
39 40 DataSourceController &dataSourceController() noexcept;
41 TimeController &timeController() noexcept;
40 42 VariableController &variableController() noexcept;
41 43 VisualizationController &visualizationController() noexcept;
42 44
@@ -3,6 +3,8
3 3
4 4 #include <QWidget>
5 5
6 #include <Data/SqpDateTime.h>
7
6 8 namespace Ui {
7 9 class TimeWidget;
8 10 } // Ui
@@ -14,6 +16,15 public:
14 16 explicit TimeWidget(QWidget *parent = 0);
15 17 virtual ~TimeWidget();
16 18
19 signals:
20 /// Signal emitted when the time parameters has beed updated
21 void timeUpdated(SqpDateTime time);
22
23 public slots:
24 /// slot called when time parameters update has ben requested
25 void onTimeUpdateRequested();
26
27
17 28 private:
18 29 Ui::TimeWidget *ui;
19 30 };
@@ -3,6 +3,7
3 3 #include <Data/IDataProvider.h>
4 4 #include <DataSource/DataSourceController.h>
5 5 #include <QThread>
6 #include <Time/TimeController.h>
6 7 #include <Variable/Variable.h>
7 8 #include <Variable/VariableController.h>
8 9 #include <Visualization/VisualizationController.h>
@@ -13,6 +14,7 class SqpApplication::SqpApplicationPrivate {
13 14 public:
14 15 SqpApplicationPrivate()
15 16 : m_DataSourceController{std::make_unique<DataSourceController>()},
17 m_TimeController{std::make_unique<TimeController>()},
16 18 m_VariableController{std::make_unique<VariableController>()},
17 19 m_VisualizationController{std::make_unique<VisualizationController>()}
18 20 {
@@ -36,6 +38,9 public:
36 38 m_DataSourceController->moveToThread(&m_DataSourceControllerThread);
37 39 m_VariableController->moveToThread(&m_VariableControllerThread);
38 40 m_VisualizationController->moveToThread(&m_VisualizationControllerThread);
41
42 // Additionnal init
43 m_VariableController->setTimeController(m_TimeController.get());
39 44 }
40 45
41 46 virtual ~SqpApplicationPrivate()
@@ -53,6 +58,7 public:
53 58
54 59 std::unique_ptr<DataSourceController> m_DataSourceController;
55 60 std::unique_ptr<VariableController> m_VariableController;
61 std::unique_ptr<TimeController> m_TimeController;
56 62 std::unique_ptr<VisualizationController> m_VisualizationController;
57 63 QThread m_DataSourceControllerThread;
58 64 QThread m_VariableControllerThread;
@@ -98,6 +104,11 DataSourceController &SqpApplication::dataSourceController() noexcept
98 104 return *impl->m_DataSourceController;
99 105 }
100 106
107 TimeController &SqpApplication::timeController() noexcept
108 {
109 return *impl->m_TimeController;
110 }
111
101 112 VariableController &SqpApplication::variableController() noexcept
102 113 {
103 114 return *impl->m_VariableController;
@@ -1,12 +1,29
1 1 #include "TimeWidget/TimeWidget.h"
2 2 #include "ui_TimeWidget.h"
3 3
4
4 5 TimeWidget::TimeWidget(QWidget *parent) : QWidget{parent}, ui{new Ui::TimeWidget}
5 6 {
6 7 ui->setupUi(this);
8
9 // Connection
10 connect(ui->startDateTimeEdit, &QDateTimeEdit::dateTimeChanged, this,
11 &TimeWidget::onTimeUpdateRequested);
12
13 connect(ui->endDateTimeEdit, &QDateTimeEdit::dateTimeChanged, this,
14 &TimeWidget::onTimeUpdateRequested);
7 15 }
8 16
9 17 TimeWidget::~TimeWidget()
10 18 {
11 19 delete ui;
12 20 }
21
22 void TimeWidget::onTimeUpdateRequested()
23 {
24 auto dateTime = SqpDateTime{
25 static_cast<double>(ui->startDateTimeEdit->dateTime().toMSecsSinceEpoch() / 1000.),
26 static_cast<double>(ui->endDateTimeEdit->dateTime().toMSecsSinceEpoch()) / 1000.};
27
28 emit timeUpdated(std::move(dateTime));
29 }
@@ -8,9 +8,11
8 8 std::unique_ptr<IDataSeries>
9 9 CosinusProvider::retrieveData(const DataProviderParameters &parameters) const
10 10 {
11 auto dateTime = parameters.m_Time;
12
11 13 // Gets the timerange from the parameters
12 auto start = parameters.m_TStart;
13 auto end = parameters.m_TEnd;
14 auto start = dateTime.m_TStart;
15 auto end = dateTime.m_TEnd;
14 16
15 17 // We assure that timerange is valid
16 18 if (end < start) {
General Comments 0
You need to be logged in to leave comments. Login now