forked from qt-creator/qt-creator
TextEditor: Partially apply SettingsPage pattern to completion settings
Change-Id: Ieb8547bab74c6a2d6489a6bf53b7f224003e0401 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -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()
|
||||
private:
|
||||
void apply() final;
|
||||
|
||||
CaseSensitivity caseSensitivity() const;
|
||||
CompletionTrigger completionTrigger() const;
|
||||
void settingsFromUi(CompletionSettings &completion, CommentsSettings &comment) const;
|
||||
|
||||
CompletionSettingsPage *m_owner = nullptr;
|
||||
Ui::CompletionSettingsPage m_ui;
|
||||
};
|
||||
|
||||
CompletionSettingsPageWidget::CompletionSettingsPageWidget(CompletionSettingsPage *owner)
|
||||
: m_owner(owner)
|
||||
{
|
||||
delete m_page;
|
||||
}
|
||||
m_ui.setupUi(this);
|
||||
|
||||
QWidget *CompletionSettingsPage::widget()
|
||||
{
|
||||
if (!m_widget) {
|
||||
m_widget = new QWidget;
|
||||
m_page = new Ui::CompletionSettingsPage;
|
||||
m_page->setupUi(m_widget);
|
||||
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);
|
||||
});
|
||||
|
||||
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());
|
||||
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();
|
||||
= 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_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;
|
||||
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
|
||||
|
||||
@@ -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;
|
||||
friend class CompletionSettingsPageWidget;
|
||||
|
||||
void onCompletionTriggerChanged();
|
||||
|
||||
Ui::CompletionSettingsPage *m_page = nullptr;
|
||||
QPointer<QWidget> m_widget;
|
||||
CommentsSettings m_commentsSettings;
|
||||
CompletionSettings m_completionSettings;
|
||||
};
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user