#include #include #include #include #include #include #include #include Q_LOGGING_CATEGORY(LOG_VariableController, "VariableController") namespace { /// @todo Generates default dataseries, according to the provider passed in parameter. This method /// will be deleted when the timerange is recovered from SciQlop std::unique_ptr generateDefaultDataSeries(const IDataProvider &provider) noexcept { auto parameters = DataProviderParameters{ // Remarks : we don't use toSecsSinceEpoch() here (method is for Qt 5.8 or above) static_cast(QDateTime{QDate{2017, 01, 01}, QTime{12, 00}}.toMSecsSinceEpoch() / 1000.), static_cast(QDateTime{QDate{2017, 01, 01}, QTime{12, 01}}.toMSecsSinceEpoch()) / 1000.}; return provider.retrieveData(parameters); } } // namespace struct VariableController::VariableControllerPrivate { explicit VariableControllerPrivate(VariableController *parent) : m_WorkingMutex{}, m_VariableModel{new VariableModel{parent}} { } QMutex m_WorkingMutex; /// Variable model. The VariableController has the ownership VariableModel *m_VariableModel; }; VariableController::VariableController(QObject *parent) : QObject{parent}, impl{spimpl::make_unique_impl(this)} { qCDebug(LOG_VariableController()) << tr("VariableController construction") << QThread::currentThread(); } VariableController::~VariableController() { qCDebug(LOG_VariableController()) << tr("VariableController destruction") << QThread::currentThread(); this->waitForFinish(); } VariableModel *VariableController::variableModel() noexcept { return impl->m_VariableModel; } void VariableController::createVariable(const QString &name, std::shared_ptr provider) noexcept { /// @todo : for the moment : /// - the provider is only used to retrieve data from the variable for its initialization, but /// it will be retained later /// - default data are generated for the variable, without taking into account the timerange set /// in sciqlop if (auto newVariable = impl->m_VariableModel->createVariable(name, generateDefaultDataSeries(*provider))) { emit variableCreated(newVariable); } } 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}; }