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
-
+
- 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