From 34545eeacac7ea9c1b7f1d44e0b70298c63a651f Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Thu, 21 Jan 2010 11:36:36 +0100
Subject: [PATCH] Add the QML user types to the completion box.

---
 src/plugins/qmljseditor/qmlcodecompletion.cpp | 44 +++++++++++++++++--
 1 file changed, 40 insertions(+), 4 deletions(-)

diff --git a/src/plugins/qmljseditor/qmlcodecompletion.cpp b/src/plugins/qmljseditor/qmlcodecompletion.cpp
index 0d4c11359f4..5a97ffa77bf 100644
--- a/src/plugins/qmljseditor/qmlcodecompletion.cpp
+++ b/src/plugins/qmljseditor/qmlcodecompletion.cpp
@@ -135,9 +135,33 @@ int QmlCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
     if (qmlDocument.isNull())
         return -1;
 
-    if (!qmlDocument->qmlProgram())
-        qmlDocument = m_modelManager->snapshot().value(qmlDocument->fileName());
+    const QmlJS::Snapshot &snapshot = m_modelManager->snapshot();
 
+    if (! qmlDocument->qmlProgram()) {
+        qmlDocument = snapshot.value(qmlDocument->fileName());
+
+        if (! qmlDocument)
+            return -1;
+    }
+
+    const QIcon typeIcon = iconForColor(Qt::yellow);
+
+    foreach (QmlJS::Document::Ptr doc, snapshot) {
+        const QFileInfo fileInfo(doc->fileName());
+        if (fileInfo.suffix() != QLatin1String("qml"))
+            continue;
+
+        const QString typeName = fileInfo.baseName();
+        if (typeName.isEmpty())
+            continue;
+
+        if (typeName.at(0).isUpper()) {
+            TextEditor::CompletionItem item(this);
+            item.text = typeName;
+            item.icon = typeIcon;
+            m_completions.append(item);
+        }
+    }
 
     const QIcon idIcon = iconForColor(Qt::darkGray);
     QStringList ids = qmlDocument->ids().keys();
@@ -180,9 +204,21 @@ int QmlCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
         }
     }
 
-    updateSnippets();
+    QChar previousChar;
+    if (m_startPosition > 0)
+        previousChar = editor->characterAt(m_startPosition - 1);
+
+
+    if (previousChar.isNull()
+            || previousChar.isSpace()
+            || previousChar == QLatin1Char('{')
+            || previousChar == QLatin1Char('}')
+            || previousChar == QLatin1Char(':')
+            || previousChar == QLatin1Char(';')) {
+        updateSnippets();
+        m_completions.append(m_snippets);
+    }
 
-    m_completions.append(m_snippets);
     return pos;
 }
 
-- 
GitLab