diff options
author | Thorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com> | 2008-12-12 16:36:33 +0100 |
---|---|---|
committer | Thorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com> | 2008-12-15 11:42:43 +0100 |
commit | 78f1fca9aa55311a84b6a4cbd6507b70398fff39 (patch) | |
tree | 62329c67f42f472fbee8a9ecb2e1963a3d01cde1 /src/plugins/cpptools/cppcodecompletion.cpp | |
parent | 5c5167717f479ee5cccab179e0793620dc11a229 (diff) | |
download | qt-creator-78f1fca9aa55311a84b6a4cbd6507b70398fff39.tar.gz |
Added configuration options for code completion
It is now possible to choose between case-sensitive or case-insensitive
completion. Also, you can now disable the automatic insertion of braces.
Diffstat (limited to 'src/plugins/cpptools/cppcodecompletion.cpp')
-rw-r--r-- | src/plugins/cpptools/cppcodecompletion.cpp | 59 |
1 files changed, 40 insertions, 19 deletions
diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index addf5301f7..c7cd3f07a9 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -314,12 +314,37 @@ CppCodeCompletion::CppCodeCompletion(CppModelManager *manager, Core::ICore *core : ICompletionCollector(manager), m_core(core), m_manager(manager), + m_caseSensitivity(Qt::CaseSensitive), + m_autoInsertBraces(true), m_forcedCompletion(false), m_completionOperator(T_EOF_SYMBOL) -{ } +{ +} QIcon CppCodeCompletion::iconForSymbol(Symbol *symbol) const -{ return m_icons.iconForSymbol(symbol); } +{ + return m_icons.iconForSymbol(symbol); +} + +Qt::CaseSensitivity CppCodeCompletion::caseSensitivity() const +{ + return m_caseSensitivity; +} + +void CppCodeCompletion::setCaseSensitivity(Qt::CaseSensitivity caseSensitivity) +{ + m_caseSensitivity = caseSensitivity; +} + +bool CppCodeCompletion::autoInsertBraces() const +{ + return m_autoInsertBraces; +} + +void CppCodeCompletion::setAutoInsertBraces(bool autoInsertBraces) +{ + m_autoInsertBraces = autoInsertBraces; +} /* Searches beckward for an access operator. @@ -705,14 +730,14 @@ void CppCodeCompletion::addMacros(const LookupContext &context) continue; processed.insert(fn); if (Document::Ptr doc = context.document(fn)) { - foreach (const Macro macro, doc->definedMacros()) { + foreach (const Macro ¯o, doc->definedMacros()) { macroNames.insert(macro.name); } todo += doc->includedFiles(); } } - foreach (const QByteArray macroName, macroNames) { + foreach (const QByteArray ¯oName, macroNames) { TextEditor::CompletionItem item(this); item.m_text = QString::fromLatin1(macroName.constData(), macroName.length()); item.m_icon = m_icons.macroIcon(); @@ -889,29 +914,25 @@ void CppCodeCompletion::completions(QList<TextEditor::CompletionItem> *completio * * Meaning it allows any sequence of lower-case characters to preceed an * upper-case character. So for example gAC matches getActionController. - * - * The match is case-sensitive as soon as at least one upper-case character is - * present. */ QString keyRegExp; keyRegExp += QLatin1Char('^'); bool first = true; - Qt::CaseSensitivity sensitivity = Qt::CaseInsensitive; foreach (const QChar &c, key) { - if (c.isLower()) { - keyRegExp.append(c); - } else if (c.isUpper()) { - sensitivity = Qt::CaseSensitive; - if (!first) { - keyRegExp.append("[a-z0-9_]*"); - } - keyRegExp.append(c); + if (c.isUpper() && !first) { + keyRegExp += QLatin1String("[a-z0-9_]*"); + keyRegExp += c; + } else if (m_caseSensitivity == Qt::CaseInsensitive && c.isLower()) { + keyRegExp += QLatin1Char('['); + keyRegExp += c; + keyRegExp += c.toUpper(); + keyRegExp += QLatin1Char(']'); } else { - keyRegExp.append(QRegExp::escape(c)); + keyRegExp += QRegExp::escape(c); } first = false; } - const QRegExp regExp(keyRegExp, sensitivity); + const QRegExp regExp(keyRegExp, Qt::CaseSensitive); foreach (TextEditor::CompletionItem item, m_completions) { if (regExp.indexIn(item.m_text) == 0) { @@ -962,7 +983,7 @@ void CppCodeCompletion::complete(const TextEditor::CompletionItem &item) //qDebug() << "current symbol:" << overview.prettyName(symbol->name()) //<< overview.prettyType(symbol->type()); - if (symbol) { + if (m_autoInsertBraces && symbol) { if (Function *function = symbol->type()->asFunction()) { // If the member is a function, automatically place the opening parenthesis, // except when it might take template parameters. |