mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-31 13:00:26 -04:00 
			
		
		
		
	Dynamic channel tab allocation: interim state #1
This commit is contained in:
		
							parent
							
								
									162d5705dc
								
							
						
					
					
						commit
						ae39dca580
					
				| @ -34,6 +34,7 @@ class Indicator; | |||||||
| class SpectrumVis; | class SpectrumVis; | ||||||
| class GLSpectrum; | class GLSpectrum; | ||||||
| class GLSpectrumGUI; | class GLSpectrumGUI; | ||||||
|  | class ChannelWindow; | ||||||
| class FileSink; | class FileSink; | ||||||
| class SampleSource; | class SampleSource; | ||||||
| class PluginAPI; | class PluginAPI; | ||||||
| @ -50,6 +51,17 @@ class SDRANGEL_API MainWindow : public QMainWindow { | |||||||
| 	Q_OBJECT | 	Q_OBJECT | ||||||
| 
 | 
 | ||||||
| public: | public: | ||||||
|  | 	struct DeviceUISet | ||||||
|  | 	{ | ||||||
|  | 		SpectrumVis *m_spectrumVis; | ||||||
|  | 		GLSpectrum *m_spectrum; | ||||||
|  | 		GLSpectrumGUI *m_spectrumGUI; | ||||||
|  | 		ChannelWindow *m_channelWindow; | ||||||
|  | 
 | ||||||
|  | 		DeviceUISet(QTimer& timer); | ||||||
|  | 		~DeviceUISet(); | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
| 	explicit MainWindow(QWidget* parent = 0); | 	explicit MainWindow(QWidget* parent = 0); | ||||||
| 	~MainWindow(); | 	~MainWindow(); | ||||||
| 
 | 
 | ||||||
| @ -82,9 +94,7 @@ private: | |||||||
| 	SpectrumVis* m_rxSpectrumVis; | 	SpectrumVis* m_rxSpectrumVis; | ||||||
| 	FileSink *m_fileSink; | 	FileSink *m_fileSink; | ||||||
| 
 | 
 | ||||||
| 	std::vector<SpectrumVis*> m_spectraVis; | 	std::vector<DeviceUISet*> m_deviceUIs; | ||||||
| 	std::vector<GLSpectrum*> m_spectra; |  | ||||||
| 	std::vector<GLSpectrumGUI*> m_spectraGUI; |  | ||||||
| 
 | 
 | ||||||
| 	DSPEngine* m_dspEngine; | 	DSPEngine* m_dspEngine; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -103,23 +103,16 @@ MainWindow::MainWindow(QWidget* parent) : | |||||||
| 	m_pluginManager->fillSampleSourceSelector(ui->sampleSource); | 	m_pluginManager->fillSampleSourceSelector(ui->sampleSource); | ||||||
| 	ui->sampleSource->blockSignals(sampleSourceSignalsBlocked); | 	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);
 | 	//m_rxSpectrumVis = new SpectrumVis(ui->rxSpectrum);
 | ||||||
| 	//ui->rxSpectrum->connectTimer(m_masterTimer);
 | 	//ui->rxSpectrum->connectTimer(m_masterTimer);
 | ||||||
| 	//ui->rxSpectrumGUI->setBuddies(m_rxSpectrumVis->getInputMessageQueue(), m_rxSpectrumVis, ui->rxSpectrum);
 | 	//ui->rxSpectrumGUI->setBuddies(m_rxSpectrumVis->getInputMessageQueue(), m_rxSpectrumVis, ui->rxSpectrum);
 | ||||||
| 	//m_dspEngine->addSink(m_rxSpectrumVis);
 | 	//m_dspEngine->
 | ||||||
| 
 | 
 | ||||||
| 	m_spectra.push_back(new GLSpectrum); | 	m_deviceUIs.push_back(new DeviceUISet(m_masterTimer)); | ||||||
| 	m_spectraVis.push_back(new SpectrumVis(m_spectra.back())); | 	ui->tabSpectra->addTab(m_deviceUIs.back()->m_spectrum, "X0"); | ||||||
| 	m_spectra.back()->connectTimer(m_masterTimer); | 	ui->tabSpectraGUI->addTab(m_deviceUIs.back()->m_spectrumGUI, "X0"); | ||||||
| 	m_spectraGUI.push_back(new GLSpectrumGUI); | 	m_dspEngine->addSink(m_deviceUIs.back()->m_spectrumVis); | ||||||
| 	m_spectraGUI.back()->setBuddies(m_spectraVis.back()->getInputMessageQueue(), m_spectraVis.back(), m_spectra.back()); | 	ui->tabChannels->addTab(m_deviceUIs.back()->m_channelWindow, "X0"); | ||||||
| 	ui->tabSpectra->addTab(m_spectra.back(), "X0"); |  | ||||||
| 	ui->tabSpectraGUI->addTab(m_spectraGUI.back(), "X0"); |  | ||||||
| 	m_dspEngine->addSink(m_spectraVis.back()); |  | ||||||
| 
 | 
 | ||||||
| 	m_fileSink = new FileSink(); | 	m_fileSink = new FileSink(); | ||||||
| 	m_dspEngine->addSink(m_fileSink); | 	m_dspEngine->addSink(m_fileSink); | ||||||
| @ -163,20 +156,9 @@ MainWindow::~MainWindow() | |||||||
| 
 | 
 | ||||||
| 	m_pluginManager->freeAll(); | 	m_pluginManager->freeAll(); | ||||||
| 
 | 
 | ||||||
| 	for (int i=0; i<m_spectraGUI.size(); i++) | 	for (int i = 0; i < m_deviceUIs.size(); i++) | ||||||
| 	{ | 	{ | ||||||
| 		delete m_spectraGUI[i]; | 		delete m_deviceUIs[i]; | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	for (int i=0; i<m_spectraVis.size(); i++) |  | ||||||
| 	{ |  | ||||||
| 		m_dspEngine->removeSink(m_spectraVis[i]); |  | ||||||
| 		delete m_spectraVis[i]; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	for (int i=0; i<m_spectra.size(); i++) |  | ||||||
| 	{ |  | ||||||
| 		delete m_spectra[i]; |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	m_dspEngine->removeSink(m_fileSink); | 	m_dspEngine->removeSink(m_fileSink); | ||||||
| @ -197,7 +179,9 @@ void MainWindow::addChannelCreateAction(QAction* action) | |||||||
| 
 | 
 | ||||||
| void MainWindow::addChannelRollup(QWidget* widget) | 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->show(); | ||||||
| 	ui->channelDock->raise(); | 	ui->channelDock->raise(); | ||||||
| } | } | ||||||
| @ -210,13 +194,13 @@ void MainWindow::addViewAction(QAction* action) | |||||||
| void MainWindow::addChannelMarker(ChannelMarker* channelMarker) | void MainWindow::addChannelMarker(ChannelMarker* channelMarker) | ||||||
| { | { | ||||||
| 	//ui->rxSpectrum->addChannelMarker(channelMarker);
 | 	//ui->rxSpectrum->addChannelMarker(channelMarker);
 | ||||||
| 	m_spectra.back()->addChannelMarker(channelMarker); | 	m_deviceUIs.back()->m_spectrum->addChannelMarker(channelMarker); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void MainWindow::removeChannelMarker(ChannelMarker* channelMarker) | void MainWindow::removeChannelMarker(ChannelMarker* channelMarker) | ||||||
| { | { | ||||||
| 	//ui->rxSpectrum->removeChannelMarker(channelMarker);
 | 	//ui->rxSpectrum->removeChannelMarker(channelMarker);
 | ||||||
| 	m_spectra.back()->removeChannelMarker(channelMarker); | 	m_deviceUIs.back()->m_spectrum->removeChannelMarker(channelMarker); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void MainWindow::setInputGUI(QWidget* gui) | void MainWindow::setInputGUI(QWidget* gui) | ||||||
| @ -247,7 +231,7 @@ void MainWindow::loadPresetSettings(const Preset* preset) | |||||||
| 		qPrintable(preset->getDescription())); | 		qPrintable(preset->getDescription())); | ||||||
| 
 | 
 | ||||||
| 	//ui->rxSpectrumGUI->deserialize(preset->getSpectrumConfig());
 | 	//ui->rxSpectrumGUI->deserialize(preset->getSpectrumConfig());
 | ||||||
| 	m_spectraGUI.back()->deserialize(preset->getSpectrumConfig()); | 	m_deviceUIs.back()->m_spectrumGUI->deserialize(preset->getSpectrumConfig()); | ||||||
| 	m_pluginManager->loadSettings(preset); | 	m_pluginManager->loadSettings(preset); | ||||||
| 
 | 
 | ||||||
| 	// has to be last step
 | 	// has to be last step
 | ||||||
| @ -269,7 +253,7 @@ void MainWindow::savePresetSettings(Preset* preset) | |||||||
| 		qPrintable(preset->getDescription())); | 		qPrintable(preset->getDescription())); | ||||||
| 
 | 
 | ||||||
| 	//preset->setSpectrumConfig(ui->rxSpectrumGUI->serialize());
 | 	//preset->setSpectrumConfig(ui->rxSpectrumGUI->serialize());
 | ||||||
| 	preset->setSpectrumConfig(m_spectraGUI.back()->serialize()); | 	preset->setSpectrumConfig(m_deviceUIs.back()->m_spectrumGUI->serialize()); | ||||||
| 	preset->clearChannels(); | 	preset->clearChannels(); | ||||||
|     m_pluginManager->saveSettings(preset); |     m_pluginManager->saveSettings(preset); | ||||||
| 
 | 
 | ||||||
| @ -306,13 +290,13 @@ void MainWindow::closeEvent(QCloseEvent*) | |||||||
| void MainWindow::updateCenterFreqDisplay() | void MainWindow::updateCenterFreqDisplay() | ||||||
| { | { | ||||||
| 	//ui->rxSpectrum->setCenterFrequency(m_centerFrequency);
 | 	//ui->rxSpectrum->setCenterFrequency(m_centerFrequency);
 | ||||||
| 	m_spectra.back()->setCenterFrequency(m_centerFrequency); | 	m_deviceUIs.back()->m_spectrum->setCenterFrequency(m_centerFrequency); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void MainWindow::updateSampleRate() | void MainWindow::updateSampleRate() | ||||||
| { | { | ||||||
| 	//ui->rxSpectrum->setSampleRate(m_sampleRate);
 | 	//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)); | 	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); | 	AboutDialog dlg(this); | ||||||
| 	dlg.exec(); | 	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; | ||||||
|  | } | ||||||
|  | |||||||
| @ -382,6 +382,20 @@ | |||||||
|          <string>Rx</string> |          <string>Rx</string> | ||||||
|         </attribute> |         </attribute> | ||||||
|         <widget class="QComboBox" name="sampleSource"> |         <widget class="QComboBox" name="sampleSource"> | ||||||
|  |          <property name="geometry"> | ||||||
|  |           <rect> | ||||||
|  |            <x>0</x> | ||||||
|  |            <y>0</y> | ||||||
|  |            <width>255</width> | ||||||
|  |            <height>24</height> | ||||||
|  |           </rect> | ||||||
|  |          </property> | ||||||
|  |          <property name="minimumSize"> | ||||||
|  |           <size> | ||||||
|  |            <width>255</width> | ||||||
|  |            <height>0</height> | ||||||
|  |           </size> | ||||||
|  |          </property> | ||||||
|         </widget> |         </widget> | ||||||
|        </widget> |        </widget> | ||||||
|       </widget> |       </widget> | ||||||
| @ -396,7 +410,7 @@ | |||||||
|    <attribute name="dockWidgetArea"> |    <attribute name="dockWidgetArea"> | ||||||
|     <number>2</number> |     <number>2</number> | ||||||
|    </attribute> |    </attribute> | ||||||
|    <widget class="ChannelWindow" name="channelWindow"> |    <widget class="QWidget" name="channelWidgetContent"> | ||||||
|     <layout class="QVBoxLayout" name="verticalLayout_4"> |     <layout class="QVBoxLayout" name="verticalLayout_4"> | ||||||
|      <property name="spacing"> |      <property name="spacing"> | ||||||
|       <number>3</number> |       <number>3</number> | ||||||
| @ -413,6 +427,26 @@ | |||||||
|      <property name="bottomMargin"> |      <property name="bottomMargin"> | ||||||
|       <number>2</number> |       <number>2</number> | ||||||
|      </property> |      </property> | ||||||
|  |      <item> | ||||||
|  |       <widget class="QTabWidget" name="tabChannels"> | ||||||
|  |        <property name="currentIndex"> | ||||||
|  |         <number>0</number> | ||||||
|  |        </property> | ||||||
|  |        <widget class="ChannelWindow" name="rxChannels"> | ||||||
|  |         <property name="enabled"> | ||||||
|  |          <bool>false</bool> | ||||||
|  |         </property> | ||||||
|  |         <property name="font"> | ||||||
|  |          <font> | ||||||
|  |           <pointsize>8</pointsize> | ||||||
|  |          </font> | ||||||
|  |         </property> | ||||||
|  |         <attribute name="title"> | ||||||
|  |          <string>Rx</string> | ||||||
|  |         </attribute> | ||||||
|  |        </widget> | ||||||
|  |       </widget> | ||||||
|  |      </item> | ||||||
|     </layout> |     </layout> | ||||||
|    </widget> |    </widget> | ||||||
|   </widget> |   </widget> | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user