From 3604bf80919ce30885275f955e673aa909516d2c Mon Sep 17 00:00:00 2001 From: f4exb Date: Thu, 14 Apr 2022 03:07:33 +0200 Subject: [PATCH] Massive UI revamping (v7): fixed spectrum move and device workspace index save in preset --- .../samplesource/hackrfinput/hackrfinput.cpp | 10 +- sdrgui/device/deviceuiset.cpp | 1 + sdrgui/mainwindow.cpp | 104 ++++++++++++------ sdrgui/mainwindow.h | 6 +- 4 files changed, 78 insertions(+), 43 deletions(-) diff --git a/plugins/samplesource/hackrfinput/hackrfinput.cpp b/plugins/samplesource/hackrfinput/hackrfinput.cpp index 9f7b4bcd9..4eb5a4ead 100644 --- a/plugins/samplesource/hackrfinput/hackrfinput.cpp +++ b/plugins/samplesource/hackrfinput/hackrfinput.cpp @@ -87,7 +87,7 @@ void HackRFInput::destroy() bool HackRFInput::openDevice() { - if (m_dev != 0) + if (m_dev) { closeDevice(); } @@ -109,7 +109,7 @@ bool HackRFInput::openDevice() return false; } - if (buddySharedParams->m_dev == 0) // device is not opened by buddy + if (buddySharedParams->m_dev == nullptr) // device is not opened by buddy { qCritical("HackRFInput::openDevice: could not get HackRF handle from buddy"); return false; @@ -123,12 +123,14 @@ bool HackRFInput::openDevice() if ((m_dev = DeviceHackRF::open_hackrf(qPrintable(m_deviceAPI->getSamplingDeviceSerial()))) == 0) { qCritical("HackRFInput::openDevice: could not open HackRF %s", qPrintable(m_deviceAPI->getSamplingDeviceSerial())); + m_dev = nullptr; return false; } m_sharedParams.m_dev = m_dev; } + qDebug("HackRFInput::openDevice: success"); return true; } @@ -172,7 +174,7 @@ void HackRFInput::closeDevice() { qDebug("HackRFInput::closeDevice: closing device since Tx side is not open"); - if(m_dev != 0) // close BladeRF + if (m_dev) // close HackRF { hackrf_close(m_dev); //hackrf_exit(); // TODO: this may not work if several HackRF Devices are running concurrently. It should be handled globally in the application @@ -180,7 +182,7 @@ void HackRFInput::closeDevice() } m_sharedParams.m_dev = 0; - m_dev = 0; + m_dev = nullptr; } void HackRFInput::stop() diff --git a/sdrgui/device/deviceuiset.cpp b/sdrgui/device/deviceuiset.cpp index da3373072..7dd0e5ced 100644 --- a/sdrgui/device/deviceuiset.cpp +++ b/sdrgui/device/deviceuiset.cpp @@ -214,6 +214,7 @@ void DeviceUISet::saveDeviceSetSettings(Preset* preset) const (int) m_deviceAPI->getSamplingDeviceSequence(), (int) m_deviceAPI->getDeviceItemIndex() }); + preset->setDeviceWorkspaceIndex(m_deviceGUI->getWorkspaceIndex()); preset->clearChannels(); if (m_deviceSourceEngine) // source device diff --git a/sdrgui/mainwindow.cpp b/sdrgui/mainwindow.cpp index 467590ca7..66aaaa4bd 100644 --- a/sdrgui/mainwindow.cpp +++ b/sdrgui/mainwindow.cpp @@ -357,7 +357,7 @@ MainWindow::~MainWindow() qDebug() << "MainWindow::~MainWindow: end"; } -void MainWindow::sampleSourceAdd(Workspace *workspace, int deviceIndex) +void MainWindow::sampleSourceAdd(Workspace *deviceWorkspace, Workspace *spectrumWorkspace, int deviceIndex) { DSPDeviceSourceEngine *dspDeviceSourceEngine = m_dspEngine->addDeviceSourceEngine(); dspDeviceSourceEngine->start(); @@ -393,25 +393,26 @@ void MainWindow::sampleSourceAdd(Workspace *workspace, int deviceIndex) } sampleSourceCreate(deviceSetIndex, deviceIndex, deviceAPI, m_deviceUIs.back()); - m_deviceUIs.back()->m_deviceGUI->setWorkspaceIndex(workspace->getIndex()); - m_deviceUIs.back()->m_mainSpectrumGUI->setWorkspaceIndex(workspace->getIndex()); + m_deviceUIs.back()->m_deviceGUI->setWorkspaceIndex(deviceWorkspace->getIndex()); + m_deviceUIs.back()->m_mainSpectrumGUI->setWorkspaceIndex(spectrumWorkspace->getIndex()); + MainSpectrumGUI *mainSpectrumGUI = m_deviceUIs.back()->m_mainSpectrumGUI; QObject::connect( - m_deviceUIs.back()->m_mainSpectrumGUI, + mainSpectrumGUI, &MainSpectrumGUI::moveToWorkspace, this, - [=](int wsIndexDest){ this->mainSpectrumMove(m_deviceUIs.back()->m_mainSpectrumGUI, wsIndexDest); } + [=](int wsIndexDest){ this->mainSpectrumMove(mainSpectrumGUI, wsIndexDest); } ); QObject::connect( m_deviceUIs.back()->m_deviceGUI, &DeviceGUI::addChannelEmitted, this, - [=](int channelIndex){ this->channelAddClicked(workspace, deviceSetIndex, channelIndex); } + [=](int channelIndex){ this->channelAddClicked(deviceWorkspace, deviceSetIndex, channelIndex); } ); - workspace->addToMdiArea(m_deviceUIs.back()->m_deviceGUI); - workspace->addToMdiArea(m_deviceUIs.back()->m_mainSpectrumGUI); + deviceWorkspace->addToMdiArea(m_deviceUIs.back()->m_deviceGUI); + spectrumWorkspace->addToMdiArea(m_deviceUIs.back()->m_mainSpectrumGUI); emit m_mainCore->deviceSetAdded(deviceSetIndex, deviceAPI); } @@ -574,7 +575,7 @@ void MainWindow::sampleSourceCreate( mainSpectrumGUI->setTitle(samplingDevice->displayedName.split(" ")[0]); } -void MainWindow::sampleSinkAdd(Workspace *workspace, int deviceIndex) +void MainWindow::sampleSinkAdd(Workspace *deviceWorkspace, Workspace *spectrumWorkspace, int deviceIndex) { DSPDeviceSinkEngine *dspDeviceSinkEngine = m_dspEngine->addDeviceSinkEngine(); dspDeviceSinkEngine->start(); @@ -610,25 +611,26 @@ void MainWindow::sampleSinkAdd(Workspace *workspace, int deviceIndex) } sampleSinkCreate(deviceSetIndex, deviceIndex, deviceAPI, m_deviceUIs.back()); - m_deviceUIs.back()->m_deviceGUI->setWorkspaceIndex(workspace->getIndex()); - m_deviceUIs.back()->m_mainSpectrumGUI->setWorkspaceIndex(workspace->getIndex()); + m_deviceUIs.back()->m_deviceGUI->setWorkspaceIndex(deviceWorkspace->getIndex()); + m_deviceUIs.back()->m_mainSpectrumGUI->setWorkspaceIndex(spectrumWorkspace->getIndex()); + MainSpectrumGUI *mainSpectrumGUI = m_deviceUIs.back()->m_mainSpectrumGUI; QObject::connect( - m_deviceUIs.back()->m_mainSpectrumGUI, + mainSpectrumGUI, &MainSpectrumGUI::moveToWorkspace, this, - [=](int wsIndexDest){ this->mainSpectrumMove(m_deviceUIs.back()->m_mainSpectrumGUI, wsIndexDest); } + [=](int wsIndexDest){ this->mainSpectrumMove(mainSpectrumGUI, wsIndexDest); } ); QObject::connect( m_deviceUIs.back()->m_deviceGUI, &DeviceGUI::addChannelEmitted, this, - [=](int channelIndex){ this->channelAddClicked(workspace, deviceSetIndex, channelIndex); } + [=](int channelIndex){ this->channelAddClicked(deviceWorkspace, deviceSetIndex, channelIndex); } ); - workspace->addToMdiArea(m_deviceUIs.back()->m_deviceGUI); - workspace->addToMdiArea(m_deviceUIs.back()->m_mainSpectrumGUI); + deviceWorkspace->addToMdiArea(m_deviceUIs.back()->m_deviceGUI); + spectrumWorkspace->addToMdiArea(m_deviceUIs.back()->m_mainSpectrumGUI); emit m_mainCore->deviceSetAdded(deviceSetIndex, deviceAPI); } @@ -791,7 +793,7 @@ void MainWindow::sampleSinkCreate( spectrumGUI->setTitle(samplingDevice->displayedName.split(" ")[0]); } -void MainWindow::sampleMIMOAdd(Workspace *workspace, int deviceIndex) +void MainWindow::sampleMIMOAdd(Workspace *deviceWorkspace, Workspace *spectrumWorkspace, int deviceIndex) { DSPDeviceMIMOEngine *dspDeviceMIMOEngine = m_dspEngine->addDeviceMIMOEngine(); dspDeviceMIMOEngine->start(); @@ -835,25 +837,26 @@ void MainWindow::sampleMIMOAdd(Workspace *workspace, int deviceIndex) } sampleMIMOCreate(deviceSetIndex, deviceIndex, deviceAPI, m_deviceUIs.back()); - m_deviceUIs.back()->m_deviceGUI->setWorkspaceIndex(workspace->getIndex()); - m_deviceUIs.back()->m_mainSpectrumGUI->setWorkspaceIndex(workspace->getIndex()); + m_deviceUIs.back()->m_deviceGUI->setWorkspaceIndex(deviceWorkspace->getIndex()); + m_deviceUIs.back()->m_mainSpectrumGUI->setWorkspaceIndex(spectrumWorkspace->getIndex()); + MainSpectrumGUI *mainSpectrumGUI = m_deviceUIs.back()->m_mainSpectrumGUI; QObject::connect( - m_deviceUIs.back()->m_mainSpectrumGUI, + mainSpectrumGUI, &MainSpectrumGUI::moveToWorkspace, this, - [=](int wsIndexDest){ this->mainSpectrumMove(m_deviceUIs.back()->m_mainSpectrumGUI, wsIndexDest); } + [=](int wsIndexDest){ this->mainSpectrumMove(mainSpectrumGUI, wsIndexDest); } ); QObject::connect( m_deviceUIs.back()->m_deviceGUI, &DeviceGUI::addChannelEmitted, this, - [=](int channelIndex){ this->channelAddClicked(workspace, deviceSetIndex, channelIndex); } + [=](int channelIndex){ this->channelAddClicked(deviceWorkspace, deviceSetIndex, channelIndex); } ); - workspace->addToMdiArea(m_deviceUIs.back()->m_deviceGUI); - workspace->addToMdiArea(m_deviceUIs.back()->m_mainSpectrumGUI); + deviceWorkspace->addToMdiArea(m_deviceUIs.back()->m_deviceGUI); + spectrumWorkspace->addToMdiArea(m_deviceUIs.back()->m_mainSpectrumGUI); emit m_mainCore->deviceSetAdded(deviceSetIndex, deviceAPI); } @@ -1351,10 +1354,17 @@ void MainWindow::loadConfiguration(const Configuration *configuration, bool from deviceSetPreset.getSelectedDevice().m_deviceSequence, deviceSetPreset.getSelectedDevice().m_deviceItemIndex ); - int workspaceIndex = deviceSetPreset.getDeviceWorkspaceIndex() < m_workspaces.size() ? + qDebug("MainWindow::loadConfiguration: add source %s in workspace %d spectrum in %d", + qPrintable(deviceSetPreset.getSelectedDevice().m_deviceId), + deviceSetPreset.getDeviceWorkspaceIndex(), + deviceSetPreset.getSpectrumWorkspaceIndex()); + int deviceWorkspaceIndex = deviceSetPreset.getDeviceWorkspaceIndex() < m_workspaces.size() ? deviceSetPreset.getDeviceWorkspaceIndex() : 0; - sampleSourceAdd(m_workspaces[workspaceIndex], bestDeviceIndex); + int spectrumWorkspaceIndex = deviceSetPreset.getSpectrumWorkspaceIndex() < m_workspaces.size() ? + deviceSetPreset.getSpectrumWorkspaceIndex() : + deviceWorkspaceIndex; + sampleSourceAdd(m_workspaces[deviceWorkspaceIndex], m_workspaces[spectrumWorkspaceIndex], bestDeviceIndex); } else if (deviceSetPreset.isSinkPreset()) { @@ -1364,10 +1374,17 @@ void MainWindow::loadConfiguration(const Configuration *configuration, bool from deviceSetPreset.getSelectedDevice().m_deviceSequence, deviceSetPreset.getSelectedDevice().m_deviceItemIndex ); - int workspaceIndex = deviceSetPreset.getDeviceWorkspaceIndex() < m_workspaces.size() ? + qDebug("MainWindow::loadConfiguration: add sink %s in workspace %d spectrum in %d", + qPrintable(deviceSetPreset.getSelectedDevice().m_deviceId), + deviceSetPreset.getDeviceWorkspaceIndex(), + deviceSetPreset.getSpectrumWorkspaceIndex()); + int deviceWorkspaceIndex = deviceSetPreset.getDeviceWorkspaceIndex() < m_workspaces.size() ? deviceSetPreset.getDeviceWorkspaceIndex() : 0; - sampleSinkAdd(m_workspaces[workspaceIndex], bestDeviceIndex); + int spectrumWorkspaceIndex = deviceSetPreset.getSpectrumWorkspaceIndex() < m_workspaces.size() ? + deviceSetPreset.getSpectrumWorkspaceIndex() : + deviceWorkspaceIndex; + sampleSinkAdd(m_workspaces[deviceWorkspaceIndex], m_workspaces[spectrumWorkspaceIndex], bestDeviceIndex); } else if (deviceSetPreset.isMIMOPreset()) { int bestDeviceIndex = DeviceEnumerator::instance()->getBestMIMOSamplingDeviceIndex( @@ -1375,10 +1392,17 @@ void MainWindow::loadConfiguration(const Configuration *configuration, bool from deviceSetPreset.getSelectedDevice().m_deviceSerial, deviceSetPreset.getSelectedDevice().m_deviceSequence ); - int workspaceIndex = deviceSetPreset.getDeviceWorkspaceIndex() < m_workspaces.size() ? + qDebug("MainWindow::loadConfiguration: add MIMO %s in workspace %d spectrum in %d", + qPrintable(deviceSetPreset.getSelectedDevice().m_deviceId), + deviceSetPreset.getDeviceWorkspaceIndex(), + deviceSetPreset.getSpectrumWorkspaceIndex()); + int deviceWorkspaceIndex = deviceSetPreset.getDeviceWorkspaceIndex() < m_workspaces.size() ? deviceSetPreset.getDeviceWorkspaceIndex() : 0; - sampleMIMOAdd(m_workspaces[workspaceIndex], bestDeviceIndex); + int spectrumWorkspaceIndex = deviceSetPreset.getSpectrumWorkspaceIndex() < m_workspaces.size() ? + deviceSetPreset.getSpectrumWorkspaceIndex() : + deviceWorkspaceIndex; + sampleMIMOAdd(m_workspaces[deviceWorkspaceIndex], m_workspaces[spectrumWorkspaceIndex], bestDeviceIndex); } m_deviceUIs.back()->m_deviceGUI->restoreGeometry(deviceSetPreset.getDeviceGeometry()); @@ -1445,6 +1469,10 @@ void MainWindow::saveConfiguration(Configuration *configuration) deviceSetPresets.back().setSpectrumWorkspaceIndex(deviceUISet->m_mainSpectrumGUI->getWorkspaceIndex()); deviceSetPresets.back().setDeviceGeometry(deviceUISet->m_deviceGUI->saveGeometry()); deviceSetPresets.back().setDeviceWorkspaceIndex(deviceUISet->m_deviceGUI->getWorkspaceIndex()); + qDebug("MainWindow::saveConfiguration: %s device in workspace %d spectrun in %d", + qPrintable(deviceUISet->m_deviceAPI->getSamplingDeviceId()), + deviceUISet->m_deviceGUI->getWorkspaceIndex(), + deviceUISet->m_mainSpectrumGUI->getWorkspaceIndex()); } m_featureUIs[0]->saveFeatureSetSettings(&configuration->getFeatureSetPreset()); @@ -1733,11 +1761,11 @@ bool MainWindow::handleMessage(const Message& cmd) // in Server flavor. Set nullptr for workspace if index is out of bonds if (direction == 1) { // Single stream Tx - sampleSinkAdd(nullptr, -1); // create with file output device by default + sampleSinkAdd(nullptr, nullptr, -1); // create with file output device by default } else if (direction == 0) { // Single stream Rx - sampleSourceAdd(nullptr, -1); // create with file input device by default + sampleSourceAdd(nullptr, nullptr, -1); // create with file input device by default } else if (direction == 2) { // MIMO - sampleMIMOAdd(nullptr, -1); // create with testMI MIMO device y default + sampleMIMOAdd(nullptr, nullptr, -1); // create with testMI MIMO device y default } return true; @@ -1886,21 +1914,21 @@ void MainWindow::addWorkspace() m_workspaces.back(), &Workspace::addRxDevice, this, - &MainWindow::sampleSourceAdd + [=](Workspace *inWorkspace, int deviceIndex) { this->sampleSourceAdd(inWorkspace, inWorkspace, deviceIndex); } ); QObject::connect( m_workspaces.back(), &Workspace::addTxDevice, this, - &MainWindow::sampleSinkAdd + [=](Workspace *inWorkspace, int deviceIndex) { this->sampleSourceAdd(inWorkspace, inWorkspace, deviceIndex); } ); QObject::connect( m_workspaces.back(), &Workspace::addMIMODevice, this, - &MainWindow::sampleMIMOAdd + [=](Workspace *inWorkspace, int deviceIndex) { this->sampleSourceAdd(inWorkspace, inWorkspace, deviceIndex); } ); QObject::connect( @@ -2700,6 +2728,8 @@ void MainWindow::featureMove(FeatureGUI *gui, int wsIndexDestnation) void MainWindow::deviceMove(DeviceGUI *gui, int wsIndexDestnation) { int wsIndexOrigin = gui->getWorkspaceIndex(); + qDebug("MainWindow::deviceMove: %s from %d to %d", + qPrintable(gui->getTitle()), wsIndexOrigin, wsIndexDestnation); if (wsIndexOrigin == wsIndexDestnation) { return; @@ -2726,6 +2756,8 @@ void MainWindow::channelMove(ChannelGUI *gui, int wsIndexDestnation) void MainWindow::mainSpectrumMove(MainSpectrumGUI *gui, int wsIndexDestnation) { int wsIndexOrigin = gui->getWorkspaceIndex(); + qDebug("MainWindow::mainSpectrumMove: %s from %d to %d", + qPrintable(gui->getTitle()), wsIndexOrigin, wsIndexDestnation); if (wsIndexOrigin == wsIndexDestnation) { return; diff --git a/sdrgui/mainwindow.h b/sdrgui/mainwindow.h index 3cff9ce7c..bbd510ab3 100644 --- a/sdrgui/mainwindow.h +++ b/sdrgui/mainwindow.h @@ -181,9 +181,9 @@ private slots: void removeEmptyWorkspaces(); void loadConfiguration(const Configuration *configuration, bool fromDialog = false); void saveConfiguration(Configuration *configuration); - void sampleSourceAdd(Workspace *workspace, int deviceIndex); - void sampleSinkAdd(Workspace *workspace, int deviceIndex); - void sampleMIMOAdd(Workspace *workspace, int deviceIndex); + void sampleSourceAdd(Workspace *deviceWorkspace, Workspace *spectrumWorkspace, int deviceIndex); + void sampleSinkAdd(Workspace *workspace, Workspace *spectrumWorkspace, int deviceIndex); + void sampleMIMOAdd(Workspace *workspace, Workspace *spectrumWorkspace, int deviceIndex); void sampleDeviceChangeHandler(DeviceGUI *deviceGUI, int newDeviceIndex); void on_action_View_Fullscreen_toggled(bool checked);