ProjectExplorer: Move BuildStepWidget::summary etc to BuildStep

The step is the source of information anyway, and available at the
only place of use. No need to copy that over to the widget, neither
for keeping it up-to-date there when the mechanism is already
available in the step itself.

This creates quite some potential for the simplification of
the various createConfigWidget implementations in follow-up patches.

Change-Id: I4474665f194a1ff7c5792ad086ed53c8d3ce13e6
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2020-09-14 12:37:32 +02:00
parent ad7dbc4619
commit b97b7dc6f2
16 changed files with 58 additions and 87 deletions

View File

@@ -159,9 +159,6 @@ private:
AndroidBuildApkWidget::AndroidBuildApkWidget(AndroidBuildApkStep *step)
: BuildStepConfigWidget(step), m_step(step)
{
setDisplayName("<b>" + tr("Build Android APK") + "</b>");
setSummaryText(displayName());
auto vbox = new QVBoxLayout(this);
vbox->addWidget(createSignPackageGroup());
vbox->addWidget(createApplicationGroup());
@@ -493,6 +490,8 @@ AndroidBuildApkStep::AndroidBuildApkStep(BuildStepList *parent, Utils::Id id)
sdkManager()->latestAndroidSdkPlatform()))
{
setImmutable(true);
setDisplayName("<b>" + tr("Build Android APK") + "</b>");
setSummaryText(displayName());
}
bool AndroidBuildApkStep::init()

View File

