diff --git a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SVConnections.h b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SVConnections.h index 6a75cb238266c0bd6104798caaa963efb734cb81..07ee7c366ba5dccb90d595177c532e6b12df9ab6 100644 --- a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SVConnections.h +++ b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SVConnections.h @@ -97,6 +97,8 @@ public slots: void online_help_slot(); private: + /// Event filter for mouse wheel capture + bool eventFilter(QObject *object, QEvent *event); Ui_SpectrumViewer* sv_ui; SpectrumView* sv_main_window; diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/SVConnections.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/SVConnections.cpp index c85067a4d281836f31ffcf745746d75de7a04dfd..0523d1559a029a457003288243eac0a39f21ba56 100644 --- a/Code/Mantid/MantidQt/SpectrumViewer/src/SVConnections.cpp +++ b/Code/Mantid/MantidQt/SpectrumViewer/src/SVConnections.cpp @@ -73,17 +73,22 @@ SVConnections::SVConnections( Ui_SpectrumViewer* ui, sv_ui->left_right_splitter->setSizes( horiz_sizes ); sv_ui->imageHorizontalScrollBar->setFocusPolicy( Qt::StrongFocus ); + sv_ui->imageHorizontalScrollBar->setMouseTracking(true); sv_ui->imageHorizontalScrollBar->setMinimum(20); sv_ui->imageHorizontalScrollBar->setMaximum(2000); sv_ui->imageHorizontalScrollBar->setPageStep(30); sv_ui->imageHorizontalScrollBar->setSingleStep(30/2); sv_ui->imageVerticalScrollBar->setFocusPolicy( Qt::StrongFocus ); + sv_ui->imageVerticalScrollBar->setMouseTracking(true); sv_ui->imageVerticalScrollBar->setMinimum(0); sv_ui->imageVerticalScrollBar->setMaximum(10000000); sv_ui->imageVerticalScrollBar->setPageStep(500); sv_ui->imageVerticalScrollBar->setSingleStep(500/2); + // for forwarding scroll wheel events + sv_ui->spectrumPlot->canvas()->installEventFilter(this); + sv_ui->action_Hscroll->setCheckable(true); sv_ui->action_Hscroll->setChecked(false); sv_ui->imageHorizontalScrollBar->hide(); @@ -272,6 +277,33 @@ SVConnections::~SVConnections() delete color_group; } +/** + * @param object Object that the event came from. + * @param event The event being filtered. + * @return true if the event was consumed. + */ +bool SVConnections::eventFilter(QObject *object, QEvent *event) +{ + UNUSED_ARG(object); + + if (event->type() == QEvent::Wheel) + { + QWheelEvent *wheelEvent = dynamic_cast<QWheelEvent *>(event); + if (wheelEvent) + { + if (wheelEvent->orientation() == Qt::Orientation::Vertical) + { + return sv_ui->imageVerticalScrollBar->event(wheelEvent); + } + else if (wheelEvent->orientation() == Qt::Orientation::Horizontal) + { + return sv_ui->imageHorizontalScrollBar->event(wheelEvent); + } + } + } + return false; +} + void SVConnections::close_viewer() {