diff --git a/sdrgui/gui/glspectrumgui.cpp b/sdrgui/gui/glspectrumgui.cpp index 27bdef877..c5e20cac0 100644 --- a/sdrgui/gui/glspectrumgui.cpp +++ b/sdrgui/gui/glspectrumgui.cpp @@ -21,6 +21,8 @@ #include #include +#include +#include #include "gui/glspectrumgui.h" #include "dsp/fftwindow.h" @@ -491,6 +493,39 @@ void GLSpectrumGUI::on_markers_clicked(bool checked) applySettings(); } +// Save spectrum data to a text file +void GLSpectrumGUI::on_save_clicked(bool checked) +{ + // Get filename to write + QFileDialog fileDialog(nullptr, "Select file to save data to", "", "*.*"); + fileDialog.setAcceptMode(QFileDialog::AcceptSave); + if (fileDialog.exec()) + { + QStringList fileNames = fileDialog.selectedFiles(); + if (fileNames.size() > 0) + { + // Get spectrum data (This vector can be larger than fftSize) + std::vector spectrum; + m_spectrumVis->getPowerSpectrumCopy(spectrum); + + // Write to text file + QFile file(fileNames[0]); + if (file.open(QIODevice::WriteOnly)) + { + QTextStream out(&file); + for (int i = 0; i < m_settings.m_fftSize; i++) { + out << spectrum[i] << "\n"; + } + file.close(); + } + else + { + QMessageBox::critical(this, "Spectrum", QString("Failed to open file %1").arg(fileNames[0])); + } + } + } +} + void GLSpectrumGUI::on_refLevel_valueChanged(int value) { m_settings.m_refLevel = value - m_calibrationShiftdB; diff --git a/sdrgui/gui/glspectrumgui.h b/sdrgui/gui/glspectrumgui.h index 0a13a981a..35c6d937c 100644 --- a/sdrgui/gui/glspectrumgui.h +++ b/sdrgui/gui/glspectrumgui.h @@ -107,6 +107,7 @@ private slots: void on_linscale_toggled(bool checked); void on_wsSpectrum_toggled(bool checked); void on_markers_clicked(bool checked); + void on_save_clicked(bool checked); void on_waterfall_toggled(bool checked); void on_spectrogram_toggled(bool checked); diff --git a/sdrgui/gui/glspectrumgui.ui b/sdrgui/gui/glspectrumgui.ui index 26d46dcd6..b7ecc5180 100644 --- a/sdrgui/gui/glspectrumgui.ui +++ b/sdrgui/gui/glspectrumgui.ui @@ -1023,6 +1023,20 @@ + + + + Save spectrum data to file + + + + + + + :/save.png:/save.png + + +