@@ -477,8 +477,8 @@ BuildStepConfigWidget *AndroidDeployQtStep::createConfigWidget()
{
auto widget = new BuildStepConfigWidget(this);
widget->setDisplayName(QString("<b>%1</b>").arg(displayName()));
widget->setSummaryText(displayName());
setDisplayName(QString("<b>%1</b>").arg(displayName()));
setSummaryText(displayName());
auto uninstallPreviousCheckBox = new QCheckBox(widget);
uninstallPreviousCheckBox->setText(tr("Uninstall the existing app first"));

View File

@@ -436,14 +436,14 @@ BuildStepConfigWidget *CMakeBuildStep::createConfigWidget()
{
auto widget = new BuildStepConfigWidget(this);
auto updateDetails = [this, widget] {
auto updateDetails = [this] {
ProcessParameters param;
setupProcessParameters(&param);
param.setCommandLine(cmakeCommand());
widget->setSummaryText(param.summary(displayName()));
setSummaryText(param.summary(displayName()));
};
widget->setDisplayName(tr("Build", "ConfigWidget display name."));
setDisplayName(tr("Build", "ConfigWidget display name."));
LayoutBuilder builder(widget);
builder.addRow(m_cmakeArguments);

View File

@@ -116,10 +116,10 @@ BuildStepConfigWidget *IosBuildStep::createConfigWidget()
setDisplayName(tr("iOS build", "iOS BuildStep display name."));
auto updateDetails = [this, widget] {
auto updateDetails = [this] {
ProcessParameters param;
setupProcessParameters(&param);
widget->setSummaryText(param.summary(displayName()));
setSummaryText(param.summary(displayName()));
};
updateDetails();

View File

@@ -235,11 +235,11 @@ BuildStepConfigWidget *IosDeployStep::createConfigWidget()
auto widget = new BuildStepConfigWidget(this);
widget->setObjectName("IosDeployStepWidget");
widget->setDisplayName(QString("<b>%1</b>").arg(displayName()));
widget->setSummaryText(widget->displayName());
setDisplayName(QString("<b>%1</b>").arg(displayName()));
setSummaryText(displayName());
connect(this, &ProjectConfiguration::displayNameChanged,
widget, &BuildStepConfigWidget::updateSummary);
this, &BuildStep::updateSummary);
return widget;
}

View File

@@ -228,10 +228,10 @@ BuildStepConfigWidget *IosDsymBuildStep::createConfigWidget()
gridLayout->addWidget(argumentsTextEdit, 1, 2, 2, 1);
gridLayout->addWidget(resetDefaultsButton, 2, 3, 1, 1);
auto updateDetails = [this, widget] {
auto updateDetails = [this] {
ProcessParameters param;
setupProcessParameters(&param);
widget->setSummaryText(param.summary(displayName()));
setSummaryText(param.summary(displayName()));
};
updateDetails();

View File

@@ -73,7 +73,7 @@ NinjaBuildStep::NinjaBuildStep(ProjectExplorer::BuildStepList *bsl, Utils::Id id
BuildStepConfigWidget *NinjaBuildStep::createConfigWidget()
{
auto widget = new BuildStepConfigWidget{this};
widget->setDisplayName(tr("Build", "MesonProjectManager::MesonBuildStepConfigWidget display name."));
setDisplayName(tr("Build", "MesonProjectManager::MesonBuildStepConfigWidget display name."));
auto buildTargetsList = new QListWidget(widget);
buildTargetsList->setMinimumHeight(200);
@@ -91,10 +91,10 @@ BuildStepConfigWidget *NinjaBuildStep::createConfigWidget()
formLayout->addRow(tr("Tool arguments:"), toolArguments);
formLayout->addRow(tr("Targets:"), wrapper);
auto updateDetails = [this, widget] {
auto updateDetails = [this] {
ProcessParameters param;
setupProcessParameters(&param);
widget->setSummaryText(param.summary(displayName()));
setSummaryText(param.summary(displayName()));
};
auto updateTargetList = [this, buildTargetsList, updateDetails] {

View File

@@ -124,10 +124,10 @@ BuildStepConfigWidget *NimbleTaskStep::createConfigWidget()
connect(buildSystem, &NimbleBuildSystem::tasksChanged, this, &NimbleTaskStep::updateTaskList);
connect(m_taskName, &StringAspect::changed, widget, &BuildStepConfigWidget::recreateSummary);
connect(m_taskArgs, &StringAspect::changed, widget, &BuildStepConfigWidget::recreateSummary);
connect(m_taskName, &StringAspect::changed, this, &BuildStep::recreateSummary);
connect(m_taskArgs, &StringAspect::changed, this, &BuildStep::recreateSummary);
widget->setSummaryUpdater([this] {
setSummaryUpdater([this] {
return QString("<b>%1:</b> nimble %2 %3")
.arg(displayName(), m_taskName->value(), m_taskArgs->value());
});

View File

@@ -111,8 +111,8 @@ BuildStepConfigWidget *NimCompilerBuildStep::createConfigWidget()
{
auto widget = new BuildStepConfigWidget(this);
widget->setDisplayName(tr("Nim build step"));
widget->setSummaryText(tr("Nim build step"));
setDisplayName(tr("Nim build step"));
setSummaryText(tr("Nim build step"));
auto targetComboBox = new QComboBox(widget);

View File

@@ -134,6 +134,10 @@ BuildStep::BuildStep(BuildStepList *bsl, Utils::Id id) :
ProjectConfiguration(bsl, id)
{
QTC_CHECK(bsl->target() && bsl->target() == this->target());
connect(this, &ProjectConfiguration::displayNameChanged,
this, &BuildStep::updateSummary);
// m_displayName = step->displayName();
// m_summaryText = "<b>" + m_displayName + "</b>";
}
BuildStep::~BuildStep()
@@ -162,13 +166,12 @@ BuildStepConfigWidget *BuildStep::createConfigWidget()
for (BaseAspect *aspect : qAsConst(m_aspects)) {
if (aspect->isVisible())
aspect->addToLayout(builder.finishRow());
connect(aspect, &BaseAspect::changed, this, &BuildStep::recreateSummary);
}
}
connect(buildConfiguration(), &BuildConfiguration::buildDirectoryChanged,
widget, &BuildStepConfigWidget::recreateSummary);
widget->setSummaryUpdater(m_summaryUpdater);
this, &BuildStep::recreateSummary);
if (m_addMacroExpander)
VariableChooser::addSupportForChildWidgets(widget, macroExpander());
@@ -340,11 +343,6 @@ void BuildStep::addMacroExpander()
m_addMacroExpander = true;
}
void BuildStep::setSummaryUpdater(const std::function<QString ()> &summaryUpdater)
{
m_summaryUpdater = summaryUpdater;
}
void BuildStep::setEnabled(bool b)
{
if (m_enabled == b)
@@ -485,36 +483,19 @@ BuildStep *BuildStepFactory::restore(BuildStepList *parent, const QVariantMap &m
return bs;
}
// BuildStepConfigWidget
BuildStepConfigWidget::BuildStepConfigWidget(BuildStep *step)
BuildStepConfigWidget::BuildStepConfigWidget(BuildStep *)
{
m_displayName = step->displayName();
m_summaryText = "<b>" + m_displayName + "</b>";
connect(step, &ProjectConfiguration::displayNameChanged,
this, &BuildStepConfigWidget::updateSummary);
for (auto aspect : step->aspects()) {
connect(aspect, &BaseAspect::changed,
this, &BuildStepConfigWidget::recreateSummary);
}
}
QString BuildStepConfigWidget::summaryText() const
QString BuildStep::summaryText() const
{
if (m_summaryText.isEmpty())
return QString("<b>%1</b>").arg(displayName());
return m_summaryText;
}
QString BuildStepConfigWidget::displayName() const
{
return m_displayName;
}
void BuildStepConfigWidget::setDisplayName(const QString &displayName)
{
m_displayName = displayName;
}
void BuildStepConfigWidget::setSummaryText(const QString &summaryText)
void BuildStep::setSummaryText(const QString &summaryText)
{
if (summaryText != m_summaryText) {
m_summaryText = summaryText;
@@ -522,13 +503,13 @@ void BuildStepConfigWidget::setSummaryText(const QString &summaryText)
}
}
void BuildStepConfigWidget::setSummaryUpdater(const std::function<QString()> &summaryUpdater)
void BuildStep::setSummaryUpdater(const std::function<QString()> &summaryUpdater)
{
m_summaryUpdater = summaryUpdater;
recreateSummary();
}
void BuildStepConfigWidget::recreateSummary()
void BuildStep::recreateSummary()
{
if (m_summaryUpdater)
setSummaryText(m_summaryUpdater());

View File

@@ -119,7 +119,14 @@ public:
void addMacroExpander();
QString summaryText() const;
void setSummaryText(const QString &summaryText);
void recreateSummary();
signals:
void updateSummary();
/// Adds a \p task to the Issues pane.
/// Do note that for linking compile output with tasks, you should first emit the output
/// and then emit the task. \p linkedOutput lines will be linked. And the last \p skipLines will
@@ -155,6 +162,8 @@ private:
bool m_addMacroExpander = false;
Utils::optional<bool> m_wasExpanded;
std::function<QString()> m_summaryUpdater;
QString m_summaryText;
};
class PROJECTEXPLORER_EXPORT BuildStepInfo
@@ -227,23 +236,6 @@ class PROJECTEXPLORER_EXPORT BuildStepConfigWidget : public QWidget
Q_OBJECT
public:
explicit BuildStepConfigWidget(BuildStep *step);
QString summaryText() const;
QString displayName() const;
void setDisplayName(const QString &displayName);
void setSummaryText(const QString &summaryText);
void setSummaryUpdater(const std::function<QString()> &summaryUpdater);
void recreateSummary();
signals:
void updateSummary();
private:
QString m_displayName;
QString m_summaryText;
std::function<QString()> m_summaryUpdater;
};
} // namespace ProjectExplorer

View File

@@ -181,7 +181,7 @@ BuildStepsWidgetData::BuildStepsWidgetData(BuildStep *s) :
detailsWidget->setToolWidget(toolWidget);
detailsWidget->setContentsMargins(0, 0, 0, 1);
detailsWidget->setSummaryText(widget->summaryText());
detailsWidget->setSummaryText(s->summaryText());
}
BuildStepsWidgetData::~BuildStepsWidgetData()
@@ -226,11 +226,11 @@ BuildStepListWidget::~BuildStepListWidget()
void BuildStepListWidget::updateSummary()
{
auto widget = qobject_cast<BuildStepConfigWidget *>(sender());
if (widget) {
auto step = qobject_cast<BuildStep *>(sender());
if (step) {
foreach (const BuildStepsWidgetData *s, m_buildStepsData) {
if (s->widget == widget) {
s->detailsWidget->setSummaryText(widget->summaryText());
if (s->step == step) {
s->detailsWidget->setSummaryText(step->summaryText());
break;
}
}
@@ -285,7 +285,7 @@ void BuildStepListWidget::addBuildStep(int pos)
m_vbox->insertWidget(pos, s->detailsWidget);
connect(s->widget, &BuildStepConfigWidget::updateSummary,
connect(s->step, &BuildStep::updateSummary,
this, &BuildStepListWidget::updateSummary);
connect(s->step, &BuildStep::enabledChanged,

View File

@@ -383,7 +383,7 @@ BuildStepConfigWidget *MakeStep::createConfigWidget()
VariableChooser::addSupportForChildWidgets(widget, macroExpander());
widget->setSummaryUpdater([this] {
setSummaryUpdater([this] {
const CommandLine make = effectiveMakeCommand(MakeStep::Display);
if (make.executable().isEmpty())
return tr("<b>Make:</b> %1").arg(MakeStep::msgNoMakeCommand());
@@ -405,8 +405,7 @@ BuildStepConfigWidget *MakeStep::createConfigWidget()
return param.summaryInWorkdir(displayName());
});
auto updateDetails = [this, disableInSubDirsCheckBox, widget = QPointer<BuildStepConfigWidget>(widget)] {
QTC_ASSERT(widget, return);
auto updateDetails = [this, disableInSubDirsCheckBox] {
const bool jobCountVisible = isJobCountSupported();
m_userJobCountAspect->setVisible(jobCountVisible);
m_overrideMakeflagsAspect->setVisible(jobCountVisible);
@@ -418,7 +417,7 @@ BuildStepConfigWidget *MakeStep::createConfigWidget()
&& !jobCountOverridesMakeflags());
disableInSubDirsCheckBox->setChecked(!m_enabledForSubDirs);
widget->recreateSummary();
recreateSummary();
};
updateDetails();

View File

@@ -141,6 +141,8 @@ QbsBuildStep::QbsBuildStep(BuildStepList *bsl, Utils::Id id) :
BuildStep(bsl, id)
{
setDisplayName(tr("Qbs Build"));
setSummaryText(tr("<b>Qbs:</b> %1").arg("build"));
setQbsConfiguration(QVariantMap());
auto qbsBuildConfig = qobject_cast<QbsBuildConfiguration *>(buildConfiguration());
@@ -667,7 +669,6 @@ QbsBuildStepConfigWidget::QbsBuildStepConfigWidget(QbsBuildStep *step) :
connect(forceProbesCheckBox, &QCheckBox::toggled, this,
&QbsBuildStepConfigWidget::changeForceProbes);
updateState();
setSummaryText(tr("<b>Qbs:</b> %1").arg("build"));
}
void QbsBuildStepConfigWidget::updateState()

View File

@@ -67,6 +67,7 @@ QbsInstallStep::QbsInstallStep(BuildStepList *bsl, Utils::Id id)
: BuildStep(bsl, id)
{
setDisplayName(tr("Qbs Install"));
setSummaryText(tr("<b>Qbs:</b> %1").arg("install"));
const auto labelPlacement = BoolAspect::LabelPlacement::AtCheckBoxWithoutDummyLabel;
m_dryRun = addAspect<BoolAspect>();
@@ -182,8 +183,6 @@ BuildStepConfigWidget *QbsInstallStep::createConfigWidget()
{
auto widget = new BuildStepConfigWidget(this);
widget->setSummaryText(tr("<b>Qbs:</b> %1").arg("install"));
auto installRootValueLabel = new QLabel(installRoot());
auto commandLineKeyLabel = new QLabel(tr("Equivalent command line:"));

View File

@@ -547,7 +547,7 @@ BuildStepConfigWidget *QMakeStep::createConfigWidget()
const QString program = qtVersion->qmakeCommand().fileName();
return tr("<b>qmake:</b> %1 %2").arg(program, project()->projectFilePath().fileName());
};
widget->setSummaryUpdater(updateSummary);
setSummaryUpdater(updateSummary);
updateSummary();
updateAbiWidgets();