diff --git a/core/include/Data/SqpDateTime.h b/core/include/Data/SqpDateTime.h index a6d1aa4..af1ad77 100644 --- a/core/include/Data/SqpDateTime.h +++ b/core/include/Data/SqpDateTime.h @@ -9,6 +9,11 @@ struct SqpDateTime { double m_TStart; /// End time double m_TEnd; + + bool contains(const SqpDateTime &dateTime) + { + return (m_TStart <= dateTime.m_TStart && m_TEnd >= dateTime.m_TEnd); + } }; #endif // SCIQLOP_SQPDATETIME_H diff --git a/core/include/Variable/Variable.h b/core/include/Variable/Variable.h index 8fe4e5c..cead7ff 100644 --- a/core/include/Variable/Variable.h +++ b/core/include/Variable/Variable.h @@ -19,7 +19,8 @@ class QString; */ class Variable { public: - explicit Variable(const QString &name, const QString &unit, const QString &mission); + explicit Variable(const QString &name, const QString &unit, const QString &mission, + const SqpDateTime &dateTime); QString name() const noexcept; QString mission() const noexcept; diff --git a/core/include/Variable/VariableModel.h b/core/include/Variable/VariableModel.h index 140a02a..490f43b 100644 --- a/core/include/Variable/VariableModel.h +++ b/core/include/Variable/VariableModel.h @@ -1,11 +1,14 @@ #ifndef SCIQLOP_VARIABLEMODEL_H #define SCIQLOP_VARIABLEMODEL_H -#include + +#include #include #include +#include + Q_DECLARE_LOGGING_CATEGORY(LOG_VariableModel) class IDataSeries; @@ -21,11 +24,13 @@ public: /** * Creates a new variable in the model * @param name the name of the new variable + * @param dateTime the dateTime of the new variable * @param defaultDataSeries the default data of the new variable * @return the pointer to the new variable */ std::shared_ptr - createVariable(const QString &name, std::unique_ptr defaultDataSeries) noexcept; + createVariable(const QString &name, const SqpDateTime &dateTime, + std::unique_ptr defaultDataSeries) noexcept; // /////////////////////////// // // QAbstractTableModel methods // diff --git a/core/src/Variable/Variable.cpp b/core/src/Variable/Variable.cpp index a4a1830..19aa36d 100644 --- a/core/src/Variable/Variable.cpp +++ b/core/src/Variable/Variable.cpp @@ -6,8 +6,13 @@ Q_LOGGING_CATEGORY(LOG_Variable, "Variable") struct Variable::VariablePrivate { - explicit VariablePrivate(const QString &name, const QString &unit, const QString &mission) - : m_Name{name}, m_Unit{unit}, m_Mission{mission}, m_DataSeries{nullptr} + explicit VariablePrivate(const QString &name, const QString &unit, const QString &mission, + const SqpDateTime &dateTime) + : m_Name{name}, + m_Unit{unit}, + m_Mission{mission}, + m_DateTime{dateTime}, + m_DataSeries{nullptr} { } @@ -19,8 +24,9 @@ struct Variable::VariablePrivate { std::unique_ptr m_DataSeries; }; -Variable::Variable(const QString &name, const QString &unit, const QString &mission) - : impl{spimpl::make_unique_impl(name, unit, mission)} +Variable::Variable(const QString &name, const QString &unit, const QString &mission, + const SqpDateTime &dateTime) + : impl{spimpl::make_unique_impl(name, unit, mission, dateTime)} { } @@ -55,4 +61,14 @@ IDataSeries *Variable::dataSeries() const noexcept void Variable::onXRangeChanged(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. + // the correspondant new data to display will be given by the cache if possible and the + // provider if necessary. + qCInfo(LOG_Variable()) << "NEW DATE NEEDED"; + + impl->m_DateTime = dateTime; + } } diff --git a/core/src/Variable/VariableController.cpp b/core/src/Variable/VariableController.cpp index 78102c6..8dc74ba 100644 --- a/core/src/Variable/VariableController.cpp +++ b/core/src/Variable/VariableController.cpp @@ -95,7 +95,7 @@ void VariableController::createVariable(const QString &name, /// in sciqlop auto dateTime = impl->m_TimeController->dateTime(); if (auto newVariable = impl->m_VariableModel->createVariable( - name, generateDefaultDataSeries(*provider, dateTime))) { + name, dateTime, generateDefaultDataSeries(*provider, dateTime))) { // store in cache impl->m_VariableCacheController->addDateTime(newVariable, dateTime); diff --git a/core/src/Variable/VariableModel.cpp b/core/src/Variable/VariableModel.cpp index 25edb92..8325ee6 100644 --- a/core/src/Variable/VariableModel.cpp +++ b/core/src/Variable/VariableModel.cpp @@ -26,15 +26,15 @@ VariableModel::VariableModel(QObject *parent) } std::shared_ptr -VariableModel::createVariable(const QString &name, +VariableModel::createVariable(const QString &name, const SqpDateTime &dateTime, std::unique_ptr defaultDataSeries) noexcept { auto insertIndex = rowCount(); beginInsertRows({}, insertIndex, insertIndex); /// @todo For the moment, the other data of the variable is initialized with default values - auto variable - = std::make_shared(name, QStringLiteral("unit"), QStringLiteral("mission")); + auto variable = std::make_shared(name, QStringLiteral("unit"), + QStringLiteral("mission"), dateTime); variable->addDataSeries(std::move(defaultDataSeries)); impl->m_Variables.push_back(variable);