diff --git a/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp b/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp index 30fdbee00572583aa7dc21268f30f69b9ec7a1c4..336357f752c469662ab513452e1b8e6ad80c1d36 100644 --- a/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp +++ b/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp @@ -327,7 +327,7 @@ QList<RewriterView::Error> DesignDocumentController::loadMaster(QPlainTextEdit * m_d->masterModel->attachView(m_d->rewriterView.data()); m_d->model = m_d->masterModel; - m_d->subComponentManager = new SubComponentManager(m_d->masterModel->metaInfo(), this); + m_d->subComponentManager = new SubComponentManager(m_d->masterModel.data(), this); m_d->subComponentManager->update(m_d->searchPath, m_d->model->imports()); loadCurrentModel(); diff --git a/src/plugins/qmldesigner/designercore/include/subcomponentmanager.h b/src/plugins/qmldesigner/designercore/include/subcomponentmanager.h index ed4a3f43bc7a4ebfad6886efb790dc6b4a547745..14a81fc3c25ca3febeeedc229a835db1b37e2a48 100644 --- a/src/plugins/qmldesigner/designercore/include/subcomponentmanager.h +++ b/src/plugins/qmldesigner/designercore/include/subcomponentmanager.h @@ -35,8 +35,6 @@ #include "corelib_global.h" -#include <metainfo.h> - #include <QObject> #include <QString> #include <QUrl> @@ -44,12 +42,17 @@ namespace QmlDesigner { class Import; +class Model; + +namespace Internal { +class SubComponentManagerPrivate; +} class CORESHARED_EXPORT SubComponentManager : public QObject { Q_OBJECT public: - explicit SubComponentManager(MetaInfo metaInfo, QObject *parent = 0); + explicit SubComponentManager(Model *model, QObject *parent = 0); ~SubComponentManager(); void update(const QUrl &fileUrl, const QList<Import> &imports); @@ -60,7 +63,7 @@ public: private: friend class Internal::SubComponentManagerPrivate; - class Internal::SubComponentManagerPrivate *m_d; + Internal::SubComponentManagerPrivate *m_d; }; } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp b/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp index ce6ad736a02ba04b342172a3dfc62d9562600831..64dc52fe6dd8cf3302ab36b76f9d09650ad76de7 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp @@ -31,6 +31,7 @@ **************************************************************************/ #include "subcomponentmanager.h" +#include "model.h" #include "metainfo.h" #include <QDir> @@ -81,7 +82,7 @@ static const QString QMLFILEPATTERN = QString(QLatin1String("*.qml")); class SubComponentManagerPrivate : QObject { Q_OBJECT public: - SubComponentManagerPrivate(MetaInfo metaInfo, SubComponentManager *q); + SubComponentManagerPrivate(Model *model, SubComponentManager *q); void addImport(int pos, const Import &import); void removeImport(int pos); @@ -96,10 +97,11 @@ public: QList<QFileInfo> watchedFiles(const QString &canonicalDirPath); void unregisterQmlFile(const QFileInfo &fileInfo, const QString &qualifier); void registerQmlFile(const QFileInfo &fileInfo, const QString &qualifier, bool addToLibrary); + Model *model() const; SubComponentManager *m_q; - MetaInfo m_metaInfo; + QWeakPointer<Model> m_model; QFileSystemWatcher m_watcher; @@ -111,9 +113,9 @@ public: QList<Import> m_imports; }; -SubComponentManagerPrivate::SubComponentManagerPrivate(MetaInfo metaInfo, SubComponentManager *q) : +SubComponentManagerPrivate::SubComponentManagerPrivate(Model *model, SubComponentManager *q) : m_q(q), - m_metaInfo(metaInfo) + m_model(model) { connect(&m_watcher, SIGNAL(directoryChanged(QString)), this, SLOT(parseDirectory(QString))); } @@ -323,6 +325,9 @@ static inline bool isDepricatedQtType(const QString &typeName) void SubComponentManagerPrivate::registerQmlFile(const QFileInfo &fileInfo, const QString &qualifier, bool addToLibrary) { + if (!model()) + return; + QString componentName = fileInfo.baseName(); if (!qualifier.isEmpty()) { @@ -342,11 +347,20 @@ void SubComponentManagerPrivate::registerQmlFile(const QFileInfo &fileInfo, cons itemLibraryEntry.setName(componentName); itemLibraryEntry.setCategory("QML Components"); - if (!m_metaInfo.itemLibraryInfo()->containsEntry(itemLibraryEntry)) - m_metaInfo.itemLibraryInfo()->addEntry(itemLibraryEntry); + + if (model()->metaInfo(componentName).isValid() && model()->metaInfo(componentName).isSubclassOf("QtQuick.Item", -1, -1) && + !model()->metaInfo().itemLibraryInfo()->containsEntry(itemLibraryEntry)) { + + model()->metaInfo().itemLibraryInfo()->addEntry(itemLibraryEntry); + } } } +Model *SubComponentManagerPrivate::model() const +{ + return m_model.data(); +} + } // namespace Internal /*! @@ -356,9 +370,9 @@ void SubComponentManagerPrivate::registerQmlFile(const QFileInfo &fileInfo, cons these in the metatype system. */ -SubComponentManager::SubComponentManager(MetaInfo metaInfo, QObject *parent) : +SubComponentManager::SubComponentManager(Model *model, QObject *parent) : QObject(parent), - m_d(new Internal::SubComponentManagerPrivate(metaInfo, this)) + m_d(new Internal::SubComponentManagerPrivate(model, this)) { }