diff --git a/core/include/Variable/Variable.h b/core/include/Variable/Variable.h index cead7ff..c233bde 100644 --- a/core/include/Variable/Variable.h +++ b/core/include/Variable/Variable.h @@ -17,7 +17,10 @@ class QString; /** * @brief The Variable class represents a variable in SciQlop. */ -class Variable { +class Variable : public QObject { + + Q_OBJECT + public: explicit Variable(const QString &name, const QString &unit, const QString &mission, const SqpDateTime &dateTime); @@ -25,14 +28,20 @@ public: QString name() const noexcept; QString mission() const noexcept; QString unit() const noexcept; - - void addDataSeries(std::unique_ptr dataSeries) noexcept; + SqpDateTime dateTime() const noexcept; /// @return the data of the variable, nullptr if there is no data IDataSeries *dataSeries() const noexcept; + bool contains(SqpDateTime dateTime); + void setDataSeries(std::unique_ptr dataSeries) noexcept; + public slots: - void onXRangeChanged(SqpDateTime dateTime); + void onAddDataSeries(std::shared_ptr dataSeries) noexcept; + +signals: + void dataCacheUpdated(); + private: class VariablePrivate; diff --git a/core/include/Variable/VariableController.h b/core/include/Variable/VariableController.h index 0945b53..603c1e9 100644 --- a/core/include/Variable/VariableController.h +++ b/core/include/Variable/VariableController.h @@ -1,11 +1,14 @@ #ifndef SCIQLOP_VARIABLECONTROLLER_H #define SCIQLOP_VARIABLECONTROLLER_H +#include + #include #include #include + class IDataProvider; class TimeController; class Variable; @@ -26,6 +29,10 @@ public: void setTimeController(TimeController *timeController) noexcept; + + /// Request the data loading of the variable whithin dateTime + void requestDataLoading(std::shared_ptr variable, const SqpDateTime &dateTime); + signals: /// Signal emitted when a variable has been created void variableCreated(std::shared_ptr variable); diff --git a/core/src/Variable/Variable.cpp b/core/src/Variable/Variable.cpp index 19aa36d..43864d5 100644 --- a/core/src/Variable/Variable.cpp +++ b/core/src/Variable/Variable.cpp @@ -45,12 +45,25 @@ QString Variable::unit() const noexcept return impl->m_Unit; } -void Variable::addDataSeries(std::unique_ptr dataSeries) noexcept +SqpDateTime Variable::dateTime() const noexcept +{ + return impl->m_DateTime; +} + +void Variable::setDataSeries(std::unique_ptr dataSeries) noexcept { if (!impl->m_DataSeries) { impl->m_DataSeries = std::move(dataSeries); } - /// @todo : else, merge the two data series (if possible) +} + +void Variable::onAddDataSeries(std::shared_ptr dataSeries) noexcept +{ + if (impl->m_DataSeries) { + impl->m_DataSeries->merge(dataSeries.get()); + + emit dataCacheUpdated(); + } } IDataSeries *Variable::dataSeries() const noexcept @@ -58,10 +71,8 @@ IDataSeries *Variable::dataSeries() const noexcept return impl->m_DataSeries.get(); } -void Variable::onXRangeChanged(SqpDateTime dateTime) +bool Variable::contains(SqpDateTime dateTime) { - qCInfo(LOG_Variable()) << "onXRangeChanged detected"; - if (!impl->m_DateTime.contains(dateTime)) { // The current variable dateTime isn't enough to display the dateTime requested. // We have to update it to the new dateTime requested. @@ -70,5 +81,9 @@ void Variable::onXRangeChanged(SqpDateTime dateTime) qCInfo(LOG_Variable()) << "NEW DATE NEEDED"; impl->m_DateTime = dateTime; + + return false; } + + return true; } diff --git a/core/src/Variable/VariableController.cpp b/core/src/Variable/VariableController.cpp index 8dc74ba..54124b6 100644 --- a/core/src/Variable/VariableController.cpp +++ b/core/src/Variable/VariableController.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -8,6 +9,7 @@ #include