From 2de9f16be46e3935482eb4f0cb77e0c509b0735f Mon Sep 17 00:00:00 2001 From: mxi-box Date: Wed, 28 Feb 2024 06:46:35 +0800 Subject: [PATCH] Fix renumberate deviceset without modifying claimed of SamplingDevice --- sdrbase/device/deviceenumerator.cpp | 15 +++++++++++++++ sdrbase/device/deviceenumerator.h | 1 + sdrgui/mainwindow.cpp | 1 + 3 files changed, 17 insertions(+) diff --git a/sdrbase/device/deviceenumerator.cpp b/sdrbase/device/deviceenumerator.cpp index 0496e48d2..27097dedf 100644 --- a/sdrbase/device/deviceenumerator.cpp +++ b/sdrbase/device/deviceenumerator.cpp @@ -17,6 +17,7 @@ /////////////////////////////////////////////////////////////////////////////////// #include +#include #include "deviceenumerator.h" @@ -432,6 +433,20 @@ void DeviceEnumerator::removeMIMOSelection(int tabIndex) } } +void DeviceEnumerator::renumeratetabIndex(int skippedTabIndex) +{ + std::reference_wrapper denums[] = {m_rxEnumeration, m_txEnumeration, m_mimoEnumeration}; + for (DevicesEnumeration &denum : denums) + { + for (DevicesEnumeration::iterator it = denum.begin(); it != denum.end(); ++it) + { + if (it->m_samplingDevice.claimed > skippedTabIndex) { + it->m_samplingDevice.claimed--; + } + } + } +} + int DeviceEnumerator::getFileInputDeviceIndex() const { for (DevicesEnumeration::const_iterator it = m_rxEnumeration.begin(); it != m_rxEnumeration.end(); ++it) diff --git a/sdrbase/device/deviceenumerator.h b/sdrbase/device/deviceenumerator.h index 31517ed84..7a081f83f 100644 --- a/sdrbase/device/deviceenumerator.h +++ b/sdrbase/device/deviceenumerator.h @@ -52,6 +52,7 @@ public: void removeRxSelection(int tabIndex); void removeTxSelection(int tabIndex); void removeMIMOSelection(int tabIndex); + void renumeratetabIndex(int skippedTabIndex); int getNbRxSamplingDevices() const { return m_rxEnumeration.size(); } int getNbTxSamplingDevices() const { return m_txEnumeration.size(); } int getNbMIMOSamplingDevices() const { return m_mimoEnumeration.size(); } diff --git a/sdrgui/mainwindow.cpp b/sdrgui/mainwindow.cpp index 5eff075c6..a721e9540 100644 --- a/sdrgui/mainwindow.cpp +++ b/sdrgui/mainwindow.cpp @@ -1072,6 +1072,7 @@ void MainWindow::removeDeviceSet(int deviceSetIndex) m_deviceUIs.erase(m_deviceUIs.begin() + deviceSetIndex); m_mainCore->removeDeviceSet(deviceSetIndex); + DeviceEnumerator::instance()->renumeratetabIndex(deviceSetIndex); // Renumerate for (int i = 0; i < (int) m_deviceUIs.size(); i++)