AutoTest: Take advantage of IOptionPage::setWidgetCreator()

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

Change-Id: I1d914d21c62a983a212d9696d14890cfd0e643c7
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2023-04-20 09:55:15 +02:00
parent 74322dfedf
commit d74c2369ee
2 changed files with 41 additions and 67 deletions

View File

@@ -27,19 +27,18 @@
#include <QSpacerItem>
#include <QSpinBox>
#include <QTreeWidget>
#include <QWidget>
using namespace Utils;
namespace Autotest {
namespace Internal {
namespace Autotest::Internal {
class TestSettingsWidget : public QWidget
class TestSettingsWidget : public Core::IOptionsPageWidget
{
public:
explicit TestSettingsWidget(QWidget *parent = nullptr);
explicit TestSettingsWidget(TestSettings *settings);
void apply() final;
void setSettings(const TestSettings &settings);
TestSettings settings() const;
private:
@@ -49,6 +48,7 @@ private:
void testToolsSettings(TestSettings &settings) const;
void onFrameworkItemChanged();
TestSettings *m_settings;
QCheckBox *m_omitInternalMsgCB;
QCheckBox *m_omitRunConfigWarnCB;
QCheckBox *m_limitResultOutputCB;
@@ -66,8 +66,8 @@ private:
InfoLabel *m_frameworksWarn;
};
TestSettingsWidget::TestSettingsWidget(QWidget *parent)
: QWidget(parent)
TestSettingsWidget::TestSettingsWidget(TestSettings *settings)
: m_settings(settings)
{
resize(586, 469);
@@ -203,25 +203,23 @@ TestSettingsWidget::TestSettingsWidget(QWidget *parent)
m_openResultsOnFailCB, &QCheckBox::setEnabled);
connect(m_limitResultDescriptionCb, &QCheckBox::toggled,
m_limitResultDescriptionSpinBox, &QSpinBox::setEnabled);
}
void TestSettingsWidget::setSettings(const TestSettings &settings)
{
m_timeoutSpin->setValue(settings.timeout / 1000); // we store milliseconds
m_omitInternalMsgCB->setChecked(settings.omitInternalMssg);
m_omitRunConfigWarnCB->setChecked(settings.omitRunConfigWarn);
m_limitResultOutputCB->setChecked(settings.limitResultOutput);
m_limitResultDescriptionCb->setChecked(settings.limitResultDescription);
m_limitResultDescriptionSpinBox->setEnabled(settings.limitResultDescription);
m_limitResultDescriptionSpinBox->setValue(settings.resultDescriptionMaxSize);
m_autoScrollCB->setChecked(settings.autoScroll);
m_processArgsCB->setChecked(settings.processArgs);
m_displayAppCB->setChecked(settings.displayApplication);
m_openResultsOnStartCB->setChecked(settings.popupOnStart);
m_openResultsOnFinishCB->setChecked(settings.popupOnFinish);
m_openResultsOnFailCB->setChecked(settings.popupOnFail);
m_runAfterBuildCB->setCurrentIndex(int(settings.runAfterBuild));
populateFrameworksListWidget(settings.frameworks, settings.tools);
m_timeoutSpin->setValue(settings->timeout / 1000); // we store milliseconds
m_omitInternalMsgCB->setChecked(settings->omitInternalMssg);
m_omitRunConfigWarnCB->setChecked(settings->omitRunConfigWarn);
m_limitResultOutputCB->setChecked(settings->limitResultOutput);
m_limitResultDescriptionCb->setChecked(settings->limitResultDescription);
m_limitResultDescriptionSpinBox->setEnabled(settings->limitResultDescription);
m_limitResultDescriptionSpinBox->setValue(settings->resultDescriptionMaxSize);
m_autoScrollCB->setChecked(settings->autoScroll);
m_processArgsCB->setChecked(settings->processArgs);
m_displayAppCB->setChecked(settings->displayApplication);
m_openResultsOnStartCB->setChecked(settings->popupOnStart);
m_openResultsOnFinishCB->setChecked(settings->popupOnFinish);
m_openResultsOnFailCB->setChecked(settings->popupOnFail);
m_runAfterBuildCB->setCurrentIndex(int(settings->runAfterBuild));
populateFrameworksListWidget(settings->frameworks, settings->tools);
}
TestSettings TestSettingsWidget::settings() const
@@ -343,30 +341,9 @@ void TestSettingsWidget::onFrameworkItemChanged()
|| (mixed == (ITestBase::Framework | ITestBase::Tool)));
}
TestSettingsPage::TestSettingsPage(TestSettings *settings)
: m_settings(settings)
void TestSettingsWidget::apply()
{
setId(Constants::AUTOTEST_SETTINGS_ID);
setDisplayName(Tr::tr("General"));
setCategory(Constants::AUTOTEST_SETTINGS_CATEGORY);
setDisplayCategory(Tr::tr("Testing"));
setCategoryIconPath(":/autotest/images/settingscategory_autotest.png");
}
QWidget *TestSettingsPage::widget()
{
if (!m_widget) {
m_widget = new TestSettingsWidget;
m_widget->setSettings(*m_settings);
}
return m_widget;
}
void TestSettingsPage::apply()
{
if (!m_widget) // page was not shown at all
return;
const TestSettings newSettings = m_widget->settings();
const TestSettings newSettings = settings();
const QList<Id> changedIds = Utils::filtered(newSettings.frameworksGrouping.keys(),
[newSettings, this](const Id &id) {
return newSettings.frameworksGrouping[id] != m_settings->frameworksGrouping[id];
@@ -388,5 +365,16 @@ void TestSettingsPage::apply()
TestTreeModel::instance()->rebuild(changedIds);
}
} // namespace Internal
} // namespace Autotest
// TestSettingsPage
TestSettingsPage::TestSettingsPage(TestSettings *settings)
{
setId(Constants::AUTOTEST_SETTINGS_ID);
setDisplayName(Tr::tr("General"));
setCategory(Constants::AUTOTEST_SETTINGS_CATEGORY);
setDisplayCategory(Tr::tr("Testing"));
setCategoryIconPath(":/autotest/images/settingscategory_autotest.png");
setWidgetCreator([settings] { return new TestSettingsWidget(settings); });
}
} // Autotest::Internal

View File

@@ -5,28 +5,14 @@
#include <coreplugin/dialogs/ioptionspage.h>
#include <QPointer>
namespace Autotest {
namespace Internal {
namespace Autotest::Internal {
struct TestSettings;
class TestSettingsWidget;
class TestSettingsPage : public Core::IOptionsPage
{
Q_OBJECT
public:
explicit TestSettingsPage(TestSettings *settings);
QWidget *widget() override;
void apply() override;
void finish() override { }
private:
TestSettings *m_settings;
QPointer<TestSettingsWidget> m_widget;
};
} // namespace Internal
} // namespace Autotest
} // Autotest::Internal