diff --git a/src/plugins/cpptools/completionsettingspage.cpp b/src/plugins/cpptools/completionsettingspage.cpp index ae1882b0093..2db7dc3087f 100644 --- a/src/plugins/cpptools/completionsettingspage.cpp +++ b/src/plugins/cpptools/completionsettingspage.cpp @@ -80,7 +80,21 @@ QWidget *CompletionSettingsPage::createPage(QWidget *parent) break; } + int completionTriggerIndex = 0; + switch (settings.m_completionTrigger) { + case TextEditor::ManualCompletion: + completionTriggerIndex = 0; + break; + case TextEditor::TriggeredCompletion: + completionTriggerIndex = 1; + break; + case TextEditor::AutomaticCompletion: + completionTriggerIndex = 2; + break; + } + m_page->caseSensitivity->setCurrentIndex(caseSensitivityIndex); + m_page->completionTrigger->setCurrentIndex(completionTriggerIndex); m_page->autoInsertBrackets->setChecked(settings.m_autoInsertBrackets); m_page->partiallyComplete->setChecked(settings.m_partiallyComplete); m_page->spaceAfterFunctionName->setChecked(settings.m_spaceAfterFunctionName); @@ -88,8 +102,9 @@ QWidget *CompletionSettingsPage::createPage(QWidget *parent) if (m_searchKeywords.isEmpty()) { QTextStream(&m_searchKeywords) << m_page->caseSensitivityLabel->text() << ' ' << m_page->autoInsertBrackets->text() - << ' ' << m_page->partiallyComplete->text() - << ' ' << m_page->spaceAfterFunctionName->text(); + << ' ' << m_page->completionTriggerLabel->text() + << ' ' << m_page->partiallyComplete->text() + << ' ' << m_page->spaceAfterFunctionName->text(); m_searchKeywords.remove(QLatin1Char('&')); } @@ -100,6 +115,7 @@ void CompletionSettingsPage::apply() { TextEditor::CompletionSettings settings; settings.m_caseSensitivity = caseSensitivity(); + settings.m_completionTrigger = completionTrigger(); settings.m_autoInsertBrackets = m_page->autoInsertBrackets->isChecked(); settings.m_partiallyComplete = m_page->partiallyComplete->isChecked(); settings.m_spaceAfterFunctionName = m_page->spaceAfterFunctionName->isChecked(); @@ -123,3 +139,15 @@ TextEditor::CaseSensitivity CompletionSettingsPage::caseSensitivity() const return TextEditor::FirstLetterCaseSensitive; } } + +TextEditor::CompletionTrigger CompletionSettingsPage::completionTrigger() const +{ + switch (m_page->completionTrigger->currentIndex()) { + case 0: + return TextEditor::ManualCompletion; + case 1: + return TextEditor::TriggeredCompletion; + default: + return TextEditor::AutomaticCompletion; + } +} diff --git a/src/plugins/cpptools/completionsettingspage.h b/src/plugins/cpptools/completionsettingspage.h index 4221811ad63..c2b0c56dc30 100644 --- a/src/plugins/cpptools/completionsettingspage.h +++ b/src/plugins/cpptools/completionsettingspage.h @@ -60,6 +60,7 @@ public: private: TextEditor::CaseSensitivity caseSensitivity() const; + TextEditor::CompletionTrigger completionTrigger() const; Ui_CompletionSettingsPage *m_page; QString m_searchKeywords; diff --git a/src/plugins/cpptools/completionsettingspage.ui b/src/plugins/cpptools/completionsettingspage.ui index 98e0da2bc60..6b4f0a1377b 100644 --- a/src/plugins/cpptools/completionsettingspage.ui +++ b/src/plugins/cpptools/completionsettingspage.ui @@ -6,8 +6,8 @@ 0 0 - 400 - 300 + 359 + 244 @@ -16,76 +16,95 @@ Behavior - - - - - - - &Case-sensitivity: - - - caseSensitivity - - - - - - - Qt::Horizontal - - - QSizePolicy::Maximum - - - - 20 - 20 - - - - - - - - - 0 - 0 - - - - - Full - - - - - None - - - - - First Letter - - - - - - - - Qt::Horizontal - - - - 0 - 0 - - - - - + + + + + &Case-sensitivity: + + + caseSensitivity + + - + + + + + 0 + 0 + + + + + Full + + + + + None + + + + + First Letter + + + + + + + + Qt::Horizontal + + + + 70 + 24 + + + + + + + + Activate completion: + + + + + + + + Manually + + + + + When Triggered + + + + + Always + + + + + + + + Qt::Horizontal + + + + 40 + 24 + + + + + Automatically insert (, ) and ; when appropriate. @@ -98,7 +117,7 @@ - + Insert the common prefix of available completion items. @@ -111,7 +130,7 @@ - + true @@ -138,6 +157,10 @@ + groupBox + autoInsertBrackets + partiallyComplete + spaceAfterFunctionName diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index d3e46ea06c5..993aef82e0c 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -655,7 +655,7 @@ bool CppCodeCompletion::triggersCompletion(TextEditor::ITextEditable *editor) } return true; - } else { + } else if (completionSettings().m_completionTrigger == TextEditor::AutomaticCompletion) { // Trigger completion after at least three characters of a name have been typed const int startOfName = findStartOfName(pos); if (pos - startOfName > 2) { diff --git a/src/plugins/qmljseditor/qmljscodecompletion.cpp b/src/plugins/qmljseditor/qmljscodecompletion.cpp index 5f28d8acac3..9b84cd2dd81 100644 --- a/src/plugins/qmljseditor/qmljscodecompletion.cpp +++ b/src/plugins/qmljseditor/qmljscodecompletion.cpp @@ -40,6 +40,7 @@ #include #include +#include #include #include @@ -546,6 +547,8 @@ bool CodeCompletion::maybeTriggersCompletion(TextEditor::ITextEditable *editor) if (ch == QLatin1Char('(') || ch == QLatin1Char('.')) return true; + if (completionSettings().m_completionTrigger != TextEditor::AutomaticCompletion) + return false; const QChar characterUnderCursor = editor->characterAt(cursorPosition); diff --git a/src/plugins/texteditor/completionsettings.cpp b/src/plugins/texteditor/completionsettings.cpp index dc4bba31162..399415c9d6d 100644 --- a/src/plugins/texteditor/completionsettings.cpp +++ b/src/plugins/texteditor/completionsettings.cpp @@ -33,6 +33,7 @@ static const char * const groupPostfix = "Completion"; static const char * const caseSensitivityKey = "CaseSensitivity"; +static const char * const completionTriggerKey = "CompletionTrigger"; static const char * const autoInsertBracesKey = "AutoInsertBraces"; static const char * const partiallyCompleteKey = "PartiallyComplete"; static const char * const spaceAfterFunctionNameKey = "SpaceAfterFunctionName"; @@ -41,6 +42,7 @@ using namespace TextEditor; CompletionSettings::CompletionSettings() : m_caseSensitivity(CaseInsensitive) + , m_completionTrigger(AutomaticCompletion) , m_autoInsertBrackets(true) , m_partiallyComplete(true) , m_spaceAfterFunctionName(false) @@ -55,6 +57,7 @@ void CompletionSettings::toSettings(const QString &category, QSettings *s) const s->beginGroup(group); s->setValue(QLatin1String(caseSensitivityKey), (int) m_caseSensitivity); + s->setValue(QLatin1String(completionTriggerKey), (int) m_completionTrigger); s->setValue(QLatin1String(autoInsertBracesKey), m_autoInsertBrackets); s->setValue(QLatin1String(partiallyCompleteKey), m_partiallyComplete); s->setValue(QLatin1String(spaceAfterFunctionNameKey), m_spaceAfterFunctionName); @@ -71,6 +74,7 @@ void CompletionSettings::fromSettings(const QString &category, const QSettings * *this = CompletionSettings(); // Assign defaults m_caseSensitivity = (CaseSensitivity) s->value(group + QLatin1String(caseSensitivityKey), m_caseSensitivity).toInt(); + m_completionTrigger = (CompletionTrigger) s->value(group + QLatin1String(completionTriggerKey), m_completionTrigger).toInt(); m_autoInsertBrackets = s->value(group + QLatin1String(autoInsertBracesKey), m_autoInsertBrackets).toBool(); m_partiallyComplete = s->value(group + QLatin1String(partiallyCompleteKey), m_partiallyComplete).toBool(); m_spaceAfterFunctionName = s->value(group + QLatin1String(spaceAfterFunctionNameKey), m_spaceAfterFunctionName).toBool(); @@ -79,6 +83,7 @@ void CompletionSettings::fromSettings(const QString &category, const QSettings * bool CompletionSettings::equals(const CompletionSettings &cs) const { return m_caseSensitivity == cs.m_caseSensitivity + && m_completionTrigger == cs.m_completionTrigger && m_autoInsertBrackets == cs.m_autoInsertBrackets && m_partiallyComplete == cs.m_partiallyComplete && m_spaceAfterFunctionName == cs.m_spaceAfterFunctionName diff --git a/src/plugins/texteditor/completionsettings.h b/src/plugins/texteditor/completionsettings.h index 0d35abf9bb3..dcec5cc4f1f 100644 --- a/src/plugins/texteditor/completionsettings.h +++ b/src/plugins/texteditor/completionsettings.h @@ -44,6 +44,12 @@ enum CaseSensitivity { FirstLetterCaseSensitive }; +enum CompletionTrigger { + ManualCompletion, + TriggeredCompletion, + AutomaticCompletion +}; + /** * Settings that describe how the code completion behaves. */ @@ -57,6 +63,7 @@ struct TEXTEDITOR_EXPORT CompletionSettings bool equals(const CompletionSettings &bs) const; CaseSensitivity m_caseSensitivity; + CompletionTrigger m_completionTrigger; bool m_autoInsertBrackets; bool m_partiallyComplete; bool m_spaceAfterFunctionName; diff --git a/src/plugins/texteditor/completionsupport.cpp b/src/plugins/texteditor/completionsupport.cpp index bd6cc6c12ec..1ae51b106b5 100644 --- a/src/plugins/texteditor/completionsupport.cpp +++ b/src/plugins/texteditor/completionsupport.cpp @@ -34,6 +34,7 @@ #include #include #include +#include #include #include @@ -126,8 +127,13 @@ void CompletionSupport::autoComplete_helper(ITextEditable *editor, bool forced, QList completionItems; if (!m_completionList) { - if (!forced && !m_completionCollector->triggersCompletion(editor)) - return; + if (!forced) { + const CompletionSettings &completionSettings = m_completionCollector->completionSettings(); + if (completionSettings.m_completionTrigger == ManualCompletion) + return; + if (!m_completionCollector->triggersCompletion(editor)) + return; + } m_startPosition = m_completionCollector->startCompletion(editor); completionItems = getCompletions();