diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index f706611..0dccab2 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -54,6 +54,8 @@ MainWindow::MainWindow() // Connect dock outputs connect(plots, &PlotView::timeSelectionChanged, dock, &SpectrogramControls::timeSelectionChanged); + connect(plots, &PlotView::adjustPowerContrast, dock, &SpectrogramControls::adjustPowerContrast); + connect(plots, &PlotView::adjustPowerBias, dock, &SpectrogramControls::adjustPowerBias); connect(plots, &PlotView::zoomIn, dock, &SpectrogramControls::zoomIn); connect(plots, &PlotView::zoomOut, dock, &SpectrogramControls::zoomOut); diff --git a/src/plotview.cpp b/src/plotview.cpp index 914c2c9..fc76fe6 100644 --- a/src/plotview.cpp +++ b/src/plotview.cpp @@ -238,6 +238,28 @@ bool PlotView::viewportEvent(QEvent *event) { return true; } + if (event->type() == QEvent::MouseMove) + { + // Handle scale limit adjustments + // if Ctrl+Alt pressed, OR middle mouse button is pressed + QMouseEvent *mouseEvent = static_cast(event); + if (((QApplication::keyboardModifiers() & Qt::ControlModifier) && + QApplication::keyboardModifiers() & Qt::AltModifier) || + (mouseEvent->buttons() & Qt::MiddleButton)) { + int delta_x = mouseEvent->pos().x() - last_x_clicked; + int delta_y = last_y_clicked - mouseEvent->pos().y(); + last_x_clicked = mouseEvent->pos().x(); + last_y_clicked = mouseEvent->pos().y(); + if (std::abs(delta_x) > 30 || std::abs(delta_y) > 30) + { + return true; + } + emit adjustPowerBias(delta_x); + emit adjustPowerContrast(delta_y); + return true; + } + } + // Handle parent eveents return QGraphicsView::viewportEvent(event); } diff --git a/src/plotview.h b/src/plotview.h index 2b6bfdc..f1e0247 100644 --- a/src/plotview.h +++ b/src/plotview.h @@ -39,6 +39,8 @@ class PlotView : public QGraphicsView, Subscriber signals: void timeSelectionChanged(float time); + void adjustPowerContrast(int amount); + void adjustPowerBias(int amount); void zoomIn(); void zoomOut(); @@ -73,6 +75,8 @@ public slots: int fftSize = 1024; int zoomLevel = 1; + int last_y_clicked = 0; + int last_x_clicked = 0; int powerMin; int powerMax; bool cursorsEnabled; diff --git a/src/spectrogramcontrols.cpp b/src/spectrogramcontrols.cpp index 08007d9..930e8b6 100644 --- a/src/spectrogramcontrols.cpp +++ b/src/spectrogramcontrols.cpp @@ -217,6 +217,22 @@ void SpectrogramControls::timeSelectionChanged(float time) } } +void SpectrogramControls::adjustPowerBias(int amount) +{ + if (powerMaxSlider->value() >= 10 || powerMinSlider->value() <= -140) + { + return; + } + powerMinSlider->setValue(std::max(std::min(powerMinSlider->value() + amount, 10), -140)); + powerMaxSlider->setValue(std::max(std::min(powerMaxSlider->value() + amount, 10), -140)); +} + +void SpectrogramControls::adjustPowerContrast(int amount) +{ + powerMinSlider->setValue(std::max(std::min(powerMinSlider->value() - amount, 10), -140)); + powerMaxSlider->setValue(std::max(std::min(powerMaxSlider->value() + amount, 10), -140)); +} + void SpectrogramControls::zoomIn() { zoomLevelSlider->setValue(zoomLevelSlider->value() + 1); diff --git a/src/spectrogramcontrols.h b/src/spectrogramcontrols.h index abe06d6..639fe2f 100644 --- a/src/spectrogramcontrols.h +++ b/src/spectrogramcontrols.h @@ -42,6 +42,8 @@ class SpectrogramControls : public QDockWidget public slots: void timeSelectionChanged(float time); + void adjustPowerContrast(int amount); + void adjustPowerBias(int amount); void zoomIn(); void zoomOut();