TextEditor: Simplify BehaviorSettingsPage creation

Change-Id: I0e1d44e9cccbf83e11ef04f055e1e6bd0317c40e
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2020-01-21 15:44:41 +01:00
parent 8da309f6a5
commit efbc582e23
3 changed files with 47 additions and 71 deletions

View File

@@ -47,20 +47,17 @@
#include <QPointer> #include <QPointer>
#include <QSettings> #include <QSettings>
#include <QTextCodec>
using namespace TextEditor; namespace TextEditor {
struct BehaviorSettingsPage::BehaviorSettingsPagePrivate struct BehaviorSettingsPage::BehaviorSettingsPagePrivate : public QObject
{ {
explicit BehaviorSettingsPagePrivate(const BehaviorSettingsPageParameters &p); BehaviorSettingsPagePrivate();
const BehaviorSettingsPageParameters m_parameters; const QString m_settingsPrefix{"text"};
QPointer<QWidget> m_widget; QPointer<QWidget> m_widget;
Internal::Ui::BehaviorSettingsPage *m_page = nullptr; Internal::Ui::BehaviorSettingsPage *m_page = nullptr;
void init();
CodeStylePool *m_defaultCodeStylePool = nullptr; CodeStylePool *m_defaultCodeStylePool = nullptr;
SimpleCodeStylePreferences *m_codeStyle = nullptr; SimpleCodeStylePreferences *m_codeStyle = nullptr;
SimpleCodeStylePreferences *m_pageCodeStyle = nullptr; SimpleCodeStylePreferences *m_pageCodeStyle = nullptr;
@@ -70,43 +67,35 @@ struct BehaviorSettingsPage::BehaviorSettingsPagePrivate
ExtraEncodingSettings m_extraEncodingSettings; ExtraEncodingSettings m_extraEncodingSettings;
}; };
BehaviorSettingsPage::BehaviorSettingsPagePrivate::BehaviorSettingsPagePrivate BehaviorSettingsPage::BehaviorSettingsPagePrivate::BehaviorSettingsPagePrivate()
(const BehaviorSettingsPageParameters &p)
: m_parameters(p)
{ {
} // global tab preferences for all other languages
m_codeStyle = new SimpleCodeStylePreferences(this);
m_codeStyle->setDisplayName(tr("Global", "Settings"));
m_codeStyle->setId(Constants::GLOBAL_SETTINGS_ID);
// default pool for all other languages
m_defaultCodeStylePool = new CodeStylePool(nullptr, this); // Any language
m_defaultCodeStylePool->addCodeStyle(m_codeStyle);
void BehaviorSettingsPage::BehaviorSettingsPagePrivate::init()
{
const QSettings *s = Core::ICore::settings(); const QSettings *s = Core::ICore::settings();
m_codeStyle->fromSettings(m_parameters.settingsPrefix, s); m_codeStyle->fromSettings(m_settingsPrefix, s);
m_typingSettings.fromSettings(m_parameters.settingsPrefix, s); m_typingSettings.fromSettings(m_settingsPrefix, s);
m_storageSettings.fromSettings(m_parameters.settingsPrefix, s); m_storageSettings.fromSettings(m_settingsPrefix, s);
m_behaviorSettings.fromSettings(m_parameters.settingsPrefix, s); m_behaviorSettings.fromSettings(m_settingsPrefix, s);
m_extraEncodingSettings.fromSettings(m_parameters.settingsPrefix, s); m_extraEncodingSettings.fromSettings(m_settingsPrefix, s);
} }
BehaviorSettingsPage::BehaviorSettingsPage(const BehaviorSettingsPageParameters &p, BehaviorSettingsPage::BehaviorSettingsPage()
QObject *parent) : d(new BehaviorSettingsPagePrivate)
: Core::IOptionsPage(parent),
d(new BehaviorSettingsPagePrivate(p))
{ {
// Add the GUI used to configure the tab, storage and interaction settings
setId(Constants::TEXT_EDITOR_BEHAVIOR_SETTINGS);
setDisplayName(tr("Behavior"));
setCategory(TextEditor::Constants::TEXT_EDITOR_SETTINGS_CATEGORY); setCategory(TextEditor::Constants::TEXT_EDITOR_SETTINGS_CATEGORY);
setDisplayCategory(QCoreApplication::translate("TextEditor", "Text Editor")); setDisplayCategory(QCoreApplication::translate("TextEditor", "Text Editor"));
setCategoryIconPath(TextEditor::Constants::TEXT_EDITOR_SETTINGS_CATEGORY_ICON_PATH); setCategoryIconPath(TextEditor::Constants::TEXT_EDITOR_SETTINGS_CATEGORY_ICON_PATH);
// global tab preferences for all other languages
d->m_codeStyle = new SimpleCodeStylePreferences(this);
d->m_codeStyle->setDisplayName(tr("Global", "Settings"));
d->m_codeStyle->setId(Constants::GLOBAL_SETTINGS_ID);
// default pool for all other languages
d->m_defaultCodeStylePool = new CodeStylePool(nullptr, this); // Any language
d->m_defaultCodeStylePool->addCodeStyle(d->m_codeStyle);
d->init();
setId(p.id);
setDisplayName(p.displayName);
} }
BehaviorSettingsPage::~BehaviorSettingsPage() BehaviorSettingsPage::~BehaviorSettingsPage()
@@ -156,19 +145,19 @@ void BehaviorSettingsPage::apply()
if (d->m_codeStyle->tabSettings() != d->m_pageCodeStyle->tabSettings()) { if (d->m_codeStyle->tabSettings() != d->m_pageCodeStyle->tabSettings()) {
d->m_codeStyle->setTabSettings(d->m_pageCodeStyle->tabSettings()); d->m_codeStyle->setTabSettings(d->m_pageCodeStyle->tabSettings());
if (s) if (s)
d->m_codeStyle->toSettings(d->m_parameters.settingsPrefix, s); d->m_codeStyle->toSettings(d->m_settingsPrefix, s);
} }
if (d->m_codeStyle->currentDelegate() != d->m_pageCodeStyle->currentDelegate()) { if (d->m_codeStyle->currentDelegate() != d->m_pageCodeStyle->currentDelegate()) {
d->m_codeStyle->setCurrentDelegate(d->m_pageCodeStyle->currentDelegate()); d->m_codeStyle->setCurrentDelegate(d->m_pageCodeStyle->currentDelegate());
if (s) if (s)
d->m_codeStyle->toSettings(d->m_parameters.settingsPrefix, s); d->m_codeStyle->toSettings(d->m_settingsPrefix, s);
} }
if (newTypingSettings != d->m_typingSettings) { if (newTypingSettings != d->m_typingSettings) {
d->m_typingSettings = newTypingSettings; d->m_typingSettings = newTypingSettings;
if (s) if (s)
d->m_typingSettings.toSettings(d->m_parameters.settingsPrefix, s); d->m_typingSettings.toSettings(d->m_settingsPrefix, s);
emit typingSettingsChanged(newTypingSettings); emit typingSettingsChanged(newTypingSettings);
} }
@@ -176,7 +165,7 @@ void BehaviorSettingsPage::apply()
if (newStorageSettings != d->m_storageSettings) { if (newStorageSettings != d->m_storageSettings) {
d->m_storageSettings = newStorageSettings; d->m_storageSettings = newStorageSettings;
if (s) if (s)
d->m_storageSettings.toSettings(d->m_parameters.settingsPrefix, s); d->m_storageSettings.toSettings(d->m_settingsPrefix, s);
emit storageSettingsChanged(newStorageSettings); emit storageSettingsChanged(newStorageSettings);
} }
@@ -184,7 +173,7 @@ void BehaviorSettingsPage::apply()
if (newBehaviorSettings != d->m_behaviorSettings) { if (newBehaviorSettings != d->m_behaviorSettings) {
d->m_behaviorSettings = newBehaviorSettings; d->m_behaviorSettings = newBehaviorSettings;
if (s) if (s)
d->m_behaviorSettings.toSettings(d->m_parameters.settingsPrefix, s); d->m_behaviorSettings.toSettings(d->m_settingsPrefix, s);
emit behaviorSettingsChanged(newBehaviorSettings); emit behaviorSettingsChanged(newBehaviorSettings);
} }
@@ -192,7 +181,7 @@ void BehaviorSettingsPage::apply()
if (newExtraEncodingSettings != d->m_extraEncodingSettings) { if (newExtraEncodingSettings != d->m_extraEncodingSettings) {
d->m_extraEncodingSettings = newExtraEncodingSettings; d->m_extraEncodingSettings = newExtraEncodingSettings;
if (s) if (s)
d->m_extraEncodingSettings.toSettings(d->m_parameters.settingsPrefix, s); d->m_extraEncodingSettings.toSettings(d->m_settingsPrefix, s);
emit extraEncodingSettingsChanged(newExtraEncodingSettings); emit extraEncodingSettingsChanged(newExtraEncodingSettings);
} }
@@ -277,3 +266,5 @@ void BehaviorSettingsPage::openCodingStylePreferences(TabSettingsWidget::CodingS
break; break;
} }
} }
} // namespace TextEditor

