diff --git a/doc/img/MainWindow_general.png b/doc/img/MainWindow_general.png index ff620324c..ae066782d 100644 Binary files a/doc/img/MainWindow_general.png and b/doc/img/MainWindow_general.png differ diff --git a/doc/img/MainWindow_general.xcf b/doc/img/MainWindow_general.xcf index aadf1df7a..5e6652056 100644 Binary files a/doc/img/MainWindow_general.xcf and b/doc/img/MainWindow_general.xcf differ diff --git a/doc/img/MainWindow_spectrum_gui.png b/doc/img/MainWindow_spectrum_gui.png index 22efbe6cf..f55f68dff 100644 Binary files a/doc/img/MainWindow_spectrum_gui.png and b/doc/img/MainWindow_spectrum_gui.png differ diff --git a/doc/img/MainWindow_spectrum_gui.xcf b/doc/img/MainWindow_spectrum_gui.xcf index 7cb62743c..58bb3a34a 100644 Binary files a/doc/img/MainWindow_spectrum_gui.xcf and b/doc/img/MainWindow_spectrum_gui.xcf differ diff --git a/sdrbase/settings/preset.cpp b/sdrbase/settings/preset.cpp index f2dac69a6..cc4e00f7c 100644 --- a/sdrbase/settings/preset.cpp +++ b/sdrbase/settings/preset.cpp @@ -36,6 +36,7 @@ Preset::Preset(const Preset& other) : m_iqImbalanceCorrection(other.m_iqImbalanceCorrection), m_channelConfigs(other.m_channelConfigs), m_deviceConfigs(other.m_deviceConfigs), + m_showSpectrum(other.m_showSpectrum), m_layout(other.m_layout) {} @@ -50,6 +51,7 @@ void Preset::resetToDefaults() m_channelConfigs.clear(); m_dcOffsetCorrection = false; m_iqImbalanceCorrection = false; + m_showSpectrum = true; } QByteArray Preset::serialize() const @@ -69,6 +71,7 @@ QByteArray Preset::serialize() const s.writeBlob(5, m_spectrumConfig); s.writeBool(6, m_presetType == PresetSource); s.writeS32(7, (int) m_presetType); + s.writeBool(8, m_showSpectrum); s.writeS32(20, m_deviceConfigs.size()); @@ -126,6 +129,7 @@ bool Preset::deserialize(const QByteArray& data) d.readBlob(5, &m_spectrumConfig); d.readBool(6, &tmpBool, true); d.readS32(7, &tmp, PresetSource); + d.readBool(8, &m_showSpectrum, true); m_presetType = tmp < (int) PresetSource ? PresetSource : tmp > (int) PresetMIMO ? PresetMIMO : (PresetType) tmp; if (m_presetType != PresetMIMO) { diff --git a/sdrbase/settings/preset.h b/sdrbase/settings/preset.h index e6b9b8e1f..148fd74d8 100644 --- a/sdrbase/settings/preset.h +++ b/sdrbase/settings/preset.h @@ -96,6 +96,8 @@ public: bool hasIQImbalanceCorrection() const { return m_iqImbalanceCorrection; } void setIQImbalanceCorrection(bool iqImbalanceCorrection) { m_iqImbalanceCorrection = iqImbalanceCorrection; } + void setShowSpectrum(bool show) { m_showSpectrum = show; } + bool getShowSpectrum() const { return m_showSpectrum; } void setLayout(const QByteArray& data) { m_layout = data; } const QByteArray& getLayout() const { return m_layout; } @@ -164,6 +166,7 @@ protected: DeviceeConfigs m_deviceConfigs; // screen and dock layout + bool m_showSpectrum; QByteArray m_layout; private: diff --git a/sdrgui/mainwindow.cpp b/sdrgui/mainwindow.cpp index 754686e7f..e15235382 100644 --- a/sdrgui/mainwindow.cpp +++ b/sdrgui/mainwindow.cpp @@ -139,13 +139,13 @@ MainWindow::MainWindow(qtwebapp::LoggerWithFile *logger, const MainParser& parse // work around broken Qt dock widget ordering removeDockWidget(ui->inputViewDock); - removeDockWidget(ui->spectraDisplayDock); + removeDockWidget(ui->spectraControlDock); removeDockWidget(ui->presetDock); removeDockWidget(ui->commandsDock); removeDockWidget(ui->channelDock); removeDockWidget(ui->featureDock); addDockWidget(Qt::LeftDockWidgetArea, ui->inputViewDock); - addDockWidget(Qt::LeftDockWidgetArea, ui->spectraDisplayDock); + addDockWidget(Qt::LeftDockWidgetArea, ui->spectraControlDock); addDockWidget(Qt::LeftDockWidgetArea, ui->presetDock); addDockWidget(Qt::LeftDockWidgetArea, ui->commandsDock); tabifyDockWidget(ui->presetDock, ui->commandsDock); @@ -153,21 +153,27 @@ MainWindow::MainWindow(qtwebapp::LoggerWithFile *logger, const MainParser& parse addDockWidget(Qt::RightDockWidgetArea, ui->featureDock); ui->inputViewDock->show(); - ui->spectraDisplayDock->show(); + ui->spectraControlDock->show(); ui->presetDock->show(); ui->commandsDock->show(); ui->channelDock->show(); ui->featureDock->show(); + m_spectrumToggleViewAction = new QAction(tr("Spectrum display")); + m_spectrumToggleViewAction->setCheckable(true); + m_spectrumToggleViewAction->setChecked(true); + connect(m_spectrumToggleViewAction, SIGNAL(toggled(bool)), this, SLOT(toggleSpectrumView(bool))); + ui->menu_Window->addAction(ui->inputViewDock->toggleViewAction()); - ui->menu_Window->addAction(ui->spectraDisplayDock->toggleViewAction()); + ui->menu_Window->addAction(ui->spectraControlDock->toggleViewAction()); + ui->menu_Window->addAction(m_spectrumToggleViewAction); ui->menu_Window->addAction(ui->presetDock->toggleViewAction()); ui->menu_Window->addAction(ui->commandsDock->toggleViewAction()); ui->menu_Window->addAction(ui->channelDock->toggleViewAction()); ui->menu_Window->addAction(ui->featureDock->toggleViewAction()); - ui->spectraDisplayDock->setStyleSheet("QAbstractButton#qt_dockwidget_closebutton{qproperty-toolTip: \"Close\";}"); - ui->spectraDisplayDock->setStyleSheet("QAbstractButton#qt_dockwidget_floatbutton{qproperty-toolTip: \"Dock/undock\";}"); + ui->spectraControlDock->setStyleSheet("QAbstractButton#qt_dockwidget_closebutton{qproperty-toolTip: \"Close\";}"); + ui->spectraControlDock->setStyleSheet("QAbstractButton#qt_dockwidget_floatbutton{qproperty-toolTip: \"Dock/undock\";}"); ui->presetDock->setStyleSheet("QAbstractButton#qt_dockwidget_closebutton{qproperty-toolTip: \"Close\";}"); ui->presetDock->setStyleSheet("QAbstractButton#qt_dockwidget_floatbutton{qproperty-toolTip: \"Dock/undock\";}"); @@ -323,6 +329,7 @@ MainWindow::~MainWindow() removeAllFeatureSets(); delete ui; + delete m_spectrumToggleViewAction; qDebug() << "MainWindow::~MainWindow: end"; delete m_commandKeyReceiver; @@ -788,6 +795,8 @@ void MainWindow::loadPresetSettings(const Preset* preset, int tabIndex) } } + m_spectrumToggleViewAction->setChecked(preset->getShowSpectrum()); + // has to be last step if (!preset->getLayout().isEmpty()) { restoreState(preset->getLayout()); @@ -832,6 +841,7 @@ void MainWindow::savePresetSettings(Preset* preset, int tabIndex) deviceUI->m_deviceAPI->saveSamplingDeviceSettings(preset); } + preset->setShowSpectrum(m_spectrumToggleViewAction->isChecked()); preset->setLayout(saveState()); } @@ -1912,6 +1922,15 @@ void MainWindow::fftWisdomProcessFinished(int exitCode, QProcess::ExitStatus exi m_fftWisdomProcess = nullptr; } +void MainWindow::toggleSpectrumView(bool checked) +{ + if (checked) { + ui->centralWidget->show(); + } else { + ui->centralWidget->hide(); + } +} + void MainWindow::on_action_AMBE_triggered() { qDebug("MainWindow::on_action_AMBE_triggered"); diff --git a/sdrgui/mainwindow.h b/sdrgui/mainwindow.h index a0ca9bc6c..8095ba957 100644 --- a/sdrgui/mainwindow.h +++ b/sdrgui/mainwindow.h @@ -117,6 +117,7 @@ private: WebAPIAdapter *m_apiAdapter; QString m_apiHost; int m_apiPort; + QAction *m_spectrumToggleViewAction; CommandKeyReceiver *m_commandKeyReceiver; @@ -200,6 +201,7 @@ private slots: void tabFeaturesIndexChanged(); void commandKeyPressed(Qt::Key key, Qt::KeyboardModifiers keyModifiers, bool release); void fftWisdomProcessFinished(int exitCode, QProcess::ExitStatus exitStatus); + void toggleSpectrumView(bool checked); }; #endif // INCLUDE_MAINWINDOW_H diff --git a/sdrgui/mainwindow.ui b/sdrgui/mainwindow.ui index 296575016..be01d8be4 100644 --- a/sdrgui/mainwindow.ui +++ b/sdrgui/mainwindow.ui @@ -64,7 +64,7 @@ 0 0 1012 - 20 + 27 @@ -193,9 +193,9 @@ - + - Spectrum Display + Spectrum Control 1 diff --git a/sdrgui/readme.md b/sdrgui/readme.md index b6ae02996..1a21dd6b1 100644 --- a/sdrgui/readme.md +++ b/sdrgui/readme.md @@ -49,7 +49,8 @@ The following items are presented hierarchically from left to right: - Window: presents the list of dockable windows. Check to make it visible. Uncheck to hide. These windows are: - _Sampling devices control_: control of which sampling devices is used and add channels - _Sampling devices_: the sampling devices UIs - - _Spectrum display_: the main spectrum displays (output from the sampling devices) + - _Spectrum control_: the main spectrum displays control + - _Spectrum display_: the main spectrum displays. Note this is not a dockable window but occupies the central widget - _Presets_: the saved presets - _Commands_: the defined commands - _Channels_: the channels active for each device