diff --git a/cursor.cpp b/cursor.cpp index 97611b0..cf32067 100644 --- a/cursor.cpp +++ b/cursor.cpp @@ -18,7 +18,6 @@ */ #include -#include #include "cursor.h" Cursor::Cursor(Qt::Orientation orientation, QObject * parent) : QObject::QObject(parent), orientation(orientation) @@ -38,30 +37,27 @@ bool Cursor::pointOverCursor(QPoint point) return range.contains(fromPoint(point)); } -bool Cursor::eventFilter(QObject *obj, QEvent *event) +bool Cursor::mouseEvent(QEvent::Type type, QMouseEvent event) { // Start dragging on left mouse button press, if over a cursor - if (event->type() == QEvent::MouseButtonPress) { - QMouseEvent *mouseEvent = static_cast(event); - if (mouseEvent->button() == Qt::LeftButton) { - if (pointOverCursor(mouseEvent->pos())) { + if (type == QEvent::MouseButtonPress) { + if (event.button() == Qt::LeftButton) { + if (pointOverCursor(event.pos())) { dragging = true; return true; } } // Update current cursor positon if we're dragging - } else if (event->type() == QEvent::MouseMove) { - QMouseEvent *mouseEvent = static_cast(event); + } else if (type == QEvent::MouseMove) { if (dragging) { - cursorPosition = fromPoint(mouseEvent->pos()); + cursorPosition = fromPoint(event.pos()); emit posChanged(); } // Stop dragging on left mouse button release - } else if (event->type() == QEvent::MouseButtonRelease) { - QMouseEvent *mouseEvent = static_cast(event); - if (mouseEvent->button() == Qt::LeftButton && dragging) { + } else if (type == QEvent::MouseButtonRelease) { + if (event.button() == Qt::LeftButton && dragging) { dragging = false; return true; } diff --git a/cursor.h b/cursor.h index 54ab6e8..2ecef70 100644 --- a/cursor.h +++ b/cursor.h @@ -19,6 +19,7 @@ #pragma once +#include #include #include #include "util.h" @@ -31,7 +32,7 @@ public: Cursor(Qt::Orientation orientation, QObject * parent); int pos(); void setPos(int newPos); - bool eventFilter(QObject *obj, QEvent *event); + bool mouseEvent(QEvent::Type type, QMouseEvent event); signals: void posChanged(); diff --git a/cursors.cpp b/cursors.cpp index 4fee166..8356def 100644 --- a/cursors.cpp +++ b/cursors.cpp @@ -18,15 +18,12 @@ */ #include -#include #include "cursors.h" Cursors::Cursors(QObject * parent) : QObject::QObject(parent) { minCursor = new Cursor(Qt::Vertical, this); maxCursor = new Cursor(Qt::Vertical, this); - installEventFilter(minCursor); - installEventFilter(maxCursor); connect(minCursor, &Cursor::posChanged, this, &Cursors::cursorMoved); connect(maxCursor, &Cursor::posChanged, this, &Cursors::cursorMoved); } @@ -40,11 +37,11 @@ void Cursors::cursorMoved() emit cursorsMoved(); } -bool Cursors::eventFilter(QObject *obj, QEvent *event) +bool Cursors::mouseEvent(QEvent::Type type, QMouseEvent event) { - if (minCursor->eventFilter(obj, event)) + if (minCursor->mouseEvent(type, event)) return true; - if (maxCursor->eventFilter(obj, event)) + if (maxCursor->mouseEvent(type, event)) return true; return false; diff --git a/cursors.h b/cursors.h index 30ba3b9..31390cb 100644 --- a/cursors.h +++ b/cursors.h @@ -19,6 +19,7 @@ #pragma once +#include #include #include #include @@ -31,6 +32,7 @@ class Cursors : public QObject public: Cursors(QObject * parent); + bool mouseEvent(QEvent::Type type, QMouseEvent event); void paintFront(QPainter &painter, QRect &rect, range_t sampleRange); range_t selection(); void setSegments(int segments); @@ -42,8 +44,6 @@ public slots: signals: void cursorsMoved(); -protected: - bool eventFilter(QObject *obj, QEvent *event) override; private: bool pointOverCursor(QPoint point, int &cursor); diff --git a/plotview.cpp b/plotview.cpp index d04dfd6..df709e8 100644 --- a/plotview.cpp +++ b/plotview.cpp @@ -36,9 +36,7 @@ PlotView::PlotView(InputSource *input) : cursors(this), tuner(this), viewRange({ mainSampleSource = input; setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn); enableCursors(false); - viewport()->installEventFilter(&cursors); connect(&cursors, SIGNAL(cursorsMoved()), this, SLOT(cursorsMoved())); - viewport()->installEventFilter(&tuner); connect(&tuner, &Tuner::tunerMoved, this, &PlotView::tunerMoved); spectrogramPlot = new SpectrogramPlot(mainSampleSource); @@ -49,6 +47,7 @@ PlotView::PlotView(InputSource *input) : cursors(this), tuner(this), viewRange({ addPlot(iqPlot); addPlot(quadDemodPlot); + viewport()->installEventFilter(this); mainSampleSource->subscribe(this); } @@ -129,6 +128,13 @@ bool PlotView::eventFilter(QObject * obj, QEvent *event) event->type() == QEvent::MouseButtonRelease) { QMouseEvent *mouseEvent = static_cast(event); + + if (cursors.mouseEvent(event->type(), *mouseEvent)) + return true; + + if (tuner.mouseEvent(event->type(), *mouseEvent)) + return true; + int plotY = -verticalScrollBar()->value(); for (auto&& plot : plots) { bool result = plot->mouseEvent( diff --git a/tuner.cpp b/tuner.cpp index 397fdfb..fe33a9a 100644 --- a/tuner.cpp +++ b/tuner.cpp @@ -54,13 +54,13 @@ int Tuner::deviation() return _deviation; } -bool Tuner::eventFilter(QObject *obj, QEvent *event) +bool Tuner::mouseEvent(QEvent::Type type, QMouseEvent event) { - if (minCursor->eventFilter(obj, event)) + if (minCursor->mouseEvent(type, event)) return true; - if (cfCursor->eventFilter(obj, event)) + if (cfCursor->mouseEvent(type, event)) return true; - if (maxCursor->eventFilter(obj, event)) + if (maxCursor->mouseEvent(type, event)) return true; return false; diff --git a/tuner.h b/tuner.h index e98ec13..5ed9254 100644 --- a/tuner.h +++ b/tuner.h @@ -19,6 +19,7 @@ #pragma once +#include #include #include #include @@ -31,9 +32,10 @@ class Tuner : public QObject public: Tuner(QObject * parent); - void paintFront(QPainter &painter, QRect &rect, range_t sampleRange); int centre(); int deviation(); + bool mouseEvent(QEvent::Type, QMouseEvent event); + void paintFront(QPainter &painter, QRect &rect, range_t sampleRange); void setCentre(int centre); void setDeviation(int dev); @@ -43,8 +45,7 @@ public slots: signals: void tunerMoved(); -protected: - bool eventFilter(QObject *obj, QEvent *event) override; +private: void updateCursors(); Cursor *minCursor;