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