diff --git a/include/mainwindow.h b/include/mainwindow.h index ffa712c46..0902e0ed9 100644 --- a/include/mainwindow.h +++ b/include/mainwindow.h @@ -34,6 +34,7 @@ class Indicator; class SpectrumVis; class GLSpectrum; class GLSpectrumGUI; +class ChannelWindow; class FileSink; class SampleSource; class PluginAPI; @@ -50,6 +51,17 @@ class SDRANGEL_API MainWindow : public QMainWindow { Q_OBJECT public: + struct DeviceUISet + { + SpectrumVis *m_spectrumVis; + GLSpectrum *m_spectrum; + GLSpectrumGUI *m_spectrumGUI; + ChannelWindow *m_channelWindow; + + DeviceUISet(QTimer& timer); + ~DeviceUISet(); + }; + explicit MainWindow(QWidget* parent = 0); ~MainWindow(); @@ -82,9 +94,7 @@ private: SpectrumVis* m_rxSpectrumVis; FileSink *m_fileSink; - std::vector m_spectraVis; - std::vector m_spectra; - std::vector m_spectraGUI; + std::vector m_deviceUIs; DSPEngine* m_dspEngine; diff --git a/sdrbase/mainwindow.cpp b/sdrbase/mainwindow.cpp index 9520784fe..ad89a4c15 100644 --- a/sdrbase/mainwindow.cpp +++ b/sdrbase/mainwindow.cpp @@ -103,23 +103,16 @@ MainWindow::MainWindow(QWidget* parent) : m_pluginManager->fillSampleSourceSelector(ui->sampleSource); ui->sampleSource->blockSignals(sampleSourceSignalsBlocked); - // Disable Tx spectrum by default. Enabled if source supports Tx. - ui->tabSpectra->setTabEnabled(1, false); - ui->tabSpectraGUI->setTabEnabled(1, false); - //m_rxSpectrumVis = new SpectrumVis(ui->rxSpectrum); //ui->rxSpectrum->connectTimer(m_masterTimer); //ui->rxSpectrumGUI->setBuddies(m_rxSpectrumVis->getInputMessageQueue(), m_rxSpectrumVis, ui->rxSpectrum); - //m_dspEngine->addSink(m_rxSpectrumVis); + //m_dspEngine-> - m_spectra.push_back(new GLSpectrum); - m_spectraVis.push_back(new SpectrumVis(m_spectra.back())); - m_spectra.back()->connectTimer(m_masterTimer); - m_spectraGUI.push_back(new GLSpectrumGUI); - m_spectraGUI.back()->setBuddies(m_spectraVis.back()->getInputMessageQueue(), m_spectraVis.back(), m_spectra.back()); - ui->tabSpectra->addTab(m_spectra.back(), "X0"); - ui->tabSpectraGUI->addTab(m_spectraGUI.back(), "X0"); - m_dspEngine->addSink(m_spectraVis.back()); + m_deviceUIs.push_back(new DeviceUISet(m_masterTimer)); + ui->tabSpectra->addTab(m_deviceUIs.back()->m_spectrum, "X0"); + ui->tabSpectraGUI->addTab(m_deviceUIs.back()->m_spectrumGUI, "X0"); + m_dspEngine->addSink(m_deviceUIs.back()->m_spectrumVis); + ui->tabChannels->addTab(m_deviceUIs.back()->m_channelWindow, "X0"); m_fileSink = new FileSink(); m_dspEngine->addSink(m_fileSink); @@ -163,20 +156,9 @@ MainWindow::~MainWindow() m_pluginManager->freeAll(); - for (int i=0; iremoveSink(m_spectraVis[i]); - delete m_spectraVis[i]; - } - - for (int i=0; iremoveSink(m_fileSink); @@ -197,7 +179,9 @@ void MainWindow::addChannelCreateAction(QAction* action) void MainWindow::addChannelRollup(QWidget* widget) { - ((ChannelWindow*)ui->channelDock->widget())->addRollupWidget(widget); + m_deviceUIs.back()->m_channelWindow->addRollupWidget(widget); + //((ChannelWindow*)ui->rxChannels)->addRollupWidget(widget); + //((ChannelWindow*)ui->channelDock->widget())->addRollupWidget(widget); ui->channelDock->show(); ui->channelDock->raise(); } @@ -210,13 +194,13 @@ void MainWindow::addViewAction(QAction* action) void MainWindow::addChannelMarker(ChannelMarker* channelMarker) { //ui->rxSpectrum->addChannelMarker(channelMarker); - m_spectra.back()->addChannelMarker(channelMarker); + m_deviceUIs.back()->m_spectrum->addChannelMarker(channelMarker); } void MainWindow::removeChannelMarker(ChannelMarker* channelMarker) { //ui->rxSpectrum->removeChannelMarker(channelMarker); - m_spectra.back()->removeChannelMarker(channelMarker); + m_deviceUIs.back()->m_spectrum->removeChannelMarker(channelMarker); } void MainWindow::setInputGUI(QWidget* gui) @@ -247,7 +231,7 @@ void MainWindow::loadPresetSettings(const Preset* preset) qPrintable(preset->getDescription())); //ui->rxSpectrumGUI->deserialize(preset->getSpectrumConfig()); - m_spectraGUI.back()->deserialize(preset->getSpectrumConfig()); + m_deviceUIs.back()->m_spectrumGUI->deserialize(preset->getSpectrumConfig()); m_pluginManager->loadSettings(preset); // has to be last step @@ -269,7 +253,7 @@ void MainWindow::savePresetSettings(Preset* preset) qPrintable(preset->getDescription())); //preset->setSpectrumConfig(ui->rxSpectrumGUI->serialize()); - preset->setSpectrumConfig(m_spectraGUI.back()->serialize()); + preset->setSpectrumConfig(m_deviceUIs.back()->m_spectrumGUI->serialize()); preset->clearChannels(); m_pluginManager->saveSettings(preset); @@ -306,13 +290,13 @@ void MainWindow::closeEvent(QCloseEvent*) void MainWindow::updateCenterFreqDisplay() { //ui->rxSpectrum->setCenterFrequency(m_centerFrequency); - m_spectra.back()->setCenterFrequency(m_centerFrequency); + m_deviceUIs.back()->m_spectrum->setCenterFrequency(m_centerFrequency); } void MainWindow::updateSampleRate() { //ui->rxSpectrum->setSampleRate(m_sampleRate); - m_spectra.back()->setSampleRate(m_sampleRate); + m_deviceUIs.back()->m_spectrum->setSampleRate(m_sampleRate); m_sampleRateWidget->setText(tr("Rate: %1 kHz").arg((float)m_sampleRate / 1000)); } @@ -609,3 +593,21 @@ void MainWindow::on_action_About_triggered() AboutDialog dlg(this); dlg.exec(); } + +MainWindow::DeviceUISet::DeviceUISet(QTimer& timer) +{ + m_spectrum = new GLSpectrum; + m_spectrumVis = new SpectrumVis(m_spectrum); + m_spectrum->connectTimer(timer); + m_spectrumGUI = new GLSpectrumGUI; + m_spectrumGUI->setBuddies(m_spectrumVis->getInputMessageQueue(), m_spectrumVis, m_spectrum); + m_channelWindow = new ChannelWindow; +} + +MainWindow::DeviceUISet::~DeviceUISet() +{ + delete m_channelWindow; + delete m_spectrumGUI; + delete m_spectrumVis; + delete m_spectrum; +} diff --git a/sdrbase/mainwindow.ui b/sdrbase/mainwindow.ui index 3c047b157..0e413924e 100644 --- a/sdrbase/mainwindow.ui +++ b/sdrbase/mainwindow.ui @@ -382,6 +382,20 @@ Rx + + + 0 + 0 + 255 + 24 + + + + + 255 + 0 + + @@ -396,7 +410,7 @@ 2 - + 3 @@ -413,6 +427,26 @@ 2 + + + + 0 + + + + false + + + + 8 + + + + Rx + + + +