diff options
author | hjk <hjk@qt.io> | 2020-01-17 16:44:30 +0100 |
---|---|---|
committer | hjk <hjk@qt.io> | 2020-01-20 13:36:49 +0000 |
commit | 11b7074170c0e2278dd8fed60cd789b5846eee81 (patch) | |
tree | 369595690faab58b5e86646f0f81cf7992b8c3de /src/plugins | |
parent | f2351b06e05f5a129df1e6a38557c692687674c6 (diff) |
TextEditor: Partially apply SettingsPage pattern to completion settings
Change-Id: Ieb8547bab74c6a2d6489a6bf53b7f224003e0401
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/texteditor/completionsettingspage.cpp | 256 | ||||
-rw-r--r-- | src/plugins/texteditor/completionsettingspage.h | 25 | ||||
-rw-r--r-- | src/plugins/texteditor/texteditorsettings.cpp | 11 |
3 files changed, 131 insertions, 161 deletions
diff --git a/src/plugins/texteditor/completionsettingspage.cpp b/src/plugins/texteditor/completionsettingspage.cpp index 2f516a8977c..bb8b89a1313 100644 --- a/src/plugins/texteditor/completionsettingspage.cpp +++ b/src/plugins/texteditor/completionsettingspage.cpp @@ -35,119 +35,116 @@ #include <QTextStream> -using namespace TextEditor; -using namespace TextEditor::Internal; using namespace CppTools; -CompletionSettingsPage::CompletionSettingsPage(QObject *parent) - : Core::IOptionsPage(parent) +namespace TextEditor { +namespace Internal { + +class CompletionSettingsPageWidget final : public Core::IOptionsPageWidget { - setId("P.Completion"); - setDisplayName(tr("Completion")); - setCategory(TextEditor::Constants::TEXT_EDITOR_SETTINGS_CATEGORY); - setDisplayCategory(QCoreApplication::translate("TextEditor", "Text Editor")); - setCategoryIconPath(TextEditor::Constants::TEXT_EDITOR_SETTINGS_CATEGORY_ICON_PATH); + Q_DECLARE_TR_FUNCTIONS(TextEditor::Internal::CompletionSettingsPage) - QSettings *s = Core::ICore::settings(); - m_completionSettings.fromSettings(s); - m_commentsSettings.fromSettings(s); -} +public: + explicit CompletionSettingsPageWidget(CompletionSettingsPage *owner); -CompletionSettingsPage::~CompletionSettingsPage() -{ - delete m_page; -} +private: + void apply() final; + + CaseSensitivity caseSensitivity() const; + CompletionTrigger completionTrigger() const; + void settingsFromUi(CompletionSettings &completion, CommentsSettings &comment) const; -QWidget *CompletionSettingsPage::widget() + CompletionSettingsPage *m_owner = nullptr; + Ui::CompletionSettingsPage m_ui; +}; + +CompletionSettingsPageWidget::CompletionSettingsPageWidget(CompletionSettingsPage *owner) + : m_owner(owner) { - if (!m_widget) { - m_widget = new QWidget; - m_page = new Ui::CompletionSettingsPage; - m_page->setupUi(m_widget); - - connect(m_page->completionTrigger, QOverload<int>::of(&QComboBox::currentIndexChanged), - this, &CompletionSettingsPage::onCompletionTriggerChanged); - - int caseSensitivityIndex = 0; - switch (m_completionSettings.m_caseSensitivity) { - case TextEditor::CaseSensitive: - caseSensitivityIndex = 0; - break; - case TextEditor::CaseInsensitive: - caseSensitivityIndex = 1; - break; - case TextEditor::FirstLetterCaseSensitive: - caseSensitivityIndex = 2; - break; - } - - int completionTriggerIndex = 0; - switch (m_completionSettings.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->automaticProposalTimeoutSpinBox - ->setValue(m_completionSettings.m_automaticProposalTimeoutInMs); - m_page->insertBrackets->setChecked(m_completionSettings.m_autoInsertBrackets); - m_page->surroundBrackets->setChecked(m_completionSettings.m_surroundingAutoBrackets); - m_page->insertQuotes->setChecked(m_completionSettings.m_autoInsertQuotes); - m_page->surroundQuotes->setChecked(m_completionSettings.m_surroundingAutoQuotes); - m_page->partiallyComplete->setChecked(m_completionSettings.m_partiallyComplete); - m_page->spaceAfterFunctionName->setChecked(m_completionSettings.m_spaceAfterFunctionName); - m_page->autoSplitStrings->setChecked(m_completionSettings.m_autoSplitStrings); - m_page->animateAutoComplete->setChecked(m_completionSettings.m_animateAutoComplete); - m_page->overwriteClosingChars->setChecked(m_completionSettings.m_overwriteClosingChars); - m_page->highlightAutoComplete->setChecked(m_completionSettings.m_highlightAutoComplete); - m_page->skipAutoComplete->setChecked(m_completionSettings.m_skipAutoCompletedText); - m_page->removeAutoComplete->setChecked(m_completionSettings.m_autoRemove); - - m_page->enableDoxygenCheckBox->setChecked(m_commentsSettings.m_enableDoxygen); - m_page->generateBriefCheckBox->setChecked(m_commentsSettings.m_generateBrief); - m_page->leadingAsterisksCheckBox->setChecked(m_commentsSettings.m_leadingAsterisks); - - m_page->generateBriefCheckBox->setEnabled(m_page->enableDoxygenCheckBox->isChecked()); - m_page->skipAutoComplete->setEnabled(m_page->highlightAutoComplete->isChecked()); - m_page->removeAutoComplete->setEnabled(m_page->highlightAutoComplete->isChecked()); + m_ui.setupUi(this); + + connect(m_ui.completionTrigger, QOverload<int>::of(&QComboBox::currentIndexChanged), + this, [this] { + const bool enableTimeoutWidgets = completionTrigger() == AutomaticCompletion; + m_ui.automaticProposalTimeoutLabel->setEnabled(enableTimeoutWidgets); + m_ui.automaticProposalTimeoutSpinBox->setEnabled(enableTimeoutWidgets); + }); + + int caseSensitivityIndex = 0; + switch (m_owner->m_completionSettings.m_caseSensitivity) { + case TextEditor::CaseSensitive: + caseSensitivityIndex = 0; + break; + case TextEditor::CaseInsensitive: + caseSensitivityIndex = 1; + break; + case TextEditor::FirstLetterCaseSensitive: + caseSensitivityIndex = 2; + break; } - return m_widget; + + int completionTriggerIndex = 0; + switch (m_owner->m_completionSettings.m_completionTrigger) { + case TextEditor::ManualCompletion: + completionTriggerIndex = 0; + break; + case TextEditor::TriggeredCompletion: + completionTriggerIndex = 1; + break; + case TextEditor::AutomaticCompletion: + completionTriggerIndex = 2; + break; + } + + m_ui.caseSensitivity->setCurrentIndex(caseSensitivityIndex); + m_ui.completionTrigger->setCurrentIndex(completionTriggerIndex); + m_ui.automaticProposalTimeoutSpinBox + ->setValue(m_owner->m_completionSettings.m_automaticProposalTimeoutInMs); + m_ui.insertBrackets->setChecked(m_owner->m_completionSettings.m_autoInsertBrackets); + m_ui.surroundBrackets->setChecked(m_owner->m_completionSettings.m_surroundingAutoBrackets); + m_ui.insertQuotes->setChecked(m_owner->m_completionSettings.m_autoInsertQuotes); + m_ui.surroundQuotes->setChecked(m_owner->m_completionSettings.m_surroundingAutoQuotes); + m_ui.partiallyComplete->setChecked(m_owner->m_completionSettings.m_partiallyComplete); + m_ui.spaceAfterFunctionName->setChecked(m_owner->m_completionSettings.m_spaceAfterFunctionName); + m_ui.autoSplitStrings->setChecked(m_owner->m_completionSettings.m_autoSplitStrings); + m_ui.animateAutoComplete->setChecked(m_owner->m_completionSettings.m_animateAutoComplete); + m_ui.overwriteClosingChars->setChecked(m_owner->m_completionSettings.m_overwriteClosingChars); + m_ui.highlightAutoComplete->setChecked(m_owner->m_completionSettings.m_highlightAutoComplete); + m_ui.skipAutoComplete->setChecked(m_owner->m_completionSettings.m_skipAutoCompletedText); + m_ui.removeAutoComplete->setChecked(m_owner->m_completionSettings.m_autoRemove); + + m_ui.enableDoxygenCheckBox->setChecked(m_owner->m_commentsSettings.m_enableDoxygen); + m_ui.generateBriefCheckBox->setChecked(m_owner->m_commentsSettings.m_generateBrief); + m_ui.leadingAsterisksCheckBox->setChecked(m_owner->m_commentsSettings.m_leadingAsterisks); + + m_ui.generateBriefCheckBox->setEnabled(m_ui.enableDoxygenCheckBox->isChecked()); + m_ui.skipAutoComplete->setEnabled(m_ui.highlightAutoComplete->isChecked()); + m_ui.removeAutoComplete->setEnabled(m_ui.highlightAutoComplete->isChecked()); } -void CompletionSettingsPage::apply() +void CompletionSettingsPageWidget::apply() { - if (!m_page) // page was never shown - return; - CompletionSettings completionSettings; CommentsSettings commentsSettings; settingsFromUi(completionSettings, commentsSettings); - if (m_completionSettings != completionSettings) { - m_completionSettings = completionSettings; - m_completionSettings.toSettings(Core::ICore::settings()); - emit completionSettingsChanged(completionSettings); + if (m_owner->m_completionSettings != completionSettings) { + m_owner->m_completionSettings = completionSettings; + m_owner->m_completionSettings.toSettings(Core::ICore::settings()); + emit TextEditorSettings::instance()->completionSettingsChanged(completionSettings); } - if (m_commentsSettings != commentsSettings) { - m_commentsSettings = commentsSettings; - m_commentsSettings.toSettings(Core::ICore::settings()); - emit commentsSettingsChanged(commentsSettings); + if (m_owner->m_commentsSettings != commentsSettings) { + m_owner->m_commentsSettings = commentsSettings; + m_owner->m_commentsSettings.toSettings(Core::ICore::settings()); + emit TextEditorSettings::instance()->commentsSettingsChanged(commentsSettings); } } -TextEditor::CaseSensitivity CompletionSettingsPage::caseSensitivity() const +CaseSensitivity CompletionSettingsPageWidget::caseSensitivity() const { - switch (m_page->caseSensitivity->currentIndex()) { + switch (m_ui.caseSensitivity->currentIndex()) { case 0: // Full return TextEditor::CaseSensitive; case 1: // None @@ -157,9 +154,9 @@ TextEditor::CaseSensitivity CompletionSettingsPage::caseSensitivity() const } } -TextEditor::CompletionTrigger CompletionSettingsPage::completionTrigger() const +CompletionTrigger CompletionSettingsPageWidget::completionTrigger() const { - switch (m_page->completionTrigger->currentIndex()) { + switch (m_ui.completionTrigger->currentIndex()) { case 0: return TextEditor::ManualCompletion; case 1: @@ -169,47 +166,29 @@ TextEditor::CompletionTrigger CompletionSettingsPage::completionTrigger() const } } -void CompletionSettingsPage::settingsFromUi(CompletionSettings &completion, CommentsSettings &comment) const +void CompletionSettingsPageWidget::settingsFromUi(CompletionSettings &completion, + CommentsSettings &comment) const { - if (!m_page) - return; - completion.m_caseSensitivity = caseSensitivity(); completion.m_completionTrigger = completionTrigger(); completion.m_automaticProposalTimeoutInMs - = m_page->automaticProposalTimeoutSpinBox->value(); - completion.m_autoInsertBrackets = m_page->insertBrackets->isChecked(); - completion.m_surroundingAutoBrackets = m_page->surroundBrackets->isChecked(); - completion.m_autoInsertQuotes = m_page->insertQuotes->isChecked(); - completion.m_surroundingAutoQuotes = m_page->surroundQuotes->isChecked(); - completion.m_partiallyComplete = m_page->partiallyComplete->isChecked(); - completion.m_spaceAfterFunctionName = m_page->spaceAfterFunctionName->isChecked(); - completion.m_autoSplitStrings = m_page->autoSplitStrings->isChecked(); - completion.m_animateAutoComplete = m_page->animateAutoComplete->isChecked(); - completion.m_overwriteClosingChars = m_page->overwriteClosingChars->isChecked(); - completion.m_highlightAutoComplete = m_page->highlightAutoComplete->isChecked(); - completion.m_skipAutoCompletedText = m_page->skipAutoComplete->isChecked(); - completion.m_autoRemove = m_page->removeAutoComplete->isChecked(); - - comment.m_enableDoxygen = m_page->enableDoxygenCheckBox->isChecked(); - comment.m_generateBrief = m_page->generateBriefCheckBox->isChecked(); - comment.m_leadingAsterisks = m_page->leadingAsterisksCheckBox->isChecked(); -} - -void CompletionSettingsPage::onCompletionTriggerChanged() -{ - const bool enableTimeoutWidgets = completionTrigger() == TextEditor::AutomaticCompletion; - m_page->automaticProposalTimeoutLabel->setEnabled(enableTimeoutWidgets); - m_page->automaticProposalTimeoutSpinBox->setEnabled(enableTimeoutWidgets); -} - -void CompletionSettingsPage::finish() -{ - delete m_widget; - if (!m_page) // page was never shown - return; - delete m_page; - m_page = nullptr; + = m_ui.automaticProposalTimeoutSpinBox->value(); + completion.m_autoInsertBrackets = m_ui.insertBrackets->isChecked(); + completion.m_surroundingAutoBrackets = m_ui.surroundBrackets->isChecked(); + completion.m_autoInsertQuotes = m_ui.insertQuotes->isChecked(); + completion.m_surroundingAutoQuotes = m_ui.surroundQuotes->isChecked(); + completion.m_partiallyComplete = m_ui.partiallyComplete->isChecked(); + completion.m_spaceAfterFunctionName = m_ui.spaceAfterFunctionName->isChecked(); + completion.m_autoSplitStrings = m_ui.autoSplitStrings->isChecked(); + completion.m_animateAutoComplete = m_ui.animateAutoComplete->isChecked(); + completion.m_overwriteClosingChars = m_ui.overwriteClosingChars->isChecked(); + completion.m_highlightAutoComplete = m_ui.highlightAutoComplete->isChecked(); + completion.m_skipAutoCompletedText = m_ui.skipAutoComplete->isChecked(); + completion.m_autoRemove = m_ui.removeAutoComplete->isChecked(); + + comment.m_enableDoxygen = m_ui.enableDoxygenCheckBox->isChecked(); + comment.m_generateBrief = m_ui.generateBriefCheckBox->isChecked(); + comment.m_leadingAsterisks = m_ui.leadingAsterisksCheckBox->isChecked(); } const CompletionSettings &CompletionSettingsPage::completionSettings() @@ -221,3 +200,20 @@ const CommentsSettings &CompletionSettingsPage::commentsSettings() { return m_commentsSettings; } + +CompletionSettingsPage::CompletionSettingsPage() +{ + setId("P.Completion"); + setDisplayName(CompletionSettingsPageWidget::tr("Completion")); + setCategory(TextEditor::Constants::TEXT_EDITOR_SETTINGS_CATEGORY); + setDisplayCategory(QCoreApplication::translate("TextEditor", "Text Editor")); + setCategoryIconPath(TextEditor::Constants::TEXT_EDITOR_SETTINGS_CATEGORY_ICON_PATH); + setWidgetCreator([this] { return new CompletionSettingsPageWidget(this); }); + + QSettings *s = Core::ICore::settings(); + m_completionSettings.fromSettings(s); + m_commentsSettings.fromSettings(s); +} + +} // Internal +} // TextEditor diff --git a/src/plugins/texteditor/completionsettingspage.h b/src/plugins/texteditor/completionsettingspage.h index 41ef73e8ec3..f06076d414c 100644 --- a/src/plugins/texteditor/completionsettingspage.h +++ b/src/plugins/texteditor/completionsettingspage.h @@ -30,41 +30,20 @@ #include <coreplugin/dialogs/ioptionspage.h> -#include <QPointer> - namespace TextEditor { namespace Internal { -namespace Ui { class CompletionSettingsPage; } - class CompletionSettingsPage : public Core::IOptionsPage { - Q_OBJECT - public: - CompletionSettingsPage(QObject *parent); - ~CompletionSettingsPage() override; - - QWidget *widget() override; - void apply() override; - void finish() override; + CompletionSettingsPage(); const CompletionSettings & completionSettings(); const CommentsSettings & commentsSettings(); -signals: - void completionSettingsChanged(const CompletionSettings &); - void commentsSettingsChanged(const CommentsSettings &); - private: - CaseSensitivity caseSensitivity() const; - CompletionTrigger completionTrigger() const; - void settingsFromUi(CompletionSettings &completion, CommentsSettings &comment) const; - - void onCompletionTriggerChanged(); + friend class CompletionSettingsPageWidget; - Ui::CompletionSettingsPage *m_page = nullptr; - QPointer<QWidget> m_widget; CommentsSettings m_commentsSettings; CompletionSettings m_completionSettings; }; diff --git a/src/plugins/texteditor/texteditorsettings.cpp b/src/plugins/texteditor/texteditorsettings.cpp index 650959c73dc..ccb2ea6febd 100644 --- a/src/plugins/texteditor/texteditorsettings.cpp +++ b/src/plugins/texteditor/texteditorsettings.cpp @@ -68,7 +68,7 @@ public: DisplaySettingsPage *m_displaySettingsPage; HighlighterSettingsPage *m_highlighterSettingsPage; SnippetsSettingsPage *m_snippetsSettingsPage; - CompletionSettingsPage *m_completionSettingsPage; + CompletionSettingsPage m_completionSettingsPage; QMap<Core::Id, ICodeStylePreferencesFactory *> m_languageToFactory; @@ -367,7 +367,6 @@ TextEditorSettings::TextEditorSettings() new HighlighterSettingsPage(Constants::TEXT_EDITOR_HIGHLIGHTER_SETTINGS, this); d->m_snippetsSettingsPage = new SnippetsSettingsPage(Constants::TEXT_EDITOR_SNIPPETS_SETTINGS, this); - d->m_completionSettingsPage = new CompletionSettingsPage(this); auto updateGeneralMessagesFontSettings = []() { Core::MessageManager::setFont(d->m_fontSettingsPage->fontSettings().font()); @@ -396,10 +395,6 @@ TextEditorSettings::TextEditorSettings() this, &TextEditorSettings::marginSettingsChanged); connect(d->m_displaySettingsPage, &DisplaySettingsPage::displaySettingsChanged, this, &TextEditorSettings::displaySettingsChanged); - connect(d->m_completionSettingsPage, &CompletionSettingsPage::completionSettingsChanged, - this, &TextEditorSettings::completionSettingsChanged); - connect(d->m_completionSettingsPage, &CompletionSettingsPage::commentsSettingsChanged, - this, &TextEditorSettings::commentsSettingsChanged); auto updateCamelCaseNavigation = [] { Utils::FancyLineEdit::setCamelCaseNavigationEnabled(behaviorSettings().m_camelCaseNavigation); @@ -453,7 +448,7 @@ const DisplaySettings &TextEditorSettings::displaySettings() const CompletionSettings &TextEditorSettings::completionSettings() { - return d->m_completionSettingsPage->completionSettings(); + return d->m_completionSettingsPage.completionSettings(); } const HighlighterSettings &TextEditorSettings::highlighterSettings() @@ -468,7 +463,7 @@ const ExtraEncodingSettings &TextEditorSettings::extraEncodingSettings() const CommentsSettings &TextEditorSettings::commentsSettings() { - return d->m_completionSettingsPage->commentsSettings(); + return d->m_completionSettingsPage.commentsSettings(); } void TextEditorSettings::registerCodeStyleFactory(ICodeStylePreferencesFactory *factory) |