diff --git a/src/plugins/texteditor/behaviorsettingspage.cpp b/src/plugins/texteditor/behaviorsettingspage.cpp index 5d397458071..73675e2cdb9 100644 --- a/src/plugins/texteditor/behaviorsettingspage.cpp +++ b/src/plugins/texteditor/behaviorsettingspage.cpp @@ -10,6 +10,7 @@ #include "simplecodestylepreferences.h" #include "storagesettings.h" #include "tabsettings.h" +#include "tabsettingswidget.h" #include "texteditorconstants.h" #include "texteditorsettings.h" #include "texteditortr.h" @@ -35,12 +36,12 @@ namespace TextEditor { -struct BehaviorSettingsPage::BehaviorSettingsPagePrivate : public QObject +class BehaviorSettingsPagePrivate : public QObject { +public: BehaviorSettingsPagePrivate(); const QString m_settingsPrefix{"text"}; - QPointer m_widget; TextEditor::BehaviorSettingsWidget *m_behaviorWidget = nullptr; CodeStylePool *m_defaultCodeStylePool = nullptr; @@ -52,7 +53,7 @@ struct BehaviorSettingsPage::BehaviorSettingsPagePrivate : public QObject ExtraEncodingSettings m_extraEncodingSettings; }; -BehaviorSettingsPage::BehaviorSettingsPagePrivate::BehaviorSettingsPagePrivate() +BehaviorSettingsPagePrivate::BehaviorSettingsPagePrivate() { // global tab preferences for all other languages m_codeStyle = new SimpleCodeStylePreferences(this); @@ -71,6 +72,54 @@ BehaviorSettingsPage::BehaviorSettingsPagePrivate::BehaviorSettingsPagePrivate() m_extraEncodingSettings.fromSettings(m_settingsPrefix, s); } +class BehaviorSettingsWidgetImpl : public Core::IOptionsPageWidget +{ +public: + BehaviorSettingsWidgetImpl(BehaviorSettingsPagePrivate *d) : d(d) + { + d->m_behaviorWidget = new BehaviorSettingsWidget(this); + + auto verticalSpacer = new QSpacerItem(20, 13, QSizePolicy::Minimum, QSizePolicy::Expanding); + + auto gridLayout = new QGridLayout(this); + if (Utils::HostOsInfo::isMacHost()) + gridLayout->setContentsMargins(-1, 0, -1, 0); // don't ask. + gridLayout->addWidget(d->m_behaviorWidget, 0, 0, 1, 1); + gridLayout->addItem(verticalSpacer, 1, 0, 1, 1); + + d->m_pageCodeStyle = new SimpleCodeStylePreferences(this); + d->m_pageCodeStyle->setDelegatingPool(d->m_codeStyle->delegatingPool()); + d->m_pageCodeStyle->setTabSettings(d->m_codeStyle->tabSettings()); + d->m_pageCodeStyle->setCurrentDelegate(d->m_codeStyle->currentDelegate()); + d->m_behaviorWidget->setCodeStyle(d->m_pageCodeStyle); + + TabSettingsWidget *tabSettingsWidget = d->m_behaviorWidget->tabSettingsWidget(); + tabSettingsWidget->setCodingStyleWarningVisible(true); + connect(tabSettingsWidget, &TabSettingsWidget::codingStyleLinkClicked, + this, [] (TabSettingsWidget::CodingStyleLink link) { + switch (link) { + case TabSettingsWidget::CppLink: + Core::ICore::showOptionsDialog(CppEditor::Constants::CPP_CODE_STYLE_SETTINGS_ID); + break; + case TabSettingsWidget::QtQuickLink: + Core::ICore::showOptionsDialog(QmlJSTools::Constants::QML_JS_CODE_STYLE_SETTINGS_ID); + break; + } + }); + + d->m_behaviorWidget->setAssignedTypingSettings(d->m_typingSettings); + d->m_behaviorWidget->setAssignedStorageSettings(d->m_storageSettings); + d->m_behaviorWidget->setAssignedBehaviorSettings(d->m_behaviorSettings); + d->m_behaviorWidget->setAssignedExtraEncodingSettings(d->m_extraEncodingSettings); + d->m_behaviorWidget->setAssignedCodec(Core::EditorManager::defaultTextCodec()); + d->m_behaviorWidget->setAssignedLineEnding(Core::EditorManager::defaultLineEnding()); + } + + void apply() final; + + BehaviorSettingsPagePrivate *d; +}; + BehaviorSettingsPage::BehaviorSettingsPage() : d(new BehaviorSettingsPagePrivate) { @@ -81,6 +130,7 @@ BehaviorSettingsPage::BehaviorSettingsPage() setCategory(TextEditor::Constants::TEXT_EDITOR_SETTINGS_CATEGORY); setDisplayCategory(Tr::tr("Text Editor")); setCategoryIconPath(TextEditor::Constants::TEXT_EDITOR_SETTINGS_CATEGORY_ICON_PATH); + setWidgetCreator([this] { return new BehaviorSettingsWidgetImpl(d); }); } BehaviorSettingsPage::~BehaviorSettingsPage() @@ -88,37 +138,7 @@ BehaviorSettingsPage::~BehaviorSettingsPage() delete d; } -QWidget *BehaviorSettingsPage::widget() -{ - if (!d->m_widget) { - d->m_widget = new QWidget; - d->m_behaviorWidget = new BehaviorSettingsWidget(d->m_widget); - - auto verticalSpacer = new QSpacerItem(20, 13, QSizePolicy::Minimum, QSizePolicy::Expanding); - - auto gridLayout = new QGridLayout(d->m_widget); - if (Utils::HostOsInfo::isMacHost()) - gridLayout->setContentsMargins(-1, 0, -1, 0); // don't ask. - gridLayout->addWidget(d->m_behaviorWidget, 0, 0, 1, 1); - gridLayout->addItem(verticalSpacer, 1, 0, 1, 1); - - d->m_pageCodeStyle = new SimpleCodeStylePreferences(d->m_widget); - d->m_pageCodeStyle->setDelegatingPool(d->m_codeStyle->delegatingPool()); - d->m_pageCodeStyle->setTabSettings(d->m_codeStyle->tabSettings()); - d->m_pageCodeStyle->setCurrentDelegate(d->m_codeStyle->currentDelegate()); - d->m_behaviorWidget->setCodeStyle(d->m_pageCodeStyle); - - TabSettingsWidget *tabSettingsWidget = d->m_behaviorWidget->tabSettingsWidget(); - tabSettingsWidget->setCodingStyleWarningVisible(true); - connect(tabSettingsWidget, &TabSettingsWidget::codingStyleLinkClicked, - this, &BehaviorSettingsPage::openCodingStylePreferences); - - settingsToUI(); - } - return d->m_widget; -} - -void BehaviorSettingsPage::apply() +void BehaviorSettingsWidgetImpl::apply() { if (!d->m_behaviorWidget) // page was never shown return; @@ -128,8 +148,10 @@ void BehaviorSettingsPage::apply() BehaviorSettings newBehaviorSettings; ExtraEncodingSettings newExtraEncodingSettings; - settingsFromUI(&newTypingSettings, &newStorageSettings, - &newBehaviorSettings, &newExtraEncodingSettings); + d->m_behaviorWidget->assignedTypingSettings(&newTypingSettings); + d->m_behaviorWidget->assignedStorageSettings(&newStorageSettings); + d->m_behaviorWidget->assignedBehaviorSettings(&newBehaviorSettings); + d->m_behaviorWidget->assignedExtraEncodingSettings(&newExtraEncodingSettings); QSettings *s = Core::ICore::settings(); QTC_ASSERT(s, return); @@ -178,32 +200,6 @@ void BehaviorSettingsPage::apply() d->m_behaviorWidget->assignedLineEnding()); } -void BehaviorSettingsPage::settingsFromUI(TypingSettings *typingSettings, - StorageSettings *storageSettings, - BehaviorSettings *behaviorSettings, - ExtraEncodingSettings *extraEncodingSettings) const -{ - d->m_behaviorWidget->assignedTypingSettings(typingSettings); - d->m_behaviorWidget->assignedStorageSettings(storageSettings); - d->m_behaviorWidget->assignedBehaviorSettings(behaviorSettings); - d->m_behaviorWidget->assignedExtraEncodingSettings(extraEncodingSettings); -} - -void BehaviorSettingsPage::settingsToUI() -{ - d->m_behaviorWidget->setAssignedTypingSettings(d->m_typingSettings); - d->m_behaviorWidget->setAssignedStorageSettings(d->m_storageSettings); - d->m_behaviorWidget->setAssignedBehaviorSettings(d->m_behaviorSettings); - d->m_behaviorWidget->setAssignedExtraEncodingSettings(d->m_extraEncodingSettings); - d->m_behaviorWidget->setAssignedCodec(Core::EditorManager::defaultTextCodec()); - d->m_behaviorWidget->setAssignedLineEnding(Core::EditorManager::defaultLineEnding()); -} - -void BehaviorSettingsPage::finish() -{ - delete d->m_widget; -} - ICodeStylePreferences *BehaviorSettingsPage::codeStyle() const { return d->m_codeStyle; @@ -235,16 +231,4 @@ const ExtraEncodingSettings &BehaviorSettingsPage::extraEncodingSettings() const } -void BehaviorSettingsPage::openCodingStylePreferences(TabSettingsWidget::CodingStyleLink link) -{ - switch (link) { - case TabSettingsWidget::CppLink: - Core::ICore::showOptionsDialog(CppEditor::Constants::CPP_CODE_STYLE_SETTINGS_ID); - break; - case TabSettingsWidget::QtQuickLink: - Core::ICore::showOptionsDialog(QmlJSTools::Constants::QML_JS_CODE_STYLE_SETTINGS_ID); - break; - } -} - } // namespace TextEditor diff --git a/src/plugins/texteditor/behaviorsettingspage.h b/src/plugins/texteditor/behaviorsettingspage.h index 495a800d86f..048a865d5ff 100644 --- a/src/plugins/texteditor/behaviorsettingspage.h +++ b/src/plugins/texteditor/behaviorsettingspage.h @@ -5,8 +5,6 @@ #include "texteditor_global.h" -#include "tabsettingswidget.h" - #include QT_BEGIN_NAMESPACE @@ -31,11 +29,6 @@ public: BehaviorSettingsPage(); ~BehaviorSettingsPage() override; - // IOptionsPage - QWidget *widget() override; - void apply() override; - void finish() override; - ICodeStylePreferences *codeStyle() const; CodeStylePool *codeStylePool() const; const TypingSettings &typingSettings() const; @@ -44,17 +37,8 @@ public: const ExtraEncodingSettings &extraEncodingSettings() const; private: - void openCodingStylePreferences(TextEditor::TabSettingsWidget::CodingStyleLink link); - - void settingsFromUI(TypingSettings *typingSettings, - StorageSettings *storageSettings, - BehaviorSettings *behaviorSettings, - ExtraEncodingSettings *extraEncodingSettings) const; - void settingsToUI(); - QList m_codecs; - struct BehaviorSettingsPagePrivate; - BehaviorSettingsPagePrivate *d; + class BehaviorSettingsPagePrivate *d; }; } // namespace TextEditor