From 50127b40038222e16a483be4d06ccb7f737fb872 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Fri, 24 Jun 2022 23:37:22 +0100 Subject: [PATCH] SpectrumGUI: Add combo box to allow center frequency to be set to annotation marker --- sdrgui/gui/glspectrumgui.cpp | 54 +++++++++++++++++++++++++ sdrgui/gui/glspectrumgui.h | 7 ++++ sdrgui/gui/glspectrumgui.ui | 24 +++++++++++ sdrgui/mainspectrum/mainspectrumgui.cpp | 3 +- 4 files changed, 87 insertions(+), 1 deletion(-) diff --git a/sdrgui/gui/glspectrumgui.cpp b/sdrgui/gui/glspectrumgui.cpp index 91cc244fa..4a0b3ab94 100644 --- a/sdrgui/gui/glspectrumgui.cpp +++ b/sdrgui/gui/glspectrumgui.cpp @@ -222,6 +222,7 @@ void GLSpectrumGUI::displaySettings() ui->linscale->setChecked(m_settings.m_linear); setAveragingToolitp(); ui->calibration->setChecked(m_settings.m_useCalibration); + displayGotoMarkers(); ui->fftWindow->blockSignals(false); ui->averaging->blockSignals(false); @@ -230,6 +231,38 @@ void GLSpectrumGUI::displaySettings() blockApplySettings(false); } +void GLSpectrumGUI::displayGotoMarkers() +{ + ui->gotoMarker->clear(); + ui->gotoMarker->addItem("Go to..."); + for (auto marker : m_settings.m_annoationMarkers) + { + if (marker.m_show != SpectrumAnnotationMarker::Hidden) + { + qint64 freq = marker.m_startFrequency + marker.m_bandwidth/2; + QString freqString = displayScaled(freq, 'f', 3, true); + ui->gotoMarker->addItem(QString("%1 - %2").arg(marker.m_text).arg(freqString)); + } + } + ui->gotoMarker->setVisible(ui->gotoMarker->count() > 1); +} + +QString GLSpectrumGUI::displayScaled(int64_t value, char type, int precision, bool showMult) +{ + int64_t posValue = (value < 0) ? -value : value; + + if (posValue < 1000) { + return tr("%1").arg(QString::number(value, type, precision)); + } else if (posValue < 1000000) { + return tr("%1%2").arg(QString::number(value / 1000.0, type, precision)).arg(showMult ? "k" : ""); + } else if (posValue < 1000000000) { + return tr("%1%2").arg(QString::number(value / 1000000.0, type, precision)).arg(showMult ? "M" : ""); + } else if (posValue < 1000000000000) { + return tr("%1%2").arg(QString::number(value / 1000000000.0, type, precision)).arg(showMult ? "G" : ""); + } else { + return tr("%1").arg(QString::number(value, 'e', precision)); + } +} void GLSpectrumGUI::blockApplySettings(bool block) { m_doApplySettings = !block; @@ -611,6 +644,27 @@ void GLSpectrumGUI::on_calibration_toggled(bool checked) applySettings(); } +void GLSpectrumGUI::on_gotoMarker_currentIndexChanged(int index) +{ + if (index == 0) { + return; + } + int i = 1; + for (auto marker : m_settings.m_annoationMarkers) + { + if (marker.m_show != SpectrumAnnotationMarker::Hidden) + { + if (i == index) + { + emit requestCenterFrequency(marker.m_startFrequency + marker.m_bandwidth/2); + break; + } + i++; + } + } + ui->gotoMarker->setCurrentIndex(0); // Redisplay "Goto..." +} + void GLSpectrumGUI::setAveragingCombo() { int index = ui->averaging->currentIndex(); diff --git a/sdrgui/gui/glspectrumgui.h b/sdrgui/gui/glspectrumgui.h index 31ba3f2d8..4d0ecc627 100644 --- a/sdrgui/gui/glspectrumgui.h +++ b/sdrgui/gui/glspectrumgui.h @@ -84,6 +84,8 @@ private: void setFFTSizeToolitp(); void setMaximumOverlap(); bool handleMessage(const Message& message); + void displayGotoMarkers(); + QString displayScaled(int64_t value, char type, int precision, bool showMult); private slots: void on_fftWindow_currentIndexChanged(int index); @@ -118,6 +120,7 @@ private slots: void on_clearSpectrum_clicked(bool checked); void on_freeze_toggled(bool checked); void on_calibration_toggled(bool checked); + void on_gotoMarker_currentIndexChanged(int index); void handleInputMessages(); void openWebsocketSpectrumSettingsDialog(const QPoint& p); @@ -128,6 +131,10 @@ private slots: void updateAnnotationMarkers(); void updateMarkersDisplay(); void updateCalibrationPoints(); + +signals: + // Emitted when user selects an annotation marker + void requestCenterFrequency(qint64 frequency); }; #endif // INCLUDE_GLSPECTRUMGUI_H diff --git a/sdrgui/gui/glspectrumgui.ui b/sdrgui/gui/glspectrumgui.ui index 559a1afa1..5c78eaae9 100644 --- a/sdrgui/gui/glspectrumgui.ui +++ b/sdrgui/gui/glspectrumgui.ui @@ -1073,6 +1073,30 @@ + + + + + 65 + 0 + + + + + 65 + 16777215 + + + + Set frequency to marker + + + + Go to... + + + + diff --git a/sdrgui/mainspectrum/mainspectrumgui.cpp b/sdrgui/mainspectrum/mainspectrumgui.cpp index 1dd21bfc5..5c31dbc12 100644 --- a/sdrgui/mainspectrum/mainspectrumgui.cpp +++ b/sdrgui/mainspectrum/mainspectrumgui.cpp @@ -142,6 +142,7 @@ MainSpectrumGUI::MainSpectrumGUI(GLSpectrum *spectrum, GLSpectrumGUI *spectrumGU connect(m_hideButton, SIGNAL(clicked()), this, SLOT(hide())); connect(spectrum, &GLSpectrum::requestCenterFrequency, this, &MainSpectrumGUI::onRequestCenterFrequency); + connect(spectrumGUI, &GLSpectrumGUI::requestCenterFrequency, this, &MainSpectrumGUI::onRequestCenterFrequency); m_resizer.enableChildMouseTracking(); shrinkWindow(); @@ -320,7 +321,7 @@ QString MainSpectrumGUI::getDeviceTypeTag() } } -// Handle request from GLSpectrum to adjust center frequency +// Handle request from GLSpectrum/GLSpectrumGUI to adjust center frequency void MainSpectrumGUI::onRequestCenterFrequency(qint64 frequency) { emit requestCenterFrequency(m_deviceSetIndex, frequency);