##// END OF EJS Templates
Implements visit of graph...
Implements visit of graph When a graph is visited, we check if it can contains the variable, and if it's the case, we add an action to the current menu to open the variable in this graph.

File last commit:

r195:ecdf3f75d679
r213:946a2291304e
Show More
VariableController.cpp
110 lines | 3.6 KiB | text/x-c | CppLexer
/ core / src / Variable / VariableController.cpp
Alexandre Leroux
Inits variable controller and adds it to the SciQlop app
r111 #include <Variable/VariableController.h>
Alexandre Leroux
Adds Variable model in the Variable controller
r113 #include <Variable/VariableModel.h>
Alexandre Leroux
Inits variable controller and adds it to the SciQlop app
r111
Alexandre Leroux
Updates VariableController::createVariable() method...
r166 #include <Data/DataProviderParameters.h>
#include <Data/IDataProvider.h>
#include <Data/IDataSeries.h>
Time widget is now used with the variable createion request
r193 #include <Time/TimeController.h>
Alexandre Leroux
Updates VariableController::createVariable() method...
r166
#include <QDateTime>
Alexandre Leroux
Inits variable controller and adds it to the SciQlop app
r111 #include <QMutex>
#include <QThread>
Q_LOGGING_CATEGORY(LOG_VariableController, "VariableController")
Alexandre Leroux
Updates VariableController::createVariable() method...
r166 namespace {
/// @todo Generates default dataseries, according to the provider passed in parameter. This method
/// will be deleted when the timerange is recovered from SciQlop
Time widget is now used with the variable createion request
r193 std::unique_ptr<IDataSeries> generateDefaultDataSeries(const IDataProvider &provider,
const SqpDateTime &dateTime) noexcept
Alexandre Leroux
Updates VariableController::createVariable() method...
r166 {
Time widget is now used with the variable createion request
r193 auto parameters = DataProviderParameters{dateTime};
Alexandre Leroux
Updates VariableController::createVariable() method...
r166
return provider.retrieveData(parameters);
}
} // namespace
Alexandre Leroux
Inits variable controller and adds it to the SciQlop app
r111 struct VariableController::VariableControllerPrivate {
Alexandre Leroux
Use raw pointer for VariableModel (QObject class)
r159 explicit VariableControllerPrivate(VariableController *parent)
: m_WorkingMutex{}, m_VariableModel{new VariableModel{parent}}
Alexandre Leroux
Inits variable controller and adds it to the SciQlop app
r111 {
}
QMutex m_WorkingMutex;
Alexandre Leroux
Use raw pointer for VariableModel (QObject class)
r159 /// Variable model. The VariableController has the ownership
VariableModel *m_VariableModel;
Time widget is now used with the variable createion request
r193
Correction MR
r195 TimeController *m_TimeController{nullptr};
Alexandre Leroux
Inits variable controller and adds it to the SciQlop app
r111 };
VariableController::VariableController(QObject *parent)
Alexandre Leroux
Use raw pointer for VariableModel (QObject class)
r159 : QObject{parent}, impl{spimpl::make_unique_impl<VariableControllerPrivate>(this)}
Alexandre Leroux
Inits variable controller and adds it to the SciQlop app
r111 {
Add the TimeWidget
r134 qCDebug(LOG_VariableController()) << tr("VariableController construction")
<< QThread::currentThread();
Alexandre Leroux
Inits variable controller and adds it to the SciQlop app
r111 }
VariableController::~VariableController()
{
Add the TimeWidget
r134 qCDebug(LOG_VariableController()) << tr("VariableController destruction")
<< QThread::currentThread();
Alexandre Leroux
Inits variable controller and adds it to the SciQlop app
r111 this->waitForFinish();
}
Alexandre Leroux
Updates VariableController::createVariable() method...
r166 VariableModel *VariableController::variableModel() noexcept
Alexandre Leroux
Adds Variable model in the Variable controller
r113 {
Alexandre Leroux
Updates VariableController::createVariable() method...
r166 return impl->m_VariableModel;
Alexandre Leroux
Adds Variable model in the Variable controller
r113 }
Time widget is now used with the variable createion request
r193 void VariableController::setTimeController(TimeController *timeController) noexcept
{
impl->m_TimeController = timeController;
}
Alexandre Leroux
Updates VariableController::createVariable() method...
r166 void VariableController::createVariable(const QString &name,
std::shared_ptr<IDataProvider> provider) noexcept
Alexandre Leroux
Affects model to the Variable Widget
r152 {
Time widget is now used with the variable createion request
r193 // TORM
// auto dateTime = SqpDateTime{
// // Remarks : we don't use toSecsSinceEpoch() here (method is for Qt 5.8 or above)
// static_cast<double>(QDateTime{QDate{2017, 01, 01}, QTime{12, 00}}.toMSecsSinceEpoch()
// / 1000.),
// static_cast<double>(QDateTime{QDate{2017, 01, 01}, QTime{12, 01}}.toMSecsSinceEpoch())
// / 1000.};
if (!impl->m_TimeController) {
qCCritical(LOG_VariableController())
<< tr("Impossible to create variable: The time controller is null");
return;
}
Alexandre Leroux
Updates VariableController::createVariable() method...
r166 /// @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
Time widget is now used with the variable createion request
r193 if (auto newVariable = impl->m_VariableModel->createVariable(
name, generateDefaultDataSeries(*provider, impl->m_TimeController->dateTime()))) {
Alexandre Leroux
Updates VariableController::createVariable() method...
r166 emit variableCreated(newVariable);
}
Alexandre Leroux
Affects model to the Variable Widget
r152 }
Alexandre Leroux
Inits variable controller and adds it to the SciQlop app
r111 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};
}