@@ -67,7 +67,7 private slots: | |||
|
67 | 67 | void onGraphMenuRequested(const QPoint &pos) noexcept; |
|
68 | 68 | |
|
69 | 69 | /// Rescale the X axe to range parameter |
|
70 | void onRangeChanged(const QCPRange &t1, const QCPRange &t2); | |
|
70 | void processRangeChange(); | |
|
71 | 71 | |
|
72 | 72 | /// Slot called when a mouse wheel was made, to perform some processing before the zoom is done |
|
73 | 73 | void onMouseWheel(QWheelEvent *event) noexcept; |
@@ -15,6 +15,9 Q_LOGGING_CATEGORY(LOG_VisualizationGraphWidget, "VisualizationGraphWidget") | |||
|
15 | 15 | |
|
16 | 16 | namespace { |
|
17 | 17 | |
|
18 | /// Timeout from which the mouse wheel is considered completed (in ms) | |
|
19 | const auto MOUSE_WHEEL_TIMEOUT = 250; | |
|
20 | ||
|
18 | 21 | /// Key pressed to enable zoom on horizontal axis |
|
19 | 22 | const auto HORIZONTAL_ZOOM_MODIFIER = Qt::NoModifier; |
|
20 | 23 | |
@@ -25,7 +28,11 const auto VERTICAL_ZOOM_MODIFIER = Qt::ControlModifier; | |||
|
25 | 28 | |
|
26 | 29 | struct VisualizationGraphWidget::VisualizationGraphWidgetPrivate { |
|
27 | 30 | |
|
28 |
explicit VisualizationGraphWidgetPrivate() |
|
|
31 | explicit VisualizationGraphWidgetPrivate() | |
|
32 | : m_DoSynchronize{true}, m_IsCalibration{false}, m_RefRange{}, m_MouseWheelTimer{} | |
|
33 | { | |
|
34 | m_MouseWheelTimer.setSingleShot(true); | |
|
35 | } | |
|
29 | 36 | |
|
30 | 37 | |
|
31 | 38 | // Return the operation when range changed |
@@ -36,6 +43,8 struct VisualizationGraphWidget::VisualizationGraphWidgetPrivate { | |||
|
36 | 43 | |
|
37 | 44 | bool m_DoSynchronize; |
|
38 | 45 | bool m_IsCalibration; |
|
46 | QCPRange m_RefRange; | |
|
47 | QTimer m_MouseWheelTimer; | |
|
39 | 48 | }; |
|
40 | 49 | |
|
41 | 50 | VisualizationGraphWidget::VisualizationGraphWidget(const QString &name, QWidget *parent) |
@@ -61,9 +70,10 VisualizationGraphWidget::VisualizationGraphWidget(const QString &name, QWidget | |||
|
61 | 70 | connect(ui->widget, &QCustomPlot::mouseRelease, this, |
|
62 | 71 | &VisualizationGraphWidget::onMouseRelease); |
|
63 | 72 | connect(ui->widget, &QCustomPlot::mouseWheel, this, &VisualizationGraphWidget::onMouseWheel); |
|
64 | connect(ui->widget->xAxis, static_cast<void (QCPAxis::*)(const QCPRange &, const QCPRange &)>( | |
|
65 | &QCPAxis::rangeChanged), | |
|
66 | this, &VisualizationGraphWidget::onRangeChanged, Qt::DirectConnection); | |
|
73 | ||
|
74 | // Connects mouse wheel timer | |
|
75 | connect(&impl->m_MouseWheelTimer, &QTimer::timeout, this, | |
|
76 | &VisualizationGraphWidget::processRangeChange); | |
|
67 | 77 | |
|
68 | 78 | // Activates menu when right clicking on the graph |
|
69 | 79 | ui->widget->setContextMenuPolicy(Qt::CustomContextMenu); |
@@ -218,14 +228,17 void VisualizationGraphWidget::onGraphMenuRequested(const QPoint &pos) noexcept | |||
|
218 | 228 | } |
|
219 | 229 | } |
|
220 | 230 | |
|
221 |
void VisualizationGraphWidget:: |
|
|
231 | void VisualizationGraphWidget::processRangeChange() | |
|
222 | 232 | { |
|
223 |
qCInfo(LOG_VisualizationGraphWidget()) << tr("VisualizationGraphWidget:: |
|
|
233 | qCInfo(LOG_VisualizationGraphWidget()) << tr("VisualizationGraphWidget::processRangeChange") | |
|
224 | 234 | << QThread::currentThread()->objectName(); |
|
225 | 235 | |
|
226 | auto dateTimeRange = SqpDateTime{t1.lower, t1.upper}; | |
|
236 | auto oldRange = impl->m_RefRange; | |
|
237 | auto newRange = ui->widget->xAxis->range(); | |
|
227 | 238 | |
|
228 | auto zoomType = impl->getZoomType(t1, t2); | |
|
239 | auto dateTimeRange = SqpDateTime{newRange.lower, newRange.upper}; | |
|
240 | ||
|
241 | auto zoomType = impl->getZoomType(newRange, impl->m_RefRange); | |
|
229 | 242 | for (auto it = impl->m_VariableToPlotMultiMap.cbegin(); |
|
230 | 243 | it != impl->m_VariableToPlotMultiMap.cend(); ++it) { |
|
231 | 244 | |
@@ -310,16 +323,20 void VisualizationGraphWidget::onRangeChanged(const QCPRange &t1, const QCPRange | |||
|
310 | 323 | } |
|
311 | 324 | |
|
312 | 325 | if (impl->m_DoSynchronize && !impl->m_IsCalibration) { |
|
313 |
auto oldDateTime = SqpDateTime{ |
|
|
326 | auto oldDateTime = SqpDateTime{oldRange.lower, oldRange.upper}; | |
|
314 | 327 | qCDebug(LOG_VisualizationGraphWidget()) |
|
315 | 328 | << tr("TORM: VisualizationGraphWidget::Synchronize notify !!") |
|
316 | 329 | << QThread::currentThread()->objectName(); |
|
317 | 330 | emit synchronize(dateTimeRange, oldDateTime, zoomType); |
|
318 | 331 | } |
|
332 | ||
|
333 | impl->m_RefRange = newRange; | |
|
319 | 334 | } |
|
320 | 335 | |
|
321 | 336 | void VisualizationGraphWidget::onMouseWheel(QWheelEvent *event) noexcept |
|
322 | 337 | { |
|
338 | impl->m_MouseWheelTimer.start(MOUSE_WHEEL_TIMEOUT); | |
|
339 | ||
|
323 | 340 | auto zoomOrientations = QFlags<Qt::Orientation>{}; |
|
324 | 341 | |
|
325 | 342 | // Lambda that enables a zoom orientation if the key modifier related to this orientation |
@@ -338,12 +355,14 void VisualizationGraphWidget::onMouseWheel(QWheelEvent *event) noexcept | |||
|
338 | 355 | |
|
339 | 356 | void VisualizationGraphWidget::onMousePress(QMouseEvent *event) noexcept |
|
340 | 357 | { |
|
358 | impl->m_RefRange = ui->widget->xAxis->range(); | |
|
341 | 359 | impl->m_IsCalibration = event->modifiers().testFlag(Qt::ControlModifier); |
|
342 | 360 | } |
|
343 | 361 | |
|
344 | 362 | void VisualizationGraphWidget::onMouseRelease(QMouseEvent *event) noexcept |
|
345 | 363 | { |
|
346 | 364 | impl->m_IsCalibration = false; |
|
365 | processRangeChange(); | |
|
347 | 366 | } |
|
348 | 367 | |
|
349 | 368 | void VisualizationGraphWidget::onDataCacheVariableUpdated() |
General Comments 0
You need to be logged in to leave comments.
Login now