1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-06-05 15:34:57 -04:00

New channels dock with add channels button replaces add channel from sampling devices control. Implements #628

This commit is contained in:
f4exb
2020-09-12 10:37:16 +02:00
parent 9936a5e2c4
commit 5c1dc1e5a7
12 changed files with 450 additions and 79 deletions
+46 -23
View File
@@ -211,6 +211,7 @@ MainWindow::MainWindow(qtwebapp::LoggerWithFile *logger, const MainParser& parse
int deviceIndex = DeviceEnumerator::instance()->getRxSamplingDeviceIndex(m_settings.getSourceDeviceId(), m_settings.getSourceIndex());
addSourceDevice(deviceIndex); // add the first device set with file input device as default if device in settings is not enumerated
m_deviceUIs.back()->m_deviceAPI->setBuddyLeader(true); // the first device is always the leader
tabChannelsIndexChanged(); // force channel selection list update
splash->showStatusMessage("load current preset settings...", Qt::white);
qDebug() << "MainWindow::MainWindow: load current preset settings...";
@@ -224,6 +225,8 @@ MainWindow::MainWindow(qtwebapp::LoggerWithFile *logger, const MainParser& parse
splash->showStatusMessage("finishing...", Qt::white);
connect(ui->tabInputsView, SIGNAL(currentChanged(int)), this, SLOT(tabInputViewIndexChanged()));
connect(ui->tabChannels, SIGNAL(currentChanged(int)), this, SLOT(tabChannelsIndexChanged()));
connect(ui->channelDock, SIGNAL(addChannel(int)), this, SLOT(channelAddClicked(int)));
QString applicationDirPath = qApp->applicationDirPath();
@@ -314,11 +317,7 @@ void MainWindow::addSourceDevice(int deviceIndex)
m_deviceUIs.back()->m_samplingDeviceControl->setPluginManager(m_pluginManager);
QList<QString> channelNames;
m_pluginManager->listRxChannels(channelNames);
QStringList channelNamesList(channelNames);
m_deviceUIs.back()->m_samplingDeviceControl->getChannelSelector()->addItems(channelNamesList);
m_deviceUIs.back()->setNumberOfAvailableRxChannels(channelNamesList.size());
connect(m_deviceUIs.back()->m_samplingDeviceControl->getAddChannelButton(), SIGNAL(clicked(bool)), this, SLOT(channelAddClicked(bool)));
m_deviceUIs.back()->setNumberOfAvailableRxChannels(channelNames.size());
dspDeviceSourceEngine->addSink(m_deviceUIs.back()->m_spectrumVis);
ui->tabSpectra->addTab(m_deviceUIs.back()->m_spectrum, tabNameCStr);
@@ -396,11 +395,7 @@ void MainWindow::addSinkDevice()
m_deviceUIs.back()->m_samplingDeviceControl->setPluginManager(m_pluginManager);
QList<QString> channelNames;
m_pluginManager->listTxChannels(channelNames);
QStringList channelNamesList(channelNames);
m_deviceUIs.back()->m_samplingDeviceControl->getChannelSelector()->addItems(channelNamesList);
m_deviceUIs.back()->setNumberOfAvailableTxChannels(channelNamesList.size());
connect(m_deviceUIs.back()->m_samplingDeviceControl->getAddChannelButton(), SIGNAL(clicked(bool)), this, SLOT(channelAddClicked(bool)));
m_deviceUIs.back()->setNumberOfAvailableTxChannels(channelNames.size());
dspDeviceSinkEngine->addSpectrumSink(m_deviceUIs.back()->m_spectrumVis);
m_deviceUIs.back()->m_spectrum->setDisplayedStream(false, 0);
@@ -979,9 +974,7 @@ bool MainWindow::handleMessage(const Message& cmd)
{
MsgAddChannel& notif = (MsgAddChannel&) cmd;
ui->tabInputsSelect->setCurrentIndex(notif.getDeviceSetIndex());
DeviceUISet *deviceUI = m_deviceUIs[notif.getDeviceSetIndex()];
deviceUI->m_samplingDeviceControl->getChannelSelector()->setCurrentIndex(notif.getChannelRegistrationIndex());
channelAddClicked(true);
channelAddClicked(notif.getChannelRegistrationIndex());
return true;
}
@@ -1903,9 +1896,8 @@ void MainWindow::sampleMIMOChanged()
}
}
void MainWindow::channelAddClicked(bool checked)
void MainWindow::channelAddClicked(int channelIndex)
{
(void) checked;
// Do it in the currently selected source tab
int currentSourceTabIndex = ui->tabInputsSelect->currentIndex();
@@ -1916,27 +1908,26 @@ void MainWindow::channelAddClicked(bool checked)
if (deviceUI->m_deviceSourceEngine) // source device => Rx channels
{
m_pluginManager->createRxChannelInstance(
deviceUI->m_samplingDeviceControl->getChannelSelector()->currentIndex(), deviceUI, deviceUI->m_deviceAPI);
channelIndex, deviceUI, deviceUI->m_deviceAPI);
}
else if (deviceUI->m_deviceSinkEngine) // sink device => Tx channels
{
m_pluginManager->createTxChannelInstance(
deviceUI->m_samplingDeviceControl->getChannelSelector()->currentIndex(), deviceUI, deviceUI->m_deviceAPI);
channelIndex, deviceUI, deviceUI->m_deviceAPI);
}
else if (deviceUI->m_deviceMIMOEngine) // MIMO device => all possible channels. Depends on index range
{
int nbRxChannels = deviceUI->getNumberOfAvailableRxChannels();
int nbTxChannels = deviceUI->getNumberOfAvailableTxChannels();
int selectedIndex = deviceUI->m_samplingDeviceControl->getChannelSelector()->currentIndex();
qDebug("MainWindow::channelAddClicked: MIMO: tab: %d nbRx: %d nbTx: %d selected: %d",
currentSourceTabIndex, nbRxChannels, nbTxChannels, selectedIndex);
currentSourceTabIndex, nbRxChannels, nbTxChannels, channelIndex);
if (selectedIndex < nbRxChannels) {
if (channelIndex < nbRxChannels) {
m_pluginManager->createRxChannelInstance(
selectedIndex, deviceUI, deviceUI->m_deviceAPI);
} else if (selectedIndex < nbRxChannels + nbTxChannels) {
channelIndex, deviceUI, deviceUI->m_deviceAPI);
} else if (channelIndex < nbRxChannels + nbTxChannels) {
m_pluginManager->createTxChannelInstance(
selectedIndex - nbRxChannels, deviceUI, deviceUI->m_deviceAPI);
channelIndex - nbRxChannels, deviceUI, deviceUI->m_deviceAPI);
}
}
}
@@ -1990,6 +1981,38 @@ void MainWindow::tabInputViewIndexChanged()
ui->tabSpectraGUI->setCurrentIndex(inputViewIndex);
}
void MainWindow::tabChannelsIndexChanged()
{
int channelsTabIndex = ui->tabChannels->currentIndex();
if (channelsTabIndex >= 0)
{
DeviceUISet *deviceUI = m_deviceUIs[channelsTabIndex];
QList<QString> channelNames;
ui->channelDock->resetAvailableChannels();
if (deviceUI->m_deviceSourceEngine) // source device
{
m_pluginManager->listRxChannels(channelNames);
ui->channelDock->addAvailableChannels(channelNames);
}
else if (deviceUI->m_deviceSinkEngine) // sink device
{
m_pluginManager->listTxChannels(channelNames);
ui->channelDock->addAvailableChannels(channelNames);
}
else if (deviceUI->m_deviceMIMOEngine) // MIMO device
{
m_pluginManager->listMIMOChannels(channelNames);
ui->channelDock->addAvailableChannels(channelNames);
m_pluginManager->listRxChannels(channelNames);
ui->channelDock->addAvailableChannels(channelNames);
m_pluginManager->listTxChannels(channelNames);
ui->channelDock->addAvailableChannels(channelNames);
}
}
}
void MainWindow::updateStatus()
{
m_dateTimeWidget->setText(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss t"));