From bda50da7cd3bcf7ae1ea7839325bc361ed3a145d Mon Sep 17 00:00:00 2001
From: Thomas Hartmann <Thomas.Hartmann@nokia.com>
Date: Tue, 10 May 2011 15:10:42 +0200
Subject: [PATCH] QmlDesigner.itemlibrary: do not show non-visual content items

Task-number: QTCREATORBUG-4770
---
 .../integration/designdocumentcontroller.cpp  |  2 +-
 .../include/subcomponentmanager.h             | 11 ++++---
 .../metainfo/subcomponentmanager.cpp          | 30 ++++++++++++++-----
 3 files changed, 30 insertions(+), 13 deletions(-)

diff --git a/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp b/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp
index 30fdbee0057..336357f752c 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 ed4a3f43bc7..14a81fc3c25 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 ce6ad736a02..64dc52fe6dd 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))
 {
 }
 
-- 
GitLab