diff options
| author | Leandro Melo <leandro.melo@nokia.com> | 2010-09-24 20:16:34 +0200 |
|---|---|---|
| committer | Leandro Melo <leandro.melo@nokia.com> | 2010-09-24 20:22:03 +0200 |
| commit | cafcce0c3738264d48795f60b85472c06d587079 (patch) | |
| tree | a7e1a60562a6e235a7043d66732f9d3472b08038 /src/plugins/cpptools/cppcodecompletion.cpp | |
| parent | f64cf427f2a0cd37789b9feb782cd1b4e26563ec (diff) | |
| download | qt-creator-cafcce0c3738264d48795f60b85472c06d587079.tar.gz | |
Add support for C++ snippets.
Diffstat (limited to 'src/plugins/cpptools/cppcodecompletion.cpp')
| -rw-r--r-- | src/plugins/cpptools/cppcodecompletion.cpp | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 32a51d7f2c..4426cb64a7 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -75,6 +75,7 @@ #include <QtGui/QTextDocument> // Qt::escape() #include <QtGui/QToolButton> #include <QtGui/QVBoxLayout> +#include <QtAlgorithms> namespace { const bool debug = ! qgetenv("CPLUSPLUS_DEBUG").isEmpty(); @@ -460,7 +461,8 @@ CppCodeCompletion::CppCodeCompletion(CppModelManager *manager) m_shouldRestartCompletion(false), m_automaticCompletion(false), m_completionOperator(T_EOF_SYMBOL), - m_objcEnabled(true) + m_objcEnabled(true), + m_snippetsParser(Core::ICore::instance()->resourcePath() + QLatin1String("/snippets/cpp.xml")) { } @@ -1123,7 +1125,10 @@ void CppCodeCompletion::globalCompletion(Scope *currentScope) foreach (ClassOrNamespace *b, usingBindings) completeNamespace(b); + addSnippets(); addKeywords(); + qStableSort(m_completions.begin(), m_completions.end(), completionItemLessThan); + addMacros(QLatin1String("<configuration>"), context.snapshot()); addMacros(context.thisDocument()->fileName(), context.snapshot()); } @@ -1759,18 +1764,19 @@ void CppCodeCompletion::completions(QList<TextEditor::CompletionItem> *completio QList<TextEditor::CompletionItem> CppCodeCompletion::removeDuplicates(const QList<TextEditor::CompletionItem> &items) { - // Remove duplicates + // Duplicates are kept only if they are snippets. QList<TextEditor::CompletionItem> uniquelist; QSet<QString> processed; - foreach (const TextEditor::CompletionItem &item, items) { - if (! processed.contains(item.text)) { - processed.insert(item.text); + if (!processed.contains(item.text) || item.isSnippet) { uniquelist.append(item); - if (Symbol *symbol = qvariant_cast<Symbol *>(item.data)) { - if (Function *funTy = symbol->type()->asFunctionType()) { - if (funTy->hasArguments()) - ++uniquelist.back().duplicateCount; + if (!item.isSnippet) { + processed.insert(item.text); + if (Symbol *symbol = qvariant_cast<Symbol *>(item.data)) { + if (Function *funTy = symbol->type()->asFunctionType()) { + if (funTy->hasArguments()) + ++uniquelist.back().duplicateCount; + } } } } @@ -2018,4 +2024,10 @@ bool CppCodeCompletion::objcKeywordsWanted() const return mdb->findByFile(fileName).type() == CppTools::Constants::OBJECTIVE_CPP_SOURCE_MIMETYPE; } +void CppCodeCompletion::addSnippets() +{ + static const QIcon icon(QLatin1String(":/texteditor/images/snippet.png")); + m_completions.append(m_snippetsParser.execute(this, icon)); +} + #include "cppcodecompletion.moc" |