View File

@@ -41,20 +41,12 @@ class ExtraEncodingSettings;
class ICodeStylePreferences; class ICodeStylePreferences;
class CodeStylePool; class CodeStylePool;
class BehaviorSettingsPageParameters
{
public:
Core::Id id;
QString displayName;
QString settingsPrefix;
};
class BehaviorSettingsPage : public Core::IOptionsPage class BehaviorSettingsPage : public Core::IOptionsPage
{ {
Q_OBJECT Q_OBJECT
public: public:
BehaviorSettingsPage(const BehaviorSettingsPageParameters &p, QObject *parent); BehaviorSettingsPage();
~BehaviorSettingsPage() override; ~BehaviorSettingsPage() override;
// IOptionsPage // IOptionsPage

View File

@@ -64,7 +64,7 @@ class TextEditorSettingsPrivate
{ {
public: public:
FontSettingsPage *m_fontSettingsPage; FontSettingsPage *m_fontSettingsPage;
BehaviorSettingsPage *m_behaviorSettingsPage; BehaviorSettingsPage m_behaviorSettingsPage;
DisplaySettingsPage m_displaySettingsPage; DisplaySettingsPage m_displaySettingsPage;
HighlighterSettingsPage m_highlighterSettingsPage; HighlighterSettingsPage m_highlighterSettingsPage;
SnippetsSettingsPage m_snippetsSettingsPage; SnippetsSettingsPage m_snippetsSettingsPage;
@@ -350,13 +350,6 @@ TextEditorSettings::TextEditorSettings()
Constants::TEXT_EDITOR_FONT_SETTINGS, Constants::TEXT_EDITOR_FONT_SETTINGS,
this); this);
// Add the GUI used to configure the tab, storage and interaction settings
BehaviorSettingsPageParameters behaviorSettingsPageParameters;
behaviorSettingsPageParameters.id = Constants::TEXT_EDITOR_BEHAVIOR_SETTINGS;
behaviorSettingsPageParameters.displayName = tr("Behavior");
behaviorSettingsPageParameters.settingsPrefix = QLatin1String("text");
d->m_behaviorSettingsPage = new BehaviorSettingsPage(behaviorSettingsPageParameters, this);
auto updateGeneralMessagesFontSettings = []() { auto updateGeneralMessagesFontSettings = []() {
Core::MessageManager::setFont(d->m_fontSettingsPage->fontSettings().font()); Core::MessageManager::setFont(d->m_fontSettingsPage->fontSettings().font());
}; };
@@ -365,20 +358,20 @@ TextEditorSettings::TextEditorSettings()
connect(d->m_fontSettingsPage, &FontSettingsPage::changed, connect(d->m_fontSettingsPage, &FontSettingsPage::changed,
this, updateGeneralMessagesFontSettings); this, updateGeneralMessagesFontSettings);
updateGeneralMessagesFontSettings(); updateGeneralMessagesFontSettings();
connect(d->m_behaviorSettingsPage, &BehaviorSettingsPage::typingSettingsChanged, connect(&d->m_behaviorSettingsPage, &BehaviorSettingsPage::typingSettingsChanged,
this, &TextEditorSettings::typingSettingsChanged); this, &TextEditorSettings::typingSettingsChanged);
connect(d->m_behaviorSettingsPage, &BehaviorSettingsPage::storageSettingsChanged, connect(&d->m_behaviorSettingsPage, &BehaviorSettingsPage::storageSettingsChanged,
this, &TextEditorSettings::storageSettingsChanged); this, &TextEditorSettings::storageSettingsChanged);
auto updateGeneralMessagesBehaviorSettings = []() { auto updateGeneralMessagesBehaviorSettings = []() {
bool wheelZoom = d->m_behaviorSettingsPage->behaviorSettings().m_scrollWheelZooming; bool wheelZoom = d->m_behaviorSettingsPage.behaviorSettings().m_scrollWheelZooming;
Core::MessageManager::setWheelZoomEnabled(wheelZoom); Core::MessageManager::setWheelZoomEnabled(wheelZoom);
}; };
connect(d->m_behaviorSettingsPage, &BehaviorSettingsPage::behaviorSettingsChanged, connect(&d->m_behaviorSettingsPage, &BehaviorSettingsPage::behaviorSettingsChanged,
this, &TextEditorSettings::behaviorSettingsChanged); this, &TextEditorSettings::behaviorSettingsChanged);
connect(d->m_behaviorSettingsPage, &BehaviorSettingsPage::behaviorSettingsChanged, connect(&d->m_behaviorSettingsPage, &BehaviorSettingsPage::behaviorSettingsChanged,
this, updateGeneralMessagesBehaviorSettings); this, updateGeneralMessagesBehaviorSettings);
updateGeneralMessagesBehaviorSettings(); updateGeneralMessagesBehaviorSettings();
connect(d->m_behaviorSettingsPage, &BehaviorSettingsPage::extraEncodingSettingsChanged, connect(&d->m_behaviorSettingsPage, &BehaviorSettingsPage::extraEncodingSettingsChanged,
this, &TextEditorSettings::extraEncodingSettingsChanged); this, &TextEditorSettings::extraEncodingSettingsChanged);
connect(&d->m_displaySettingsPage, &DisplaySettingsPage::marginSettingsChanged, connect(&d->m_displaySettingsPage, &DisplaySettingsPage::marginSettingsChanged,
this, &TextEditorSettings::marginSettingsChanged); this, &TextEditorSettings::marginSettingsChanged);
@@ -388,7 +381,7 @@ TextEditorSettings::TextEditorSettings()
auto updateCamelCaseNavigation = [] { auto updateCamelCaseNavigation = [] {
Utils::FancyLineEdit::setCamelCaseNavigationEnabled(behaviorSettings().m_camelCaseNavigation); Utils::FancyLineEdit::setCamelCaseNavigationEnabled(behaviorSettings().m_camelCaseNavigation);
}; };
connect(d->m_behaviorSettingsPage, &BehaviorSettingsPage::behaviorSettingsChanged, connect(&d->m_behaviorSettingsPage, &BehaviorSettingsPage::behaviorSettingsChanged,
this, updateCamelCaseNavigation); this, updateCamelCaseNavigation);
updateCamelCaseNavigation(); updateCamelCaseNavigation();
} }
@@ -412,17 +405,17 @@ const FontSettings &TextEditorSettings::fontSettings()
const TypingSettings &TextEditorSettings::typingSettings() const TypingSettings &TextEditorSettings::typingSettings()
{ {
return d->m_behaviorSettingsPage->typingSettings(); return d->m_behaviorSettingsPage.typingSettings();
} }
const StorageSettings &TextEditorSettings::storageSettings() const StorageSettings &TextEditorSettings::storageSettings()
{ {
return d->m_behaviorSettingsPage->storageSettings(); return d->m_behaviorSettingsPage.storageSettings();
} }
const BehaviorSettings &TextEditorSettings::behaviorSettings() const BehaviorSettings &TextEditorSettings::behaviorSettings()
{ {
return d->m_behaviorSettingsPage->behaviorSettings(); return d->m_behaviorSettingsPage.behaviorSettings();
} }
const MarginSettings &TextEditorSettings::marginSettings() const MarginSettings &TextEditorSettings::marginSettings()
@@ -447,7 +440,7 @@ const HighlighterSettings &TextEditorSettings::highlighterSettings()
const ExtraEncodingSettings &TextEditorSettings::extraEncodingSettings() const ExtraEncodingSettings &TextEditorSettings::extraEncodingSettings()
{ {
return d->m_behaviorSettingsPage->extraEncodingSettings(); return d->m_behaviorSettingsPage.extraEncodingSettings();
} }
const CommentsSettings &TextEditorSettings::commentsSettings() const CommentsSettings &TextEditorSettings::commentsSettings()
@@ -477,7 +470,7 @@ ICodeStylePreferencesFactory *TextEditorSettings::codeStyleFactory(Core::Id lang
ICodeStylePreferences *TextEditorSettings::codeStyle() ICodeStylePreferences *TextEditorSettings::codeStyle()
{ {
return d->m_behaviorSettingsPage->codeStyle(); return d->m_behaviorSettingsPage.codeStyle();
} }
ICodeStylePreferences *TextEditorSettings::codeStyle(Core::Id languageId) ICodeStylePreferences *TextEditorSettings::codeStyle(Core::Id languageId)
@@ -502,7 +495,7 @@ void TextEditorSettings::unregisterCodeStyle(Core::Id languageId)
CodeStylePool *TextEditorSettings::codeStylePool() CodeStylePool *TextEditorSettings::codeStylePool()
{ {
return d->m_behaviorSettingsPage->codeStylePool(); return d->m_behaviorSettingsPage.codeStylePool();
} }
CodeStylePool *TextEditorSettings::codeStylePool(Core::Id languageId) CodeStylePool *TextEditorSettings::codeStylePool(Core::Id languageId)