mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-05-29 13:32:26 -04:00
Massive UI revamping (v7): duplicate channel
This commit is contained in:
parent
e366f5eba6
commit
edd9cb18d7
@ -91,6 +91,12 @@ ChannelGUI::ChannelGUI(QWidget *parent) :
|
|||||||
m_closeButton->setIcon(closeIcon);
|
m_closeButton->setIcon(closeIcon);
|
||||||
m_closeButton->setToolTip("Close channel");
|
m_closeButton->setToolTip("Close channel");
|
||||||
|
|
||||||
|
m_duplicateButton = new QPushButton();
|
||||||
|
m_duplicateButton->setFixedSize(20, 20);
|
||||||
|
QIcon m_duplicateIcon(":/duplicate.png");
|
||||||
|
m_duplicateButton->setIcon(m_duplicateIcon);
|
||||||
|
m_duplicateButton->setToolTip("Duplicate channel");
|
||||||
|
|
||||||
m_statusFrequency = new QLabel();
|
m_statusFrequency = new QLabel();
|
||||||
// QFont font = m_statusFrequency->font();
|
// QFont font = m_statusFrequency->font();
|
||||||
// font.setPointSize(8);
|
// font.setPointSize(8);
|
||||||
@ -135,7 +141,8 @@ ChannelGUI::ChannelGUI(QWidget *parent) :
|
|||||||
|
|
||||||
m_bottomLayout = new QHBoxLayout();
|
m_bottomLayout = new QHBoxLayout();
|
||||||
m_bottomLayout->setContentsMargins(0, 0, 0, 0);
|
m_bottomLayout->setContentsMargins(0, 0, 0, 0);
|
||||||
m_bottomLayout->addWidget(m_statusFrequency );
|
m_bottomLayout->addWidget(m_duplicateButton);
|
||||||
|
m_bottomLayout->addWidget(m_statusFrequency);
|
||||||
m_bottomLayout->addWidget(m_statusLabel);
|
m_bottomLayout->addWidget(m_statusLabel);
|
||||||
m_sizeGripBottomRight = new QSizeGrip(this);
|
m_sizeGripBottomRight = new QSizeGrip(this);
|
||||||
m_sizeGripBottomRight->setStyleSheet("QSizeGrip { background-color: rgb(128, 128, 128); width: 10px; height: 10px; }");
|
m_sizeGripBottomRight->setStyleSheet("QSizeGrip { background-color: rgb(128, 128, 128); width: 10px; height: 10px; }");
|
||||||
@ -157,6 +164,7 @@ ChannelGUI::ChannelGUI(QWidget *parent) :
|
|||||||
connect(this, SIGNAL(forceShrink()), this, SLOT(shrinkWindow()));
|
connect(this, SIGNAL(forceShrink()), this, SLOT(shrinkWindow()));
|
||||||
connect(m_hideButton, SIGNAL(clicked()), this, SLOT(hide()));
|
connect(m_hideButton, SIGNAL(clicked()), this, SLOT(hide()));
|
||||||
connect(m_closeButton, SIGNAL(clicked()), this, SLOT(close()));
|
connect(m_closeButton, SIGNAL(clicked()), this, SLOT(close()));
|
||||||
|
connect(m_duplicateButton, SIGNAL(clicked()), this, SLOT(duplicateChannel()));
|
||||||
|
|
||||||
connect(
|
connect(
|
||||||
m_rollupContents,
|
m_rollupContents,
|
||||||
@ -270,6 +278,12 @@ void ChannelGUI::onWidgetRolled(QWidget *widget, bool show)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ChannelGUI::duplicateChannel()
|
||||||
|
{
|
||||||
|
qDebug("ChannelGUI::duplicateChannel");
|
||||||
|
emit duplicateChannelEmitted();
|
||||||
|
}
|
||||||
|
|
||||||
void ChannelGUI::shrinkWindow()
|
void ChannelGUI::shrinkWindow()
|
||||||
{
|
{
|
||||||
qDebug("ChannelGUI::shrinkWindow");
|
qDebug("ChannelGUI::shrinkWindow");
|
||||||
|
@ -78,7 +78,7 @@ public:
|
|||||||
void setIndex(int index);
|
void setIndex(int index);
|
||||||
int getIndex() const { return m_channelIndex; }
|
int getIndex() const { return m_channelIndex; }
|
||||||
void setDeviceSetIndex(int index);
|
void setDeviceSetIndex(int index);
|
||||||
int getDeviceSetIndex() const { return m_channelIndex; }
|
int getDeviceSetIndex() const { return m_deviceSetIndex; }
|
||||||
void setStatusFrequency(qint64 frequency);
|
void setStatusFrequency(qint64 frequency);
|
||||||
void setStatusText(const QString& text);
|
void setStatusText(const QString& text);
|
||||||
|
|
||||||
@ -113,6 +113,7 @@ private:
|
|||||||
QPushButton *m_shrinkButton;
|
QPushButton *m_shrinkButton;
|
||||||
QPushButton *m_hideButton;
|
QPushButton *m_hideButton;
|
||||||
QPushButton *m_closeButton;
|
QPushButton *m_closeButton;
|
||||||
|
QPushButton *m_duplicateButton;
|
||||||
QLabel *m_statusFrequency;
|
QLabel *m_statusFrequency;
|
||||||
QLabel *m_statusLabel;
|
QLabel *m_statusLabel;
|
||||||
QVBoxLayout *m_layouts;
|
QVBoxLayout *m_layouts;
|
||||||
@ -130,11 +131,13 @@ private slots:
|
|||||||
void showHelp();
|
void showHelp();
|
||||||
void openMoveToWorkspaceDialog();
|
void openMoveToWorkspaceDialog();
|
||||||
void onWidgetRolled(QWidget *widget, bool show);
|
void onWidgetRolled(QWidget *widget, bool show);
|
||||||
|
void duplicateChannel();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void closing();
|
void closing();
|
||||||
void moveToWorkspace(int workspaceIndex);
|
void moveToWorkspace(int workspaceIndex);
|
||||||
void forceShrink();
|
void forceShrink();
|
||||||
|
void duplicateChannelEmitted();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SDRGUI_CHANNEL_CHANNELGUI_H_
|
#endif // SDRGUI_CHANNEL_CHANNELGUI_H_
|
||||||
|
@ -141,7 +141,7 @@ signals:
|
|||||||
void deviceChange(int newDeviceIndex);
|
void deviceChange(int newDeviceIndex);
|
||||||
void showSpectrum(int deviceSetIndex);
|
void showSpectrum(int deviceSetIndex);
|
||||||
void showAllChannels(int deviceSetIndex);
|
void showAllChannels(int deviceSetIndex);
|
||||||
void addChannelEmitted(int channelIndex);
|
void addChannelEmitted(int channelPluginIndex);
|
||||||
void deviceSetPresetsDialogRequested(QPoint, DeviceGUI*);
|
void deviceSetPresetsDialogRequested(QPoint, DeviceGUI*);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -330,6 +330,12 @@ void DeviceUISet::loadRxChannelSettings(const Preset *preset, PluginAPI *pluginA
|
|||||||
this,
|
this,
|
||||||
[=](int wsIndexDest){ MainWindow::getInstance()->channelMove(rxChannelGUI, wsIndexDest); }
|
[=](int wsIndexDest){ MainWindow::getInstance()->channelMove(rxChannelGUI, wsIndexDest); }
|
||||||
);
|
);
|
||||||
|
QObject::connect(
|
||||||
|
rxChannelGUI,
|
||||||
|
&ChannelGUI::duplicateChannelEmitted,
|
||||||
|
this,
|
||||||
|
[=](){ MainWindow::getInstance()->channelDuplicate(rxChannelGUI); }
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -444,6 +450,12 @@ void DeviceUISet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginA
|
|||||||
this,
|
this,
|
||||||
[=](int wsIndexDest){ MainWindow::getInstance()->channelMove(txChannelGUI, wsIndexDest); }
|
[=](int wsIndexDest){ MainWindow::getInstance()->channelMove(txChannelGUI, wsIndexDest); }
|
||||||
);
|
);
|
||||||
|
QObject::connect(
|
||||||
|
txChannelGUI,
|
||||||
|
&ChannelGUI::duplicateChannelEmitted,
|
||||||
|
this,
|
||||||
|
[=](){ MainWindow::getInstance()->channelDuplicate(txChannelGUI); }
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -560,6 +572,12 @@ void DeviceUISet::loadMIMOChannelSettings(const Preset *preset, PluginAPI *plugi
|
|||||||
this,
|
this,
|
||||||
[=](int wsIndexDest){ MainWindow::getInstance()->channelMove(mimoChannelGUI, wsIndexDest); }
|
[=](int wsIndexDest){ MainWindow::getInstance()->channelMove(mimoChannelGUI, wsIndexDest); }
|
||||||
);
|
);
|
||||||
|
QObject::connect(
|
||||||
|
mimoChannelGUI,
|
||||||
|
&ChannelGUI::duplicateChannelEmitted,
|
||||||
|
this,
|
||||||
|
[=](){ MainWindow::getInstance()->channelDuplicate(mimoChannelGUI); }
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -48,7 +48,7 @@ private slots:
|
|||||||
void apply(QAbstractButton*);
|
void apply(QAbstractButton*);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void addChannel(int);
|
void addChannel(int channelPluginIndex);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* SDRGUI_GUI_CHANNELADDDIALOG_H_ */
|
#endif /* SDRGUI_GUI_CHANNELADDDIALOG_H_ */
|
||||||
|
@ -316,7 +316,7 @@ void MainWindow::sampleSourceAdd(Workspace *deviceWorkspace, Workspace *spectrum
|
|||||||
m_deviceUIs.back()->m_deviceGUI,
|
m_deviceUIs.back()->m_deviceGUI,
|
||||||
&DeviceGUI::addChannelEmitted,
|
&DeviceGUI::addChannelEmitted,
|
||||||
this,
|
this,
|
||||||
[=](int channelIndex){ this->channelAddClicked(deviceWorkspace, deviceSetIndex, channelIndex); }
|
[=](int channelPluginIndex){ this->channelAddClicked(deviceWorkspace, deviceSetIndex, channelPluginIndex); }
|
||||||
);
|
);
|
||||||
|
|
||||||
deviceWorkspace->addToMdiArea(m_deviceUIs.back()->m_deviceGUI);
|
deviceWorkspace->addToMdiArea(m_deviceUIs.back()->m_deviceGUI);
|
||||||
@ -531,7 +531,7 @@ void MainWindow::sampleSinkAdd(Workspace *deviceWorkspace, Workspace *spectrumWo
|
|||||||
m_deviceUIs.back()->m_deviceGUI,
|
m_deviceUIs.back()->m_deviceGUI,
|
||||||
&DeviceGUI::addChannelEmitted,
|
&DeviceGUI::addChannelEmitted,
|
||||||
this,
|
this,
|
||||||
[=](int channelIndex){ this->channelAddClicked(deviceWorkspace, deviceSetIndex, channelIndex); }
|
[=](int channelPluginIndex){ this->channelAddClicked(deviceWorkspace, deviceSetIndex, channelPluginIndex); }
|
||||||
);
|
);
|
||||||
|
|
||||||
deviceWorkspace->addToMdiArea(m_deviceUIs.back()->m_deviceGUI);
|
deviceWorkspace->addToMdiArea(m_deviceUIs.back()->m_deviceGUI);
|
||||||
@ -754,7 +754,7 @@ void MainWindow::sampleMIMOAdd(Workspace *deviceWorkspace, Workspace *spectrumWo
|
|||||||
m_deviceUIs.back()->m_deviceGUI,
|
m_deviceUIs.back()->m_deviceGUI,
|
||||||
&DeviceGUI::addChannelEmitted,
|
&DeviceGUI::addChannelEmitted,
|
||||||
this,
|
this,
|
||||||
[=](int channelIndex){ this->channelAddClicked(deviceWorkspace, deviceSetIndex, channelIndex); }
|
[=](int channelPluginIndex){ this->channelAddClicked(deviceWorkspace, deviceSetIndex, channelPluginIndex); }
|
||||||
);
|
);
|
||||||
|
|
||||||
deviceWorkspace->addToMdiArea(m_deviceUIs.back()->m_deviceGUI);
|
deviceWorkspace->addToMdiArea(m_deviceUIs.back()->m_deviceGUI);
|
||||||
@ -2059,7 +2059,7 @@ void MainWindow::sampleSourceChange(int deviceSetIndex, int newDeviceIndex, Work
|
|||||||
deviceUISet->m_deviceGUI,
|
deviceUISet->m_deviceGUI,
|
||||||
&DeviceGUI::addChannelEmitted,
|
&DeviceGUI::addChannelEmitted,
|
||||||
this,
|
this,
|
||||||
[=](int channelIndex){ this->channelAddClicked(workspace, deviceSetIndex, channelIndex); }
|
[=](int channelPluginIndex){ this->channelAddClicked(workspace, deviceSetIndex, channelPluginIndex); }
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2088,7 +2088,7 @@ void MainWindow::sampleSinkChange(int deviceSetIndex, int newDeviceIndex, Worksp
|
|||||||
deviceUISet->m_deviceGUI,
|
deviceUISet->m_deviceGUI,
|
||||||
&DeviceGUI::addChannelEmitted,
|
&DeviceGUI::addChannelEmitted,
|
||||||
this,
|
this,
|
||||||
[=](int channelIndex){ this->channelAddClicked(workspace, deviceSetIndex, channelIndex); }
|
[=](int channelPluginIndex){ this->channelAddClicked(workspace, deviceSetIndex, channelPluginIndex); }
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2116,14 +2116,189 @@ void MainWindow::sampleMIMOChange(int deviceSetIndex, int newDeviceIndex, Worksp
|
|||||||
deviceUISet->m_deviceGUI,
|
deviceUISet->m_deviceGUI,
|
||||||
&DeviceGUI::addChannelEmitted,
|
&DeviceGUI::addChannelEmitted,
|
||||||
this,
|
this,
|
||||||
[=](int channelIndex){ this->channelAddClicked(workspace, deviceSetIndex, channelIndex); }
|
[=](int channelPluginIndex){ this->channelAddClicked(workspace, deviceSetIndex, channelPluginIndex); }
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::channelAddClicked(Workspace *workspace, int deviceSetIndex, int channelIndex)
|
void MainWindow::channelDuplicate(ChannelGUI *sourceChannelGUI)
|
||||||
{
|
{
|
||||||
if (deviceSetIndex >= 0)
|
int deviceSetIndex = sourceChannelGUI->getDeviceSetIndex();
|
||||||
|
int channelIndex = sourceChannelGUI->getIndex();
|
||||||
|
|
||||||
|
qDebug("MainWindow::channelDuplicate: %s at %d:%d in workspace %d",
|
||||||
|
qPrintable(sourceChannelGUI->getTitle()), deviceSetIndex, channelIndex, sourceChannelGUI->getWorkspaceIndex());
|
||||||
|
|
||||||
|
if (deviceSetIndex < (int) m_deviceUIs.size())
|
||||||
|
{
|
||||||
|
DeviceUISet *deviceUI = m_deviceUIs[deviceSetIndex];
|
||||||
|
ChannelAPI *sourceChannelAPI = deviceUI->getChannelAt(channelIndex);
|
||||||
|
DeviceAPI *deviceAPI = deviceUI->m_deviceAPI;
|
||||||
|
ChannelGUI *gui = nullptr;
|
||||||
|
|
||||||
|
if (deviceUI->m_deviceSourceEngine) // source device => Rx channels
|
||||||
|
{
|
||||||
|
PluginAPI::ChannelRegistrations *channelRegistrations = m_pluginManager->getRxChannelRegistrations();
|
||||||
|
PluginInterface *pluginInterface = nullptr;
|
||||||
|
|
||||||
|
for (const auto& channelRegistration : *channelRegistrations)
|
||||||
|
{
|
||||||
|
if (channelRegistration.m_channelIdURI == sourceChannelAPI->getURI())
|
||||||
|
{
|
||||||
|
pluginInterface = channelRegistration.m_plugin;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pluginInterface)
|
||||||
|
{
|
||||||
|
ChannelAPI *channelAPI;
|
||||||
|
BasebandSampleSink *rxChannel;
|
||||||
|
pluginInterface->createRxChannel(deviceUI->m_deviceAPI, &rxChannel, &channelAPI);
|
||||||
|
gui = pluginInterface->createRxChannelGUI(deviceUI, rxChannel);
|
||||||
|
deviceUI->registerRxChannelInstance(channelAPI, gui);
|
||||||
|
gui->setDeviceType(ChannelGUI::DeviceRx);
|
||||||
|
gui->setIndex(channelAPI->getIndexInDeviceSet());
|
||||||
|
QByteArray b = sourceChannelGUI->serialize();
|
||||||
|
gui->deserialize(b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (deviceUI->m_deviceSinkEngine) // sink device => Tx channels
|
||||||
|
{
|
||||||
|
PluginAPI::ChannelRegistrations *channelRegistrations = m_pluginManager->getTxChannelRegistrations(); // Available channel plugins
|
||||||
|
PluginInterface *pluginInterface = nullptr;
|
||||||
|
|
||||||
|
for (const auto& channelRegistration : *channelRegistrations)
|
||||||
|
{
|
||||||
|
if (channelRegistration.m_channelIdURI == sourceChannelAPI->getURI())
|
||||||
|
{
|
||||||
|
pluginInterface = channelRegistration.m_plugin;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pluginInterface)
|
||||||
|
{
|
||||||
|
ChannelAPI *channelAPI;
|
||||||
|
BasebandSampleSource *txChannel;
|
||||||
|
pluginInterface->createTxChannel(deviceUI->m_deviceAPI, &txChannel, &channelAPI);
|
||||||
|
gui = pluginInterface->createTxChannelGUI(deviceUI, txChannel);
|
||||||
|
deviceUI->registerTxChannelInstance(channelAPI, gui);
|
||||||
|
gui->setDeviceType(ChannelGUI::DeviceTx);
|
||||||
|
gui->setIndex(channelAPI->getIndexInDeviceSet());
|
||||||
|
QByteArray b = sourceChannelGUI->serialize();
|
||||||
|
gui->deserialize(b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (deviceUI->m_deviceMIMOEngine) // MIMO device => Any type of channel is possible
|
||||||
|
{
|
||||||
|
PluginAPI::ChannelRegistrations *rxChannelRegistrations = m_pluginManager->getRxChannelRegistrations();
|
||||||
|
PluginAPI::ChannelRegistrations *txChannelRegistrations = m_pluginManager->getTxChannelRegistrations();
|
||||||
|
PluginAPI::ChannelRegistrations *mimoChannelRegistrations = m_pluginManager->getMIMOChannelRegistrations();
|
||||||
|
PluginInterface *pluginInterface = nullptr;
|
||||||
|
|
||||||
|
for (const auto& channelRegistration : *rxChannelRegistrations)
|
||||||
|
{
|
||||||
|
if (channelRegistration.m_channelIdURI == sourceChannelAPI->getURI())
|
||||||
|
{
|
||||||
|
pluginInterface = channelRegistration.m_plugin;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pluginInterface) // Rx channel
|
||||||
|
{
|
||||||
|
ChannelAPI *channelAPI;
|
||||||
|
BasebandSampleSink *rxChannel;
|
||||||
|
pluginInterface->createRxChannel(deviceUI->m_deviceAPI, &rxChannel, &channelAPI);
|
||||||
|
gui = pluginInterface->createRxChannelGUI(deviceUI, rxChannel);
|
||||||
|
deviceUI->registerRxChannelInstance(channelAPI, gui);
|
||||||
|
gui->setDeviceType(ChannelGUI::DeviceMIMO);
|
||||||
|
gui->setIndex(channelAPI->getIndexInDeviceSet());
|
||||||
|
QByteArray b = sourceChannelGUI->serialize();
|
||||||
|
gui->deserialize(b);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (const auto& channelRegistration : *txChannelRegistrations)
|
||||||
|
{
|
||||||
|
if (channelRegistration.m_channelIdURI == sourceChannelAPI->getURI())
|
||||||
|
{
|
||||||
|
pluginInterface = channelRegistration.m_plugin;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pluginInterface) // Tx channel
|
||||||
|
{
|
||||||
|
ChannelAPI *channelAPI;
|
||||||
|
BasebandSampleSource *txChannel;
|
||||||
|
pluginInterface->createTxChannel(deviceUI->m_deviceAPI, &txChannel, &channelAPI);
|
||||||
|
gui = pluginInterface->createTxChannelGUI(deviceUI, txChannel);
|
||||||
|
deviceUI->registerTxChannelInstance(channelAPI, gui);
|
||||||
|
gui->setDeviceType(ChannelGUI::DeviceMIMO);
|
||||||
|
gui->setIndex(channelAPI->getIndexInDeviceSet());
|
||||||
|
QByteArray b = sourceChannelGUI->serialize();
|
||||||
|
gui->deserialize(b);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (const auto& channelRegistration : *mimoChannelRegistrations)
|
||||||
|
{
|
||||||
|
if (channelRegistration.m_channelIdURI == sourceChannelAPI->getURI())
|
||||||
|
{
|
||||||
|
pluginInterface = channelRegistration.m_plugin;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pluginInterface)
|
||||||
|
{
|
||||||
|
ChannelAPI *channelAPI;
|
||||||
|
MIMOChannel *mimoChannel;
|
||||||
|
pluginInterface->createMIMOChannel(deviceUI->m_deviceAPI, &mimoChannel, &channelAPI);
|
||||||
|
gui = pluginInterface->createMIMOChannelGUI(deviceUI, mimoChannel);
|
||||||
|
deviceUI->registerChannelInstance(channelAPI, gui);
|
||||||
|
gui->setDeviceType(ChannelGUI::DeviceMIMO);
|
||||||
|
gui->setIndex(channelAPI->getIndexInDeviceSet());
|
||||||
|
QByteArray b = sourceChannelGUI->serialize();
|
||||||
|
gui->deserialize(b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int workspaceIndex = sourceChannelGUI->getWorkspaceIndex();
|
||||||
|
Workspace *workspace = workspaceIndex < m_workspaces.size() ? m_workspaces[sourceChannelGUI->getWorkspaceIndex()] : nullptr;
|
||||||
|
|
||||||
|
if (gui && workspace)
|
||||||
|
{
|
||||||
|
QObject::connect(
|
||||||
|
gui,
|
||||||
|
&ChannelGUI::moveToWorkspace,
|
||||||
|
this,
|
||||||
|
[=](int wsIndexDest){ this->channelMove(gui, wsIndexDest); }
|
||||||
|
);
|
||||||
|
QObject::connect(
|
||||||
|
gui,
|
||||||
|
&ChannelGUI::duplicateChannelEmitted,
|
||||||
|
this,
|
||||||
|
[=](){ this->channelDuplicate(gui); }
|
||||||
|
);
|
||||||
|
|
||||||
|
gui->setDeviceSetIndex(deviceSetIndex);
|
||||||
|
gui->setToolTip(deviceAPI->getSamplingDeviceDisplayName());
|
||||||
|
gui->setWorkspaceIndex(workspace->getIndex());
|
||||||
|
qDebug("MainWindow::channelDuplicate: adding %s to workspace #%d",
|
||||||
|
qPrintable(gui->getTitle()), workspace->getIndex());
|
||||||
|
workspace->addToMdiArea((QMdiSubWindow*) gui);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::channelAddClicked(Workspace *workspace, int deviceSetIndex, int channelPluginIndex)
|
||||||
|
{
|
||||||
|
if (deviceSetIndex < (int) m_deviceUIs.size())
|
||||||
{
|
{
|
||||||
DeviceUISet *deviceUI = m_deviceUIs[deviceSetIndex];
|
DeviceUISet *deviceUI = m_deviceUIs[deviceSetIndex];
|
||||||
ChannelGUI *gui = nullptr;
|
ChannelGUI *gui = nullptr;
|
||||||
@ -2132,7 +2307,7 @@ void MainWindow::channelAddClicked(Workspace *workspace, int deviceSetIndex, int
|
|||||||
if (deviceUI->m_deviceSourceEngine) // source device => Rx channels
|
if (deviceUI->m_deviceSourceEngine) // source device => Rx channels
|
||||||
{
|
{
|
||||||
PluginAPI::ChannelRegistrations *channelRegistrations = m_pluginManager->getRxChannelRegistrations(); // Available channel plugins
|
PluginAPI::ChannelRegistrations *channelRegistrations = m_pluginManager->getRxChannelRegistrations(); // Available channel plugins
|
||||||
PluginInterface *pluginInterface = (*channelRegistrations)[channelIndex].m_plugin;
|
PluginInterface *pluginInterface = (*channelRegistrations)[channelPluginIndex].m_plugin;
|
||||||
ChannelAPI *channelAPI;
|
ChannelAPI *channelAPI;
|
||||||
BasebandSampleSink *rxChannel;
|
BasebandSampleSink *rxChannel;
|
||||||
pluginInterface->createRxChannel(deviceUI->m_deviceAPI, &rxChannel, &channelAPI);
|
pluginInterface->createRxChannel(deviceUI->m_deviceAPI, &rxChannel, &channelAPI);
|
||||||
@ -2144,7 +2319,7 @@ void MainWindow::channelAddClicked(Workspace *workspace, int deviceSetIndex, int
|
|||||||
else if (deviceUI->m_deviceSinkEngine) // sink device => Tx channels
|
else if (deviceUI->m_deviceSinkEngine) // sink device => Tx channels
|
||||||
{
|
{
|
||||||
PluginAPI::ChannelRegistrations *channelRegistrations = m_pluginManager->getTxChannelRegistrations(); // Available channel plugins
|
PluginAPI::ChannelRegistrations *channelRegistrations = m_pluginManager->getTxChannelRegistrations(); // Available channel plugins
|
||||||
PluginInterface *pluginInterface = (*channelRegistrations)[channelIndex].m_plugin;
|
PluginInterface *pluginInterface = (*channelRegistrations)[channelPluginIndex].m_plugin;
|
||||||
ChannelAPI *channelAPI;
|
ChannelAPI *channelAPI;
|
||||||
BasebandSampleSource *txChannel;
|
BasebandSampleSource *txChannel;
|
||||||
pluginInterface->createTxChannel(deviceUI->m_deviceAPI, &txChannel, &channelAPI);
|
pluginInterface->createTxChannel(deviceUI->m_deviceAPI, &txChannel, &channelAPI);
|
||||||
@ -2159,12 +2334,12 @@ void MainWindow::channelAddClicked(Workspace *workspace, int deviceSetIndex, int
|
|||||||
int nbRxChannels = deviceUI->getNumberOfAvailableRxChannels();
|
int nbRxChannels = deviceUI->getNumberOfAvailableRxChannels();
|
||||||
int nbTxChannels = deviceUI->getNumberOfAvailableTxChannels();
|
int nbTxChannels = deviceUI->getNumberOfAvailableTxChannels();
|
||||||
qDebug("MainWindow::channelAddClicked: MIMO: dev %d : nbMIMO: %d nbRx: %d nbTx: %d selected: %d",
|
qDebug("MainWindow::channelAddClicked: MIMO: dev %d : nbMIMO: %d nbRx: %d nbTx: %d selected: %d",
|
||||||
deviceSetIndex, nbMIMOChannels, nbRxChannels, nbTxChannels, channelIndex);
|
deviceSetIndex, nbMIMOChannels, nbRxChannels, nbTxChannels, channelPluginIndex);
|
||||||
|
|
||||||
if (channelIndex < nbMIMOChannels)
|
if (channelPluginIndex < nbMIMOChannels)
|
||||||
{
|
{
|
||||||
PluginAPI::ChannelRegistrations *channelRegistrations = m_pluginManager->getMIMOChannelRegistrations(); // Available channel plugins
|
PluginAPI::ChannelRegistrations *channelRegistrations = m_pluginManager->getMIMOChannelRegistrations(); // Available channel plugins
|
||||||
PluginInterface *pluginInterface = (*channelRegistrations)[channelIndex].m_plugin;
|
PluginInterface *pluginInterface = (*channelRegistrations)[channelPluginIndex].m_plugin;
|
||||||
ChannelAPI *channelAPI;
|
ChannelAPI *channelAPI;
|
||||||
MIMOChannel *mimoChannel;
|
MIMOChannel *mimoChannel;
|
||||||
pluginInterface->createMIMOChannel(deviceUI->m_deviceAPI, &mimoChannel, &channelAPI);
|
pluginInterface->createMIMOChannel(deviceUI->m_deviceAPI, &mimoChannel, &channelAPI);
|
||||||
@ -2172,10 +2347,10 @@ void MainWindow::channelAddClicked(Workspace *workspace, int deviceSetIndex, int
|
|||||||
deviceUI->registerChannelInstance(channelAPI, gui);
|
deviceUI->registerChannelInstance(channelAPI, gui);
|
||||||
gui->setIndex(channelAPI->getIndexInDeviceSet());
|
gui->setIndex(channelAPI->getIndexInDeviceSet());
|
||||||
}
|
}
|
||||||
else if (channelIndex < nbMIMOChannels + nbRxChannels) // Rx
|
else if (channelPluginIndex < nbMIMOChannels + nbRxChannels) // Rx
|
||||||
{
|
{
|
||||||
PluginAPI::ChannelRegistrations *channelRegistrations = m_pluginManager->getRxChannelRegistrations(); // Available channel plugins
|
PluginAPI::ChannelRegistrations *channelRegistrations = m_pluginManager->getRxChannelRegistrations(); // Available channel plugins
|
||||||
PluginInterface *pluginInterface = (*channelRegistrations)[channelIndex - nbMIMOChannels].m_plugin;
|
PluginInterface *pluginInterface = (*channelRegistrations)[channelPluginIndex - nbMIMOChannels].m_plugin;
|
||||||
ChannelAPI *channelAPI;
|
ChannelAPI *channelAPI;
|
||||||
BasebandSampleSink *rxChannel;
|
BasebandSampleSink *rxChannel;
|
||||||
pluginInterface->createRxChannel(deviceUI->m_deviceAPI, &rxChannel, &channelAPI);
|
pluginInterface->createRxChannel(deviceUI->m_deviceAPI, &rxChannel, &channelAPI);
|
||||||
@ -2183,10 +2358,10 @@ void MainWindow::channelAddClicked(Workspace *workspace, int deviceSetIndex, int
|
|||||||
deviceUI->registerRxChannelInstance(channelAPI, gui);
|
deviceUI->registerRxChannelInstance(channelAPI, gui);
|
||||||
gui->setIndex(channelAPI->getIndexInDeviceSet());
|
gui->setIndex(channelAPI->getIndexInDeviceSet());
|
||||||
}
|
}
|
||||||
else if (channelIndex < nbMIMOChannels + nbRxChannels + nbTxChannels)
|
else if (channelPluginIndex < nbMIMOChannels + nbRxChannels + nbTxChannels)
|
||||||
{
|
{
|
||||||
PluginAPI::ChannelRegistrations *channelRegistrations = m_pluginManager->getTxChannelRegistrations(); // Available channel plugins
|
PluginAPI::ChannelRegistrations *channelRegistrations = m_pluginManager->getTxChannelRegistrations(); // Available channel plugins
|
||||||
PluginInterface *pluginInterface = (*channelRegistrations)[channelIndex - nbMIMOChannels - nbRxChannels].m_plugin;
|
PluginInterface *pluginInterface = (*channelRegistrations)[channelPluginIndex - nbMIMOChannels - nbRxChannels].m_plugin;
|
||||||
ChannelAPI *channelAPI;
|
ChannelAPI *channelAPI;
|
||||||
BasebandSampleSource *txChannel;
|
BasebandSampleSource *txChannel;
|
||||||
pluginInterface->createTxChannel(deviceUI->m_deviceAPI, &txChannel, &channelAPI);
|
pluginInterface->createTxChannel(deviceUI->m_deviceAPI, &txChannel, &channelAPI);
|
||||||
@ -2206,6 +2381,12 @@ void MainWindow::channelAddClicked(Workspace *workspace, int deviceSetIndex, int
|
|||||||
this,
|
this,
|
||||||
[=](int wsIndexDest){ this->channelMove(gui, wsIndexDest); }
|
[=](int wsIndexDest){ this->channelMove(gui, wsIndexDest); }
|
||||||
);
|
);
|
||||||
|
QObject::connect(
|
||||||
|
gui,
|
||||||
|
&ChannelGUI::duplicateChannelEmitted,
|
||||||
|
this,
|
||||||
|
[=](){ this->channelDuplicate(gui); }
|
||||||
|
);
|
||||||
|
|
||||||
gui->setDeviceSetIndex(deviceSetIndex);
|
gui->setDeviceSetIndex(deviceSetIndex);
|
||||||
gui->setToolTip(deviceAPI->getSamplingDeviceDisplayName());
|
gui->setToolTip(deviceAPI->getSamplingDeviceDisplayName());
|
||||||
|
@ -82,6 +82,7 @@ public:
|
|||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void channelMove(ChannelGUI *gui, int wsIndexDestnation);
|
void channelMove(ChannelGUI *gui, int wsIndexDestnation);
|
||||||
|
void channelDuplicate(ChannelGUI *gui);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum {
|
enum {
|
||||||
@ -198,7 +199,7 @@ private slots:
|
|||||||
void sampleSinkAdd(Workspace *workspace, Workspace *spectrumWorkspace, int deviceIndex);
|
void sampleSinkAdd(Workspace *workspace, Workspace *spectrumWorkspace, int deviceIndex);
|
||||||
void sampleMIMOAdd(Workspace *workspace, Workspace *spectrumWorkspace, int deviceIndex);
|
void sampleMIMOAdd(Workspace *workspace, Workspace *spectrumWorkspace, int deviceIndex);
|
||||||
void samplingDeviceChangeHandler(DeviceGUI *deviceGUI, int newDeviceIndex);
|
void samplingDeviceChangeHandler(DeviceGUI *deviceGUI, int newDeviceIndex);
|
||||||
void channelAddClicked(Workspace *workspace, int deviceSetIndex, int channelIndex);
|
void channelAddClicked(Workspace *workspace, int deviceSetIndex, int channelPluginIndex);
|
||||||
void featureAddClicked(Workspace *workspace, int featureIndex);
|
void featureAddClicked(Workspace *workspace, int featureIndex);
|
||||||
void featureMove(FeatureGUI *gui, int wsIndexDestnation);
|
void featureMove(FeatureGUI *gui, int wsIndexDestnation);
|
||||||
void openFeaturePresetsDialog(QPoint p, Workspace *workspace);
|
void openFeaturePresetsDialog(QPoint p, Workspace *workspace);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user