From 0276572e87fb41ce552288c313f3aa2f21d5cfda Mon Sep 17 00:00:00 2001 From: Tammo Jan Dijkema Date: Thu, 7 Oct 2021 09:51:27 +0200 Subject: [PATCH 1/3] Adjust power sliders by dragging on the plotview --- src/mainwindow.cpp | 2 ++ src/plotview.cpp | 16 ++++++++++++++++ src/plotview.h | 4 ++++ src/spectrogramcontrols.cpp | 10 ++++++++++ src/spectrogramcontrols.h | 2 ++ 5 files changed, 34 insertions(+) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index f706611..fb616e4 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::adjustPowerMax, dock, &SpectrogramControls::adjustPowerMax); + connect(plots, &PlotView::adjustPowerMin, dock, &SpectrogramControls::adjustPowerMin); 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..404ab9e 100644 --- a/src/plotview.cpp +++ b/src/plotview.cpp @@ -238,6 +238,22 @@ bool PlotView::viewportEvent(QEvent *event) { return true; } + if (event->type() == QEvent::MouseMove && (QApplication::keyboardModifiers() & Qt::ControlModifier)) + { + QMouseEvent *mouseEvent = static_cast(event); + 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 adjustPowerMin(delta_x); + emit adjustPowerMax(delta_y); + return true; + } + // Handle parent eveents return QGraphicsView::viewportEvent(event); } diff --git a/src/plotview.h b/src/plotview.h index 2b6bfdc..f52423f 100644 --- a/src/plotview.h +++ b/src/plotview.h @@ -39,6 +39,8 @@ class PlotView : public QGraphicsView, Subscriber signals: void timeSelectionChanged(float time); + void adjustPowerMax(int amount); + void adjustPowerMin(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..3615217 100644 --- a/src/spectrogramcontrols.cpp +++ b/src/spectrogramcontrols.cpp @@ -217,6 +217,16 @@ void SpectrogramControls::timeSelectionChanged(float time) } } +void SpectrogramControls::adjustPowerMin(int amount) +{ + powerMinSlider->setValue(std::max(std::min(powerMinSlider->value() + amount, 10), -140)); +} + +void SpectrogramControls::adjustPowerMax(int amount) +{ + 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..5e16471 100644 --- a/src/spectrogramcontrols.h +++ b/src/spectrogramcontrols.h @@ -42,6 +42,8 @@ class SpectrogramControls : public QDockWidget public slots: void timeSelectionChanged(float time); + void adjustPowerMax(int amount); + void adjustPowerMin(int amount); void zoomIn(); void zoomOut(); From 5e0fa6f5414bfb294c003b80870d49994d14912f Mon Sep 17 00:00:00 2001 From: Tammo Jan Dijkema Date: Thu, 7 Oct 2021 10:29:18 +0200 Subject: [PATCH 2/3] Adjust contrast and bias by dragging --- src/mainwindow.cpp | 4 ++-- src/plotview.cpp | 4 ++-- src/plotview.h | 4 ++-- src/spectrogramcontrols.cpp | 10 ++++++++-- src/spectrogramcontrols.h | 4 ++-- 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index fb616e4..0dccab2 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -54,8 +54,8 @@ MainWindow::MainWindow() // Connect dock outputs connect(plots, &PlotView::timeSelectionChanged, dock, &SpectrogramControls::timeSelectionChanged); - connect(plots, &PlotView::adjustPowerMax, dock, &SpectrogramControls::adjustPowerMax); - connect(plots, &PlotView::adjustPowerMin, dock, &SpectrogramControls::adjustPowerMin); + 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 404ab9e..6273d24 100644 --- a/src/plotview.cpp +++ b/src/plotview.cpp @@ -249,8 +249,8 @@ bool PlotView::viewportEvent(QEvent *event) { { return true; } - emit adjustPowerMin(delta_x); - emit adjustPowerMax(delta_y); + emit adjustPowerBias(delta_x); + emit adjustPowerContrast(delta_y); return true; } diff --git a/src/plotview.h b/src/plotview.h index f52423f..f1e0247 100644 --- a/src/plotview.h +++ b/src/plotview.h @@ -39,8 +39,8 @@ class PlotView : public QGraphicsView, Subscriber signals: void timeSelectionChanged(float time); - void adjustPowerMax(int amount); - void adjustPowerMin(int amount); + void adjustPowerContrast(int amount); + void adjustPowerBias(int amount); void zoomIn(); void zoomOut(); diff --git a/src/spectrogramcontrols.cpp b/src/spectrogramcontrols.cpp index 3615217..930e8b6 100644 --- a/src/spectrogramcontrols.cpp +++ b/src/spectrogramcontrols.cpp @@ -217,13 +217,19 @@ void SpectrogramControls::timeSelectionChanged(float time) } } -void SpectrogramControls::adjustPowerMin(int amount) +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::adjustPowerMax(int amount) +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)); } diff --git a/src/spectrogramcontrols.h b/src/spectrogramcontrols.h index 5e16471..639fe2f 100644 --- a/src/spectrogramcontrols.h +++ b/src/spectrogramcontrols.h @@ -42,8 +42,8 @@ class SpectrogramControls : public QDockWidget public slots: void timeSelectionChanged(float time); - void adjustPowerMax(int amount); - void adjustPowerMin(int amount); + void adjustPowerContrast(int amount); + void adjustPowerBias(int amount); void zoomIn(); void zoomOut(); From ad01405270d3d846e1add7da59f549096dd70fe1 Mon Sep 17 00:00:00 2001 From: Tammo Jan Dijkema Date: Thu, 7 Oct 2021 11:23:06 +0200 Subject: [PATCH 3/3] Change modifier key to Ctrl+Alt, or middle mouse button --- src/plotview.cpp | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/plotview.cpp b/src/plotview.cpp index 6273d24..fc76fe6 100644 --- a/src/plotview.cpp +++ b/src/plotview.cpp @@ -238,20 +238,26 @@ bool PlotView::viewportEvent(QEvent *event) { return true; } - if (event->type() == QEvent::MouseMove && (QApplication::keyboardModifiers() & Qt::ControlModifier)) + if (event->type() == QEvent::MouseMove) { + // Handle scale limit adjustments + // if Ctrl+Alt pressed, OR middle mouse button is pressed QMouseEvent *mouseEvent = static_cast(event); - 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) - { + 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; } - emit adjustPowerBias(delta_x); - emit adjustPowerContrast(delta_y); - return true; } // Handle parent eveents