diff --git a/gui/include/Visualization/VisualizationGraphWidget.h b/gui/include/Visualization/VisualizationGraphWidget.h index 5e0d037..28673a8 100644 --- a/gui/include/Visualization/VisualizationGraphWidget.h +++ b/gui/include/Visualization/VisualizationGraphWidget.h @@ -28,6 +28,7 @@ public: virtual ~VisualizationGraphWidget(); void addVariable(std::shared_ptr variable); + void addVariableUsingGraph(std::shared_ptr variable); /// Removes a variable from the graph void removeVariable(std::shared_ptr variable) noexcept; @@ -52,7 +53,7 @@ private slots: /// Slot called when right clicking on the graph (displays a menu) void onGraphMenuRequested(const QPoint &pos) noexcept; - void onRangeChanged(const QCPRange &t1, const QCPRange &t2); + void onRangeChanged(const QCPRange &t1); /// Slot called when a mouse wheel was made, to perform some processing before the zoom is done void onMouseWheel(QWheelEvent *event) noexcept; diff --git a/gui/src/Visualization/VisualizationGraphHelper.cpp b/gui/src/Visualization/VisualizationGraphHelper.cpp index da5e732..0d094f7 100644 --- a/gui/src/Visualization/VisualizationGraphHelper.cpp +++ b/gui/src/Visualization/VisualizationGraphHelper.cpp @@ -63,6 +63,11 @@ void updateScalarData(QCPAbstractPlottable *component, ScalarSeries &scalarSerie << xValue.count(); qcpGraph->setData(xValue, vValue); + + // Display all data + // component->parentPlot()->xAxis->setRange(dateTime.m_TStart, dateTime.m_TEnd); + component->rescaleAxes(); + component->parentPlot()->replot(); } else { /// @todo DEBUG @@ -97,7 +102,6 @@ QCPAbstractPlottable *createScalarSeriesComponent(ScalarSeries &scalarSeries, QC // Display all data component->rescaleAxes(); - plot.replot(); } else { diff --git a/gui/src/Visualization/VisualizationGraphWidget.cpp b/gui/src/Visualization/VisualizationGraphWidget.cpp index 059beb8..c8f4ce9 100644 --- a/gui/src/Visualization/VisualizationGraphWidget.cpp +++ b/gui/src/Visualization/VisualizationGraphWidget.cpp @@ -49,9 +49,9 @@ VisualizationGraphWidget::VisualizationGraphWidget(const QString &name, QWidget ui->widget->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom); ui->widget->axisRect()->setRangeDrag(Qt::Horizontal); connect(ui->widget, &QCustomPlot::mouseWheel, this, &VisualizationGraphWidget::onMouseWheel); - connect(ui->widget->xAxis, static_cast( - &QCPAxis::rangeChanged), - this, &VisualizationGraphWidget::onRangeChanged); + connect(ui->widget->xAxis, + static_cast(&QCPAxis::rangeChanged), this, + &VisualizationGraphWidget::onRangeChanged); // Activates menu when right clicking on the graph ui->widget->setContextMenuPolicy(Qt::CustomContextMenu); @@ -80,6 +80,34 @@ void VisualizationGraphWidget::addVariable(std::shared_ptr variable) connect(variable.get(), SIGNAL(updated()), this, SLOT(onDataCacheVariableUpdated())); } +void VisualizationGraphWidget::addVariableUsingGraph(std::shared_ptr variable) +{ + + // when adding a variable, we need to set its time range to the current graph range + auto grapheRange = ui->widget->xAxis->range(); + auto dateTime = SqpDateTime{grapheRange.lower, grapheRange.upper}; + variable->setDateTime(dateTime); + + auto variableDateTimeWithTolerance = dateTime; + + // add 10% tolerance for each side + auto tolerance = 0.1 * (dateTime.m_TEnd - dateTime.m_TStart); + variableDateTimeWithTolerance.m_TStart -= tolerance; + variableDateTimeWithTolerance.m_TEnd += tolerance; + + // Uses delegate to create the qcpplot components according to the variable + auto createdPlottables = VisualizationGraphHelper::create(variable, *ui->widget); + + for (auto createdPlottable : qAsConst(createdPlottables)) { + impl->m_VariableToPlotMultiMap.insert({variable, createdPlottable}); + } + + connect(variable.get(), SIGNAL(updated()), this, SLOT(onDataCacheVariableUpdated())); + + // CHangement detected, we need to ask controller to request data loading + emit requestDataLoading(variable, variableDateTimeWithTolerance); +} + void VisualizationGraphWidget::removeVariable(std::shared_ptr variable) noexcept { // Each component associated to the variable : @@ -136,16 +164,15 @@ void VisualizationGraphWidget::onGraphMenuRequested(const QPoint &pos) noexcept } } -void VisualizationGraphWidget::onRangeChanged(const QCPRange &t1, const QCPRange &t2) +void VisualizationGraphWidget::onRangeChanged(const QCPRange &t1) { - qCDebug(LOG_VisualizationGraphWidget()) << tr("VisualizationGraphWidget::onRangeChanged"); for (auto it = impl->m_VariableToPlotMultiMap.cbegin(); it != impl->m_VariableToPlotMultiMap.cend(); ++it) { auto variable = it->first; - auto dateTime = SqpDateTime{t2.lower, t2.upper}; + auto dateTime = SqpDateTime{t1.lower, t1.upper}; if (!variable->contains(dateTime)) { diff --git a/gui/src/Visualization/operations/GenerateVariableMenuOperation.cpp b/gui/src/Visualization/operations/GenerateVariableMenuOperation.cpp index 37f1955..dec20d8 100644 --- a/gui/src/Visualization/operations/GenerateVariableMenuOperation.cpp +++ b/gui/src/Visualization/operations/GenerateVariableMenuOperation.cpp @@ -137,7 +137,7 @@ void GenerateVariableMenuOperation::visit(VisualizationGraphWidget *graphWidget) if (graphWidget) { impl->visitLeaf( *graphWidget, QObject::tr("Open in %1").arg(graphWidget->name()), - [ var = impl->m_Variable, graphWidget ]() { graphWidget->addVariable(var); }); + [ var = impl->m_Variable, graphWidget ]() { graphWidget->addVariableUsingGraph(var); }); } else { qCCritical(LOG_GenerateVariableMenuOperation(),