From 5673fc6ded123aa96c8119ba7a77db0341866119 2017-08-16 12:56:05 From: mperrinel Date: 2017-08-16 12:56:05 Subject: [PATCH] Initialisation of the graph range at creation in a new graphe, or inside a graph or in a new zone --- diff --git a/gui/include/Visualization/VisualizationGraphHelper.h b/gui/include/Visualization/VisualizationGraphHelper.h index c0d4b3d..b721858 100644 --- a/gui/include/Visualization/VisualizationGraphHelper.h +++ b/gui/include/Visualization/VisualizationGraphHelper.h @@ -30,6 +30,8 @@ struct VisualizationGraphHelper { */ static QVector create(std::shared_ptr variable, QCustomPlot &plot) noexcept; + static QVector createV2(std::shared_ptr variable, + QCustomPlot &plot) noexcept; static void updateData(QVector plotableVect, std::shared_ptr dataSeries, const SqpRange &dateTime); diff --git a/gui/include/Visualization/VisualizationGraphWidget.h b/gui/include/Visualization/VisualizationGraphWidget.h index a39d5fd..d9a03ac 100644 --- a/gui/include/Visualization/VisualizationGraphWidget.h +++ b/gui/include/Visualization/VisualizationGraphWidget.h @@ -30,12 +30,13 @@ public: /// If acquisition isn't enable, requestDataLoading signal cannot be emit void enableAcquisition(bool enable); - void addVariable(std::shared_ptr variable); - void addVariableUsingGraph(std::shared_ptr variable); + void addVariable(std::shared_ptr variable, SqpRange range); + /// Removes a variable from the graph void removeVariable(std::shared_ptr variable) noexcept; void setRange(std::shared_ptr variable, const SqpRange &range); + void setYRange(const SqpRange &range); SqpRange graphRange() const noexcept; void setGraphRange(const SqpRange &range); diff --git a/gui/src/Visualization/VisualizationGraphHelper.cpp b/gui/src/Visualization/VisualizationGraphHelper.cpp index a67534c..17611c9 100644 --- a/gui/src/Visualization/VisualizationGraphHelper.cpp +++ b/gui/src/Visualization/VisualizationGraphHelper.cpp @@ -79,6 +79,29 @@ void updateScalarData(QCPAbstractPlottable *component, std::shared_ptr scalarSeries, + QCustomPlot &plot) +{ + auto component = plot.addGraph(); + + if (component) { + // Axes properties + /// @todo : for the moment, no control is performed on the axes: the units and the tickers + /// are fixed for the default x-axis and y-axis of the plot, and according to the new graph + + auto setAxisProperties = [](auto axis, const auto &unit) { + // label (unit name) + axis->setLabel(unit.m_Name); + + // ticker (depending on the type of unit) + axis->setTicker(axisTicker(unit.m_TimeUnit)); + }; + setAxisProperties(plot.xAxis, scalarSeries->xAxisUnit()); + setAxisProperties(plot.yAxis, scalarSeries->valuesUnit()); + } + return component; +} + QCPAbstractPlottable *createScalarSeriesComponent(std::shared_ptr scalarSeries, QCustomPlot &plot, const SqpRange &dateTime) { @@ -119,6 +142,30 @@ QCPAbstractPlottable *createScalarSeriesComponent(std::shared_ptr } // namespace +QVector +VisualizationGraphHelper::createV2(std::shared_ptr variable, QCustomPlot &plot) noexcept +{ + auto result = QVector{}; + + if (variable) { + // Gets the data series of the variable to call the creation of the right components + // according to its type + if (auto scalarSeries = std::dynamic_pointer_cast(variable->dataSeries())) { + result.append(createScalarSeriesComponentV2(scalarSeries, plot)); + } + else { + qCDebug(LOG_VisualizationGraphHelper()) + << QObject::tr("Can't create graph plottables : unmanaged data series type"); + } + } + else { + qCDebug(LOG_VisualizationGraphHelper()) + << QObject::tr("Can't create graph plottables : the variable is null"); + } + + return result; +} + QVector VisualizationGraphHelper::create(std::shared_ptr variable, QCustomPlot &plot) noexcept { diff --git a/gui/src/Visualization/VisualizationGraphWidget.cpp b/gui/src/Visualization/VisualizationGraphWidget.cpp index 0756c86..7d2935f 100644 --- a/gui/src/Visualization/VisualizationGraphWidget.cpp +++ b/gui/src/Visualization/VisualizationGraphWidget.cpp @@ -93,13 +93,10 @@ void VisualizationGraphWidget::enableAcquisition(bool enable) impl->m_DoAcquisition = enable; } -void VisualizationGraphWidget::addVariable(std::shared_ptr variable) +void VisualizationGraphWidget::addVariable(std::shared_ptr variable, SqpRange range) { - auto calibrationState = impl->m_IsCalibration; - impl->m_IsCalibration = true; // Uses delegate to create the qcpplot components according to the variable - auto createdPlottables = VisualizationGraphHelper::create(variable, *ui->widget); - impl->m_IsCalibration = calibrationState; + auto createdPlottables = VisualizationGraphHelper::createV2(variable, *ui->widget); for (auto createdPlottable : qAsConst(createdPlottables)) { impl->m_VariableToPlotMultiMap.insert({variable, createdPlottable}); @@ -107,18 +104,16 @@ void VisualizationGraphWidget::addVariable(std::shared_ptr variable) connect(variable.get(), SIGNAL(updated()), this, SLOT(onDataCacheVariableUpdated())); - emit variableAdded(variable); -} -void VisualizationGraphWidget::addVariableUsingGraph(std::shared_ptr variable) -{ - // Uses delegate to create the qcpplot components according to the variable - this->addVariable(variable); + auto varRange = variable->range(); - // Request range for the variable - auto graphRange = ui->widget->xAxis->range(); + this->enableAcquisition(false); + this->setGraphRange(range); + this->enableAcquisition(true); - emit requestDataLoading(QVector >() << variable, - SqpRange{graphRange.lower, graphRange.upper}, variable->range(), false); + emit requestDataLoading(QVector >() << variable, range, varRange, + false); + + emit variableAdded(variable); } void VisualizationGraphWidget::removeVariable(std::shared_ptr variable) noexcept @@ -147,6 +142,11 @@ void VisualizationGraphWidget::setRange(std::shared_ptr variable, cons ui->widget->replot(); } +void VisualizationGraphWidget::setYRange(const SqpRange &range) +{ + ui->widget->yAxis->setRange(range.m_TStart, range.m_TEnd); +} + SqpRange VisualizationGraphWidget::graphRange() const noexcept { auto graphRange = ui->widget->xAxis->range(); diff --git a/gui/src/Visualization/VisualizationZoneWidget.cpp b/gui/src/Visualization/VisualizationZoneWidget.cpp index 8e5d60e..8a5ee5e 100644 --- a/gui/src/Visualization/VisualizationZoneWidget.cpp +++ b/gui/src/Visualization/VisualizationZoneWidget.cpp @@ -6,6 +6,7 @@ #include "ui_VisualizationZoneWidget.h" #include +#include #include #include @@ -168,9 +169,27 @@ VisualizationGraphWidget *VisualizationZoneWidget::createGraph(std::shared_ptrvisualizationZoneFrame->layout(); + if (layout->count() > 0) { + // Case of a new graph in a existant zone + if (auto visualizationGraphWidget + = dynamic_cast(layout->itemAt(0)->widget())) { + range = visualizationGraphWidget->graphRange(); + } + } + else { + // Case of a new graph as the first of the zone + range = variable->range(); + } + this->addGraph(graphWidget); - graphWidget->addVariable(variable); + graphWidget->addVariable(variable, range); + // TODO: get y using variable range + graphWidget->setYRange(SqpRange{-10, 10}); return graphWidget; } diff --git a/gui/src/Visualization/operations/GenerateVariableMenuOperation.cpp b/gui/src/Visualization/operations/GenerateVariableMenuOperation.cpp index 41592e1..f9f4d37 100644 --- a/gui/src/Visualization/operations/GenerateVariableMenuOperation.cpp +++ b/gui/src/Visualization/operations/GenerateVariableMenuOperation.cpp @@ -155,6 +155,7 @@ void GenerateVariableMenuOperation::visitEnter(VisualizationZoneWidget *zoneWidg void GenerateVariableMenuOperation::visitLeave(VisualizationZoneWidget *zoneWidget) { + qCCritical(LOG_GenerateVariableMenuOperation(), "Open in a new graph DETECTED !!"); if (zoneWidget) { // 'Plot' menu impl->visitNodeLeavePlot( @@ -181,7 +182,7 @@ void GenerateVariableMenuOperation::visit(VisualizationGraphWidget *graphWidget) impl->visitLeafPlot(*graphWidget, QObject::tr("Open in %1").arg(graphWidget->name()), [ varW = std::weak_ptr{impl->m_Variable}, graphWidget ]() { if (auto var = varW.lock()) { - graphWidget->addVariableUsingGraph(var); + graphWidget->addVariable(var, graphWidget->graphRange()); } }); diff --git a/plugins/mockplugin/src/CosinusProvider.cpp b/plugins/mockplugin/src/CosinusProvider.cpp index ab3b4c0..cbf2073 100644 --- a/plugins/mockplugin/src/CosinusProvider.cpp +++ b/plugins/mockplugin/src/CosinusProvider.cpp @@ -73,7 +73,7 @@ void CosinusProvider::requestDataLoading(QUuid acqIdentifier, { // TODO: Add Mutex m_VariableToEnableProvider[acqIdentifier] = true; - qCDebug(LOG_CosinusProvider()) << "CosinusProvider::requestDataLoading" + qCDebug(LOG_CosinusProvider()) << "TORM: CosinusProvider::requestDataLoading" << QThread::currentThread()->objectName(); // NOTE: Try to use multithread if possible const auto times = parameters.m_Times; @@ -81,7 +81,7 @@ void CosinusProvider::requestDataLoading(QUuid acqIdentifier, for (const auto &dateTime : qAsConst(times)) { if (m_VariableToEnableProvider[acqIdentifier]) { auto scalarSeries = this->retrieveData(acqIdentifier, dateTime); - qCCritical(LOG_CosinusProvider()) << "CosinusProvider::dataProvided"; + qCDebug(LOG_CosinusProvider()) << "TORM: CosinusProvider::dataProvided"; emit dataProvided(acqIdentifier, scalarSeries, dateTime); } }