diff --git a/src/plugins/qmldesigner/components/importmanager/importmanagerview.cpp b/src/plugins/qmldesigner/components/importmanager/importmanagerview.cpp index 3a13f524119..f26178c4562 100644 --- a/src/plugins/qmldesigner/components/importmanager/importmanagerview.cpp +++ b/src/plugins/qmldesigner/components/importmanager/importmanagerview.cpp @@ -31,10 +31,8 @@ namespace QmlDesigner { -ImportManagerView::ImportManagerView(QObject *parent) : - AbstractView(parent), - m_importsWidget(nullptr) - +ImportManagerView::ImportManagerView(QObject *parent) + : AbstractView(parent) { } @@ -81,25 +79,22 @@ void ImportManagerView::modelAboutToBeDetached(Model *model) AbstractView::modelAboutToBeDetached(model); } -void ImportManagerView::nodeCreated(const ModelNode &/*createdNode*/) -{ - if (m_importsWidget) - m_importsWidget->setUsedImports(model()->usedImports()); -} - -void ImportManagerView::nodeAboutToBeRemoved(const ModelNode &/*removedNode*/) -{ - if (m_importsWidget) - m_importsWidget->setUsedImports(model()->usedImports()); -} - void ImportManagerView::importsChanged(const QList &/*addedImports*/, const QList &/*removedImports*/) { - if (m_importsWidget) { + if (m_importsWidget) m_importsWidget->setImports(model()->imports()); +} + +void ImportManagerView::possibleImportsChanged(const QList &/*possibleImports*/) +{ + if (m_importsWidget) m_importsWidget->setPossibleImports(model()->possibleImports()); +} + +void ImportManagerView::usedImportsChanged(const QList &/*usedImports*/) +{ + if (m_importsWidget) m_importsWidget->setUsedImports(model()->usedImports()); - } } void ImportManagerView::removeImport(const Import &import) diff --git a/src/plugins/qmldesigner/components/importmanager/importmanagerview.h b/src/plugins/qmldesigner/components/importmanager/importmanagerview.h index e2bba4d0b36..2b0db99568e 100644 --- a/src/plugins/qmldesigner/components/importmanager/importmanagerview.h +++ b/src/plugins/qmldesigner/components/importmanager/importmanagerview.h @@ -35,6 +35,7 @@ class ImportsWidget; class ImportManagerView : public AbstractView { Q_OBJECT + public: explicit ImportManagerView(QObject *parent = nullptr); ~ImportManagerView() override; @@ -45,17 +46,16 @@ public: void modelAttached(Model *model) override; void modelAboutToBeDetached(Model *model) override; - void nodeCreated(const ModelNode &createdNode) override; - void nodeAboutToBeRemoved(const ModelNode &removedNode) override; - void importsChanged(const QList &addedImports, const QList &removedImports) override; + void possibleImportsChanged(const QList &possibleImports) override; + void usedImportsChanged(const QList &usedImports) override; private: void removeImport(const Import &import); void addImport(const Import &import); private: - QPointer m_importsWidget; + QPointer m_importsWidget = nullptr; }; } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/importmanager/importswidget.cpp b/src/plugins/qmldesigner/components/importmanager/importswidget.cpp index 5f10c36bc96..d3aaf3c9b14 100644 --- a/src/plugins/qmldesigner/components/importmanager/importswidget.cpp +++ b/src/plugins/qmldesigner/components/importmanager/importswidget.cpp @@ -53,7 +53,7 @@ void ImportsWidget::removeImports() updateLayout(); } -static bool isImportAlreadyUsed(const Import &import, QList importLabels) +static bool isImportAlreadyUsed(const Import &import, QList importLabels) { foreach (ImportLabel *importLabel, importLabels) { if (importLabel->import() == import) @@ -101,12 +101,13 @@ void ImportsWidget::setPossibleImports(QList possibleImports) const QStringList mcuWhiteList = {"QtQuick", "QtQuick.Controls"}; - if (isQtForMCUs) + if (isQtForMCUs) { filteredImports = Utils::filtered(possibleImports, [mcuWhiteList](const Import &import) { return mcuWhiteList.contains(import.url()) || !import.url().startsWith("Qt"); }); - else + } else { filteredImports = possibleImports; + } for (const Import &possibleImport : filteredImports) { if (!isImportAlreadyUsed(possibleImport, m_importLabels)) @@ -123,7 +124,6 @@ void ImportsWidget::setUsedImports(const QList &usedImports) { foreach (ImportLabel *importLabel, m_importLabels) importLabel->setReadOnly(usedImports.contains(importLabel->import())); - } void ImportsWidget::removeUsedImports() diff --git a/src/plugins/qmldesigner/designercore/include/abstractview.h b/src/plugins/qmldesigner/designercore/include/abstractview.h index 08e5d954749..d0dcddb2eef 100644 --- a/src/plugins/qmldesigner/designercore/include/abstractview.h +++ b/src/plugins/qmldesigner/designercore/include/abstractview.h @@ -229,6 +229,8 @@ public: virtual void nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex); virtual void importsChanged(const QList &addedImports, const QList &removedImports); + virtual void possibleImportsChanged(const QList &possibleImports); + virtual void usedImportsChanged(const QList &usedImports); virtual void auxiliaryDataChanged(const ModelNode &node, const PropertyName &name, const QVariant &data); diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp index de0c8882a1a..652c23c6e6f 100644 --- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp +++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp @@ -345,6 +345,14 @@ void AbstractView::importsChanged(const QList &/*addedImports*/, const Q { } +void AbstractView::possibleImportsChanged(const QList &/*possibleImports*/) +{ +} + +void AbstractView::usedImportsChanged(const QList &/*usedImports*/) +{ +} + void AbstractView::auxiliaryDataChanged(const ModelNode &/*node*/, const PropertyName &/*name*/, const QVariant &/*data*/) { } diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp index 4c35d6a315e..8ff23b5248e 100644 --- a/src/plugins/qmldesigner/designercore/model/model.cpp +++ b/src/plugins/qmldesigner/designercore/model/model.cpp @@ -170,6 +170,22 @@ void ModelPrivate::notifyImportsChanged(const QList &addedImports, const resetModelByRewriter(description); } +void ModelPrivate::notifyPossibleImportsChanged(const QList &possibleImports) +{ + for (const QPointer &view : qAsConst(m_viewList)) { + Q_ASSERT(view != nullptr); + view->possibleImportsChanged(possibleImports); + } +} + +void ModelPrivate::notifyUsedImportsChanged(const QList &usedImports) +{ + for (const QPointer &view : qAsConst(m_viewList)) { + Q_ASSERT(view != nullptr); + view->usedImportsChanged(usedImports); + } +} + QUrl ModelPrivate::fileUrl() const { return m_fileUrl; @@ -1879,14 +1895,15 @@ void Model::changeImports(const QList &importsToBeAdded, const QList &possibleImports) { d->m_possibleImportList = possibleImports; + d->notifyPossibleImportsChanged(possibleImports); } void Model::setUsedImports(const QList &usedImports) { d->m_usedImportList = usedImports; + d->notifyUsedImportsChanged(usedImports); } - static bool compareVersions(const QString &version1, const QString &version2, bool allowHigherVersion) { if (version2.isEmpty()) diff --git a/src/plugins/qmldesigner/designercore/model/model_p.h b/src/plugins/qmldesigner/designercore/model/model_p.h index 6990610b374..dc74ca5a062 100644 --- a/src/plugins/qmldesigner/designercore/model/model_p.h +++ b/src/plugins/qmldesigner/designercore/model/model_p.h @@ -185,6 +185,8 @@ public: void removeImport(const Import &import); void changeImports(const QList &importsToBeAdded, const QList &importToBeRemoved); void notifyImportsChanged(const QList &addedImports, const QList &removedImports); + void notifyPossibleImportsChanged(const QList &possibleImports); + void notifyUsedImportsChanged(const QList &usedImportsChanged); //node state property manipulation