diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2020-07-01 14:46:15 +0200 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2020-07-03 08:47:29 +0000 |
commit | 94f9544df5138105271ac34415b7abd1fdc58919 (patch) | |
tree | 625f5fc6385eceab7114d53aefc614f8e8564cfc /src/plugins/qmldesigner/designercore | |
parent | c05755a2e1d142149aee53c5e7f7b04eb29cc747 (diff) |
QmlDesigner: Rename CppTypeData to QmlTypeData
Also adding getQMLSingletons().
The Backendmodel now also knows about QML singletons.
Change-Id: I96e130678ef956e569960c431f45bd362d026f5f
Reviewed-by: Aleksei German <aleksei.german@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Diffstat (limited to 'src/plugins/qmldesigner/designercore')
5 files changed, 60 insertions, 21 deletions
diff --git a/src/plugins/qmldesigner/designercore/include/rewriterview.h b/src/plugins/qmldesigner/designercore/include/rewriterview.h index dcd85c950d..0601da3acf 100644 --- a/src/plugins/qmldesigner/designercore/include/rewriterview.h +++ b/src/plugins/qmldesigner/designercore/include/rewriterview.h @@ -53,7 +53,7 @@ class ModelNodePositionStorage; } //Internal -struct CppTypeData +struct QmlTypeData { QString superClassName; QString importUrl; @@ -61,6 +61,7 @@ struct CppTypeData QString cppClassName; QString typeName; bool isSingleton = false; + bool isCppType = false; }; class QMLDESIGNERCORE_EXPORT RewriterView : public AbstractView @@ -158,7 +159,7 @@ public: QStringList autoComplete(const QString &text, int pos, bool explicitComplete = true); - QList<CppTypeData> getCppTypes(); + QList<QmlTypeData> getQMLTypes() const; void setWidgetStatusCallback(std::function<void(bool)> setWidgetStatusCallback); diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index 2e3b5be32b..7cf2784a7d 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -958,7 +958,7 @@ CreateSceneCommand NodeInstanceView::createCreateSceneCommand() QVector<MockupTypeContainer> mockupTypesVector; - for (const CppTypeData &cppTypeData : model()->rewriterView()->getCppTypes()) { + for (const QmlTypeData &cppTypeData : model()->rewriterView()->getQMLTypes()) { const QString versionString = cppTypeData.versionString; int majorVersion = -1; int minorVersion = -1; diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp index 5d0cd5da35..eb9c650746 100644 --- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp +++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp @@ -960,27 +960,31 @@ QStringList RewriterView::autoComplete(const QString &text, int pos, bool explic return list; } -QList<CppTypeData> RewriterView::getCppTypes() +QList<QmlTypeData> RewriterView::getQMLTypes() const { - QList<CppTypeData> cppDataList; - for (const QmlJS::ModelManagerInterface::CppData &cppData : QmlJS::ModelManagerInterface::instance()->cppData().values()) + QList<QmlTypeData> qmlDataList; + + qmlDataList.append(m_textToModelMerger->getQMLSingletons()); + + for (const QmlJS::ModelManagerInterface::CppData &cppData : + QmlJS::ModelManagerInterface::instance()->cppData().values()) for (const LanguageUtils::FakeMetaObject::ConstPtr &fakeMetaObject : cppData.exportedTypes) { - for (const LanguageUtils::FakeMetaObject::Export &exportItem : fakeMetaObject->exports()) { - - CppTypeData cppData; - cppData.cppClassName = fakeMetaObject->className(); - cppData.typeName = exportItem.type; - cppData.importUrl = exportItem.package; - cppData.versionString = exportItem.version.toString(); - cppData.superClassName = fakeMetaObject->superclassName(); - cppData.isSingleton = fakeMetaObject->isSingleton(); - - if (cppData.importUrl != "<cpp>") //ignore pure unregistered cpp types - cppDataList.append(cppData); + for (const LanguageUtils::FakeMetaObject::Export &exportItem : + fakeMetaObject->exports()) { + QmlTypeData qmlData; + qmlData.cppClassName = fakeMetaObject->className(); + qmlData.typeName = exportItem.type; + qmlData.importUrl = exportItem.package; + qmlData.versionString = exportItem.version.toString(); + qmlData.superClassName = fakeMetaObject->superclassName(); + qmlData.isSingleton = fakeMetaObject->isSingleton(); + + if (qmlData.importUrl != "<cpp>") //ignore pure unregistered cpp types + qmlDataList.append(qmlData); } } - return cppDataList; + return qmlDataList; } void RewriterView::setWidgetStatusCallback(std::function<void (bool)> setWidgetStatusCallback) @@ -990,7 +994,6 @@ void RewriterView::setWidgetStatusCallback(std::function<void (bool)> setWidgetS void RewriterView::qmlTextChanged() { - getCppTypes(); if (inErrorState()) return; diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp index fafa408a46..94814b7436 100644 --- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp @@ -2176,6 +2176,37 @@ QSet<QPair<QString, QString> > TextToModelMerger::qrcMapping() const return m_qrcMapping; } +QList<QmlTypeData> TextToModelMerger::getQMLSingletons() const +{ + QList<QmlTypeData> list; + const QmlJS::Imports *imports = m_scopeChain->context()->imports( + m_scopeChain->document().data()); + + if (!imports) + return list; + + for (const QmlJS::Import &import : imports->all()) { + if (import.info.type() == ImportType::Library && !import.libraryPath.isEmpty()) { + const LibraryInfo &libraryInfo = m_scopeChain->context()->snapshot().libraryInfo( + import.libraryPath); + + for (const QmlDirParser::Component &component : libraryInfo.components()) { + if (component.singleton) { + QmlTypeData qmlData; + + qmlData.typeName = component.typeName; + qmlData.importUrl = import.info.name(); + qmlData.versionString = import.info.version().toString(); + qmlData.isSingleton = component.singleton; + + list.append(qmlData); + } + } + } + } + return list; +} + QString TextToModelMerger::textAt(const Document::Ptr &doc, const SourceLocation &location) { diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h index 2884453f8c..c729d2aedd 100644 --- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h +++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h @@ -41,6 +41,8 @@ namespace QmlDesigner { class RewriterView; class DocumentMessage; +struct QmlTypeData; + namespace Internal { class DifferenceHandler; @@ -131,7 +133,9 @@ public: void delayedSetup(); - QSet<QPair<QString, QString> > qrcMapping() const; + QSet<QPair<QString, QString>> qrcMapping() const; + + QList<QmlTypeData> getQMLSingletons() const; private: void setupCustomParserNode(const ModelNode &node); |