1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-09-03 13:47:50 -04:00

Massive UI revamping (v7): DeviceUISet: fixed load MIMO channel settings

This commit is contained in:
f4exb 2022-04-17 23:18:56 +02:00
parent 2c070f811e
commit 50a12b3a3f

View File

@ -268,7 +268,7 @@ void DeviceUISet::loadRxChannelSettings(const Preset *preset, PluginAPI *pluginA
PluginAPI::ChannelRegistrations *channelRegistrations = pluginAPI->getRxChannelRegistrations(); PluginAPI::ChannelRegistrations *channelRegistrations = pluginAPI->getRxChannelRegistrations();
// clear list // clear list
for(int i = 0; i < m_channelInstanceRegistrations.count(); i++) for (int i = 0; i < m_channelInstanceRegistrations.count(); i++)
{ {
qDebug("DeviceUISet::loadRxChannelSettings: destroying old channel [%s]", qDebug("DeviceUISet::loadRxChannelSettings: destroying old channel [%s]",
qPrintable(m_channelInstanceRegistrations[i].m_channelAPI->getURI())); qPrintable(m_channelInstanceRegistrations[i].m_channelAPI->getURI()));
@ -289,7 +289,7 @@ void DeviceUISet::loadRxChannelSettings(const Preset *preset, PluginAPI *pluginA
// create channel instance // create channel instance
for(int i = 0; i < channelRegistrations->count(); i++) for (int i = 0; i < channelRegistrations->count(); i++)
{ {
//if((*channelRegistrations)[i].m_channelIdURI == channelConfig.m_channelIdURI) //if((*channelRegistrations)[i].m_channelIdURI == channelConfig.m_channelIdURI)
if (ChannelUtils::compareChannelURIs((*channelRegistrations)[i].m_channelIdURI, channelConfig.m_channelIdURI)) if (ChannelUtils::compareChannelURIs((*channelRegistrations)[i].m_channelIdURI, channelConfig.m_channelIdURI))
@ -397,7 +397,7 @@ void DeviceUISet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginA
PluginAPI::ChannelRegistrations *channelRegistrations = pluginAPI->getTxChannelRegistrations(); PluginAPI::ChannelRegistrations *channelRegistrations = pluginAPI->getTxChannelRegistrations();
// clear list // clear list
for(int i = 0; i < m_channelInstanceRegistrations.count(); i++) for (int i = 0; i < m_channelInstanceRegistrations.count(); i++)
{ {
qDebug("DeviceUISet::loadTxChannelSettings: destroying old channel [%s]", qDebug("DeviceUISet::loadTxChannelSettings: destroying old channel [%s]",
qPrintable(m_channelInstanceRegistrations[i].m_channelAPI->getURI())); qPrintable(m_channelInstanceRegistrations[i].m_channelAPI->getURI()));
@ -410,7 +410,7 @@ void DeviceUISet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginA
m_deviceSet->clearChannels(); m_deviceSet->clearChannels();
qDebug("DeviceUISet::loadTxChannelSettings: %d channel(s) in preset", preset->getChannelCount()); qDebug("DeviceUISet::loadTxChannelSettings: %d channel(s) in preset", preset->getChannelCount());
for(int i = 0; i < preset->getChannelCount(); i++) for (int i = 0; i < preset->getChannelCount(); i++)
{ {
const Preset::ChannelConfig& channelConfig = preset->getChannelConfig(i); const Preset::ChannelConfig& channelConfig = preset->getChannelConfig(i);
ChannelGUI *txChannelGUI = nullptr; ChannelGUI *txChannelGUI = nullptr;
@ -418,7 +418,7 @@ void DeviceUISet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginA
// create channel instance // create channel instance
for(int i = 0; i < channelRegistrations->count(); i++) for (int i = 0; i < channelRegistrations->count(); i++)
{ {
if ((*channelRegistrations)[i].m_channelIdURI == channelConfig.m_channelIdURI) if ((*channelRegistrations)[i].m_channelIdURI == channelConfig.m_channelIdURI)
{ {
@ -522,11 +522,8 @@ void DeviceUISet::loadMIMOChannelSettings(const Preset *preset, PluginAPI *plugi
qDebug("DeviceUISet::loadMIMOChannelSettings: Loading preset [%s | %s]", qDebug("DeviceUISet::loadMIMOChannelSettings: Loading preset [%s | %s]",
qPrintable(preset->getGroup()), qPrintable(preset->getDescription())); qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
// Available channel plugins
PluginAPI::ChannelRegistrations *channelRegistrations = pluginAPI->getMIMOChannelRegistrations();
// clear list // clear list
for(int i = 0; i < m_channelInstanceRegistrations.count(); i++) for (int i = 0; i < m_channelInstanceRegistrations.count(); i++)
{ {
qDebug("DeviceUISet::loadMIMOChannelSettings: destroying old channel [%s]", qDebug("DeviceUISet::loadMIMOChannelSettings: destroying old channel [%s]",
qPrintable(m_channelInstanceRegistrations[i].m_channelAPI->getURI())); qPrintable(m_channelInstanceRegistrations[i].m_channelAPI->getURI()));
@ -541,79 +538,133 @@ void DeviceUISet::loadMIMOChannelSettings(const Preset *preset, PluginAPI *plugi
for (int i = 0; i < preset->getChannelCount(); i++) for (int i = 0; i < preset->getChannelCount(); i++)
{ {
const Preset::ChannelConfig& channelConfig = preset->getChannelConfig(i); const Preset::ChannelConfig& channelConfig = preset->getChannelConfig(i);
ChannelGUI *mimoChannelGUI = nullptr; ChannelGUI *channelGUI = nullptr;
ChannelAPI *channelAPI = nullptr; ChannelAPI *channelAPI = nullptr;
// create channel instance // Available MIMO channel plugins
PluginAPI::ChannelRegistrations *channelMIMORegistrations = pluginAPI->getMIMOChannelRegistrations();
for(int i = 0; i < channelRegistrations->count(); i++) // create MIMO channel instance
for (int i = 0; i < channelMIMORegistrations->count(); i++)
{ {
//if((*channelRegistrations)[i].m_channelIdURI == channelConfig.m_channelIdURI) if (ChannelUtils::compareChannelURIs((*channelMIMORegistrations)[i].m_channelIdURI, channelConfig.m_channelIdURI))
if (ChannelUtils::compareChannelURIs((*channelRegistrations)[i].m_channelIdURI, channelConfig.m_channelIdURI))
{ {
qDebug("DeviceUISet::loadMIMOChannelSettings: creating new channel [%s] from config [%s]", qDebug("DeviceUISet::loadMIMOChannelSettings: creating new MIMO channel [%s] from config [%s]",
qPrintable((*channelRegistrations)[i].m_channelIdURI), qPrintable((*channelMIMORegistrations)[i].m_channelIdURI),
qPrintable(channelConfig.m_channelIdURI)); qPrintable(channelConfig.m_channelIdURI));
MIMOChannel *mimoChannel; MIMOChannel *mimoChannel;
PluginInterface *pluginInterface = (*channelRegistrations)[i].m_plugin; PluginInterface *pluginInterface = (*channelMIMORegistrations)[i].m_plugin;
pluginInterface->createMIMOChannel(m_deviceAPI, &mimoChannel, &channelAPI); pluginInterface->createMIMOChannel(m_deviceAPI, &mimoChannel, &channelAPI);
mimoChannelGUI = pluginInterface->createMIMOChannelGUI(this, mimoChannel); channelGUI = pluginInterface->createMIMOChannelGUI(this, mimoChannel);
mimoChannelGUI->setDisplayedame(pluginInterface->getPluginDescriptor().displayedName); channelGUI->setDisplayedame(pluginInterface->getPluginDescriptor().displayedName);
registerChannelInstance(channelAPI, mimoChannelGUI); registerChannelInstance(channelAPI, channelGUI);
QObject::connect( QObject::connect(
mimoChannelGUI, channelGUI,
&ChannelGUI::closing, &ChannelGUI::closing,
this, this,
[=](){ this->handleChannelGUIClosing(mimoChannelGUI); }, [=](){ this->handleChannelGUIClosing(channelGUI); },
Qt::QueuedConnection Qt::QueuedConnection
); );
break; break;
} }
} }
if (mimoChannelGUI && channelAPI) // Available Rx channel plugins
PluginAPI::ChannelRegistrations *channelRxRegistrations = pluginAPI->getRxChannelRegistrations();
// create Rx channel instance
for (int i = 0; i < channelRxRegistrations->count(); i++)
{
if (ChannelUtils::compareChannelURIs((*channelRxRegistrations)[i].m_channelIdURI, channelConfig.m_channelIdURI))
{
qDebug("DeviceUISet::loadMIMOChannelSettings: creating new Rx channel [%s] from config [%s]",
qPrintable((*channelRxRegistrations)[i].m_channelIdURI),
qPrintable(channelConfig.m_channelIdURI));
BasebandSampleSink *rxChannel;
PluginInterface *pluginInterface = (*channelRxRegistrations)[i].m_plugin;
pluginInterface->createRxChannel(m_deviceAPI, &rxChannel, &channelAPI);
channelGUI = pluginInterface->createRxChannelGUI(this, rxChannel);
channelGUI->setDisplayedame(pluginInterface->getPluginDescriptor().displayedName);
registerRxChannelInstance(channelAPI, channelGUI);
QObject::connect(
channelGUI,
&ChannelGUI::closing,
this,
[=](){ this->handleChannelGUIClosing(channelGUI); },
Qt::QueuedConnection
);
break;
}
}
// Available Tx channel plugins
PluginAPI::ChannelRegistrations *channelTxRegistrations = pluginAPI->getTxChannelRegistrations();
// create Tx channel instance
for (int i = 0; i < channelTxRegistrations->count(); i++)
{
if (ChannelUtils::compareChannelURIs((*channelTxRegistrations)[i].m_channelIdURI, channelConfig.m_channelIdURI))
{
qDebug("DeviceUISet::loadMIMOChannelSettings: creating new Tx channel [%s] from config [%s]",
qPrintable((*channelTxRegistrations)[i].m_channelIdURI),
qPrintable(channelConfig.m_channelIdURI));
BasebandSampleSource *txChannel;
PluginInterface *pluginInterface = (*channelTxRegistrations)[i].m_plugin;
pluginInterface->createTxChannel(m_deviceAPI, &txChannel, &channelAPI);
channelGUI = pluginInterface->createTxChannelGUI(this, txChannel);
channelGUI->setDisplayedame(pluginInterface->getPluginDescriptor().displayedName);
registerTxChannelInstance(channelAPI, channelGUI);
break;
}
}
if (channelGUI && channelAPI)
{ {
qDebug("DeviceUISet::loadMIMOChannelSettings: deserializing channel [%s]", qPrintable(channelConfig.m_channelIdURI)); qDebug("DeviceUISet::loadMIMOChannelSettings: deserializing channel [%s]", qPrintable(channelConfig.m_channelIdURI));
mimoChannelGUI->deserialize(channelConfig.m_config); channelGUI->deserialize(channelConfig.m_config);
int originalWorkspaceIndex = mimoChannelGUI->getWorkspaceIndex(); int originalWorkspaceIndex = channelGUI->getWorkspaceIndex();
if (workspaces && (workspaces->size() > 0) && (originalWorkspaceIndex < workspaces->size())) // restore in original workspace if (workspaces && (workspaces->size() > 0) && (originalWorkspaceIndex < workspaces->size())) // restore in original workspace
{ {
(*workspaces)[originalWorkspaceIndex]->addToMdiArea((QMdiSubWindow*) mimoChannelGUI); (*workspaces)[originalWorkspaceIndex]->addToMdiArea((QMdiSubWindow*) channelGUI);
} }
else if (currentWorkspace) // restore in current workspace else if (currentWorkspace) // restore in current workspace
{ {
mimoChannelGUI->setWorkspaceIndex(currentWorkspace->getIndex()); channelGUI->setWorkspaceIndex(currentWorkspace->getIndex());
currentWorkspace->addToMdiArea((QMdiSubWindow*) mimoChannelGUI); currentWorkspace->addToMdiArea((QMdiSubWindow*) channelGUI);
} }
if (mimoChannelGUI->getHidden()) { if (channelGUI->getHidden()) {
mimoChannelGUI->hide(); channelGUI->hide();
} }
mimoChannelGUI->restoreGeometry(mimoChannelGUI->getGeometryBytes()); channelGUI->restoreGeometry(channelGUI->getGeometryBytes());
mimoChannelGUI->setDeviceType(ChannelGUI::DeviceRx); channelGUI->setDeviceType(ChannelGUI::DeviceRx);
mimoChannelGUI->setDeviceSetIndex(m_deviceSetIndex); channelGUI->setDeviceSetIndex(m_deviceSetIndex);
mimoChannelGUI->setIndex(channelAPI->getIndexInDeviceSet()); channelGUI->setIndex(channelAPI->getIndexInDeviceSet());
mimoChannelGUI->setToolTip(m_deviceAPI->getSamplingDeviceDisplayName()); channelGUI->setToolTip(m_deviceAPI->getSamplingDeviceDisplayName());
QObject::connect( QObject::connect(
mimoChannelGUI, channelGUI,
&ChannelGUI::closing,
this,
[=](){ this->handleChannelGUIClosing(channelGUI); },
Qt::QueuedConnection
);
QObject::connect(
channelGUI,
&ChannelGUI::moveToWorkspace, &ChannelGUI::moveToWorkspace,
this, this,
[=](int wsIndexDest){ MainWindow::getInstance()->channelMove(mimoChannelGUI, wsIndexDest); } [=](int wsIndexDest){ MainWindow::getInstance()->channelMove(channelGUI, wsIndexDest); }
); );
QObject::connect( QObject::connect(
mimoChannelGUI, channelGUI,
&ChannelGUI::duplicateChannelEmitted, &ChannelGUI::duplicateChannelEmitted,
this, this,
[=](){ MainWindow::getInstance()->channelDuplicate(mimoChannelGUI); } [=](){ MainWindow::getInstance()->channelDuplicate(channelGUI); }
); );
QObject::connect( QObject::connect(
mimoChannelGUI, channelGUI,
&ChannelGUI::moveToDeviceSet, &ChannelGUI::moveToDeviceSet,
this, this,
[=](int dsIndexDest){ MainWindow::getInstance()->channelMoveToDeviceSet(mimoChannelGUI, dsIndexDest); } [=](int dsIndexDest){ MainWindow::getInstance()->channelMoveToDeviceSet(channelGUI, dsIndexDest); }
); );
} }
} }