TextEditor: Use IOptionPage::setWidgetCreator() for behavior settings

Change-Id: I24629e64b48c08b1321f0ebf3fca21e17a1f69a1
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
hjk
2023-04-20 10:58:35 +02:00
parent b5492953e2
commit f8012b7ac9
2 changed files with 59 additions and 91 deletions

View File

@@ -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<QWidget> 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

View File

@@ -5,8 +5,6 @@
#include "texteditor_global.h"
#include "tabsettingswidget.h"
#include <coreplugin/dialogs/ioptionspage.h>
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<QTextCodec *> m_codecs;
struct BehaviorSettingsPagePrivate;
BehaviorSettingsPagePrivate *d;
class BehaviorSettingsPagePrivate *d;
};
} // namespace TextEditor