From acb27cc41cd97e7c3e8009669afc482d66a55330 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 11 Oct 2024 13:33:50 +0200 Subject: [PATCH] ProjectExplorer: Use base class convenience in BuildDeviceKitAspect Change-Id: I12d5d3b095ccb2d497c2abab7ac9c5723b199fc9 Reviewed-by: hjk --- .../devicesupport/devicekitaspects.cpp | 91 +++++-------------- src/plugins/projectexplorer/kitaspect.cpp | 2 +- 2 files changed, 25 insertions(+), 68 deletions(-) diff --git a/src/plugins/projectexplorer/devicesupport/devicekitaspects.cpp b/src/plugins/projectexplorer/devicesupport/devicekitaspects.cpp index 99095dd7931..6c4fcf1468f 100644 --- a/src/plugins/projectexplorer/devicesupport/devicekitaspects.cpp +++ b/src/plugins/projectexplorer/devicesupport/devicekitaspects.cpp @@ -172,7 +172,8 @@ public: }; setListAspectSpec({model, std::move(getter), std::move(setter), std::move(resetModel)}); - connect(model, &QAbstractItemModel::modelReset, this, &DeviceKitAspectImpl::refresh); + connect(DeviceManager::instance(), &DeviceManager::updated, + this, &DeviceKitAspectImpl::refresh); } private: @@ -395,76 +396,32 @@ class BuildDeviceKitAspectImpl final : public KitAspect { public: BuildDeviceKitAspectImpl(Kit *workingCopy, const KitAspectFactory *factory) - : KitAspect(workingCopy, factory), - m_comboBox(createSubWidget()), - m_model(new DeviceManagerModel(DeviceManager::instance())) + : KitAspect(workingCopy, factory) { setManagingPage(Constants::DEVICE_SETTINGS_PAGE_ID); - m_comboBox->setSizePolicy(QSizePolicy::Ignored, m_comboBox->sizePolicy().verticalPolicy()); - m_comboBox->setModel(m_model); - refresh(); - m_comboBox->setToolTip(factory->description()); - connect(m_model, &QAbstractItemModel::modelAboutToBeReset, - this, &BuildDeviceKitAspectImpl::modelAboutToReset); - connect(m_model, &QAbstractItemModel::modelReset, - this, &BuildDeviceKitAspectImpl::modelReset); - connect(m_comboBox, &QComboBox::currentIndexChanged, - this, &BuildDeviceKitAspectImpl::currentDeviceChanged); + const auto model = new DeviceManagerModel(DeviceManager::instance(), this); + auto getter = [](const Kit &k) { + return BuildDeviceKitAspect::device(&k)->id().toSetting(); + }; + auto setter = [](Kit &k, const QVariant &id) { + BuildDeviceKitAspect::setDeviceId(&k, Id::fromSetting(id)); + }; + auto resetModel = [model] { + QList blackList; + const DeviceManager *dm = DeviceManager::instance(); + for (int i = 0; i < dm->deviceCount(); ++i) { + IDevice::ConstPtr device = dm->deviceAt(i); + if (!device->usableAsBuildDevice()) + blackList.append(device->id()); + } + model->setFilter(blackList); + }; + setListAspectSpec({model, std::move(getter), std::move(setter), std::move(resetModel)}); + + connect(DeviceManager::instance(), &DeviceManager::updated, + this, &BuildDeviceKitAspectImpl::refresh); } - - ~BuildDeviceKitAspectImpl() override - { - delete m_comboBox; - delete m_model; - } - -private: - void addToInnerLayout(Layouting::Layout &builder) override - { - addMutableAction(m_comboBox); - builder.addItem(m_comboBox); - } - - void makeReadOnly() override { m_comboBox->setEnabled(false); } - - void refresh() override - { - QList blackList; - const DeviceManager *dm = DeviceManager::instance(); - for (int i = 0; i < dm->deviceCount(); ++i) { - IDevice::ConstPtr device = dm->deviceAt(i); - if (!device->usableAsBuildDevice()) - blackList.append(device->id()); - } - - m_model->setFilter(blackList); - m_comboBox->setCurrentIndex(m_model->indexOf(BuildDeviceKitAspect::device(kit()))); - } - - void modelAboutToReset() - { - m_selectedId = m_model->deviceId(m_comboBox->currentIndex()); - m_ignoreChanges.lock(); - } - - void modelReset() - { - m_comboBox->setCurrentIndex(m_model->indexForId(m_selectedId)); - m_ignoreChanges.unlock(); - } - - void currentDeviceChanged() - { - if (m_ignoreChanges.isLocked()) - return; - BuildDeviceKitAspect::setDeviceId(kit(), m_model->deviceId(m_comboBox->currentIndex())); - } - - Guard m_ignoreChanges; - QComboBox *m_comboBox; - DeviceManagerModel *m_model; - Id m_selectedId; }; class BuildDeviceKitAspectFactory : public KitAspectFactory diff --git a/src/plugins/projectexplorer/kitaspect.cpp b/src/plugins/projectexplorer/kitaspect.cpp index 76b81361be1..5a2c4e41c7b 100644 --- a/src/plugins/projectexplorer/kitaspect.cpp +++ b/src/plugins/projectexplorer/kitaspect.cpp @@ -119,7 +119,7 @@ KitAspect::~KitAspect() void KitAspect::refresh() { - if (!m_listAspectSpec) + if (!m_listAspectSpec || m_ignoreChanges.isLocked()) return; const GuardLocker locker(m_ignoreChanges); m_listAspectSpec->resetModel();