Terminal: Use IOptionPage::setWidgetCreator() for settings

Less boilerplate for the implementation add user code access to
IOptionPage::{apply,finish} is planned to be removed.

Change-Id: Id8ec4006d1060be2032caf8eda6bf80760f6db22
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
hjk
2023-04-20 10:56:47 +02:00
parent 7612ef1d0f
commit 3d354290be
3 changed files with 123 additions and 124 deletions

View File

@@ -44,7 +44,7 @@ bool TerminalPlugin::delayedInitialize()
void TerminalPlugin::extensionsInitialized()
{
TerminalSettingsPage::instance().init();
(void) TerminalSettingsPage::instance();
TerminalSettings::instance().readSettings(Core::ICore::settings());
m_terminalPane = new TerminalPane();

View File

@@ -28,18 +28,6 @@ using namespace Utils;
namespace Terminal {
TerminalSettingsPage::TerminalSettingsPage()
{
setId("Terminal.General");
setDisplayName("Terminal");
setCategory("ZY.Terminal");
setDisplayCategory("Terminal");
setSettings(&TerminalSettings::instance());
setCategoryIconPath(":/terminal/images/settingscategory_terminal.png");
}
void TerminalSettingsPage::init() {}
static expected_str<void> loadXdefaults(const FilePath &path)
{
const expected_str<QByteArray> readResult = path.fileContents();
@@ -320,13 +308,14 @@ static expected_str<void> loadColorScheme(const FilePath &path)
return make_unexpected(Tr::tr("Unknown color scheme format"));
}
QWidget *TerminalSettingsPage::widget()
class TerminalSettingsPageWidget : public Core::IOptionsPageWidget
{
QWidget *widget = new QWidget;
public:
TerminalSettingsPageWidget()
{
using namespace Layouting;
QFontComboBox *fontComboBox = new QFontComboBox(widget);
QFontComboBox *fontComboBox = new QFontComboBox(this);
fontComboBox->setFontFilters(QFontComboBox::MonospacedFonts);
fontComboBox->setCurrentFont(TerminalSettings::instance().font.value());
@@ -339,9 +328,9 @@ QWidget *TerminalSettingsPage::widget()
QPushButton *loadThemeButton = new QPushButton(Tr::tr("Load Theme..."));
QPushButton *resetTheme = new QPushButton(Tr::tr("Reset Theme to default"));
connect(loadThemeButton, &QPushButton::clicked, this, [widget] {
connect(loadThemeButton, &QPushButton::clicked, this, [this] {
const FilePath path = FileUtils::getOpenFilePath(
widget,
this,
"Open Theme",
{},
"All Scheme formats (*.itermcolors *.json *.colorscheme *.theme *.theme.txt);;"
@@ -361,7 +350,7 @@ QWidget *TerminalSettingsPage::widget()
const expected_str<void> result = loadColorScheme(path);
if (!result)
QMessageBox::warning(widget, Tr::tr("Error"), result.error());
QMessageBox::warning(this, Tr::tr("Error"), result.error());
});
connect(resetTheme, &QPushButton::clicked, this, [] {
@@ -428,23 +417,37 @@ QWidget *TerminalSettingsPage::widget()
settings.shellArguments,
},
st,
}.attachTo(widget);
}.attachTo(this);
// clang-format on
DropSupport *dropSupport = new DropSupport(widget);
DropSupport *dropSupport = new DropSupport(this);
connect(dropSupport,
&DropSupport::filesDropped,
this,
[widget](const QList<DropSupport::FileSpec> &files) {
[this](const QList<DropSupport::FileSpec> &files) {
if (files.size() != 1)
return;
const expected_str<void> result = loadColorScheme(files.at(0).filePath);
if (!result)
QMessageBox::warning(widget, Tr::tr("Error"), result.error());
QMessageBox::warning(this, Tr::tr("Error"), result.error());
});
}
return widget;
void apply() final {}
};
// TerminalSettingsPage
TerminalSettingsPage::TerminalSettingsPage()
{
setId("Terminal.General");
setDisplayName("Terminal");
setCategory("ZY.Terminal");
setDisplayCategory("Terminal");
setSettings(&TerminalSettings::instance());
setCategoryIconPath(":/terminal/images/settingscategory_terminal.png");
setWidgetCreator([] { return new TerminalSettingsPageWidget; });
}
TerminalSettingsPage &TerminalSettingsPage::instance()

View File

@@ -13,10 +13,6 @@ public:
TerminalSettingsPage();
static TerminalSettingsPage &instance();
void init();
QWidget *widget() override;
};
} // namespace Terminal