diff --git a/src/plugins/projectexplorer/makestep.cpp b/src/plugins/projectexplorer/makestep.cpp index ce122210f19..7b44d0e7a1f 100644 --- a/src/plugins/projectexplorer/makestep.cpp +++ b/src/plugins/projectexplorer/makestep.cpp @@ -98,22 +98,13 @@ class MakeStepConfigWidget : public BuildStepConfigWidget public: explicit MakeStepConfigWidget(MakeStep *makeStep); -private: - void itemChanged(QListWidgetItem *item); - void updateDetails(); - void setUserJobCountVisible(bool visible); - void setUserJobCountEnabled(bool enabled); - - MakeStep *m_makeStep; - QLabel *m_targetsLabel; QListWidget *m_targetsList; QCheckBox *m_disableInSubDirsCheckBox; }; - MakeStepConfigWidget::MakeStepConfigWidget(MakeStep *makeStep) - : BuildStepConfigWidget(makeStep), m_makeStep(makeStep) + : BuildStepConfigWidget(makeStep) { m_targetsLabel = new QLabel(this); m_targetsLabel->setText(tr("Targets:")); @@ -136,8 +127,8 @@ MakeStepConfigWidget::MakeStepConfigWidget(MakeStep *makeStep) disableInSubDirsLabel->hide(); m_disableInSubDirsCheckBox->hide(); } else { - connect(m_disableInSubDirsCheckBox, &QCheckBox::toggled, this, [this] { - m_makeStep->setEnabledForSubDirs(!m_disableInSubDirsCheckBox->isChecked()); + connect(m_disableInSubDirsCheckBox, &QCheckBox::toggled, this, [this, makeStep] { + makeStep->setEnabledForSubDirs(!m_disableInSubDirsCheckBox->isChecked()); }); } @@ -145,91 +136,14 @@ MakeStepConfigWidget::MakeStepConfigWidget(MakeStep *makeStep) for (const QString &target : availableTargets) { auto item = new QListWidgetItem(target, m_targetsList); item->setFlags(item->flags() | Qt::ItemIsUserCheckable); - item->setCheckState(m_makeStep->buildsTarget(item->text()) ? Qt::Checked : Qt::Unchecked); + item->setCheckState(makeStep->buildsTarget(item->text()) ? Qt::Checked : Qt::Unchecked); } if (availableTargets.isEmpty()) { m_targetsLabel->hide(); m_targetsList->hide(); } - updateDetails(); - - connect(makeStep->m_makeCommandAspect, &BaseStringAspect::changed, - this, &MakeStepConfigWidget::updateDetails); - connect(makeStep->m_userArgumentsAspect, &BaseStringAspect::changed, - this, &MakeStepConfigWidget::updateDetails); - connect(makeStep->m_userJobCountAspect, &BaseIntegerAspect::changed, - this, &MakeStepConfigWidget::updateDetails); - connect(makeStep->m_overrideMakeflagsAspect, &BaseBoolAspect::changed, - this, &MakeStepConfigWidget::updateDetails); - connect(m_targetsList, &QListWidget::itemChanged, - this, &MakeStepConfigWidget::itemChanged); - - connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::settingsChanged, - this, &MakeStepConfigWidget::updateDetails); - - connect(m_makeStep->target(), &Target::kitChanged, - this, &MakeStepConfigWidget::updateDetails); - - connect(m_makeStep->buildConfiguration(), &BuildConfiguration::environmentChanged, - this, &MakeStepConfigWidget::updateDetails); - connect(m_makeStep->buildConfiguration(), &BuildConfiguration::buildDirectoryChanged, - this, &MakeStepConfigWidget::updateDetails); - connect(m_makeStep->target(), &Target::parsingFinished, - this, &MakeStepConfigWidget::updateDetails); - - Core::VariableChooser::addSupportForChildWidgets(this, m_makeStep->macroExpander()); -} - -void MakeStepConfigWidget::setUserJobCountVisible(bool visible) -{ - m_makeStep->m_userJobCountAspect->setVisible(visible); - m_makeStep->m_overrideMakeflagsAspect->setVisible(visible); -} - -void MakeStepConfigWidget::setUserJobCountEnabled(bool enabled) -{ - m_makeStep->m_userJobCountAspect->setEnabled(enabled); - m_makeStep->m_overrideMakeflagsAspect->setEnabled(enabled); -} - -void MakeStepConfigWidget::updateDetails() -{ - BuildConfiguration *bc = m_makeStep->buildConfiguration(); - - const CommandLine make = m_makeStep->effectiveMakeCommand(MakeStep::Display); - if (make.executable().isEmpty()) { - setSummaryText(tr("Make: %1").arg(MakeStep::msgNoMakeCommand())); - return; - } - if (!bc) { - setSummaryText(tr("Make: No build configuration.")); - return; - } - - setUserJobCountVisible(m_makeStep->isJobCountSupported()); - setUserJobCountEnabled(!m_makeStep->userArgsContainsJobCount()); - m_makeStep->m_overrideMakeflagsAspect->m_nonOverrideWarning->setVisible( - m_makeStep->makeflagsJobCountMismatch() && !m_makeStep->jobCountOverridesMakeflags()); - m_disableInSubDirsCheckBox->setChecked(!m_makeStep->enabledForSubDirs()); - - ProcessParameters param; - param.setMacroExpander(m_makeStep->macroExpander()); - param.setWorkingDirectory(m_makeStep->buildDirectory()); - param.setCommandLine(make); - param.setEnvironment(m_makeStep->buildEnvironment()); - - if (param.commandMissing()) - setSummaryText(tr("Make: %1 not found in the environment.") - .arg(param.command().executable().toUserOutput())); // Override display text - else - setSummaryText(param.summaryInWorkdir(displayName())); -} - -void MakeStepConfigWidget::itemChanged(QListWidgetItem *item) -{ - m_makeStep->setBuildTarget(item->text(), item->checkState() & Qt::Checked); - updateDetails(); + Core::VariableChooser::addSupportForChildWidgets(this, makeStep->macroExpander()); } } // Internal @@ -278,6 +192,7 @@ MakeStep::MakeStep(BuildStepList *parent, Utils::Id id) }; updateMakeLabel(); + connect(m_makeCommandAspect, &BaseStringAspect::changed, this, updateMakeLabel); } @@ -522,7 +437,69 @@ CommandLine MakeStep::effectiveMakeCommand(MakeCommandType type) const BuildStepConfigWidget *MakeStep::createConfigWidget() { - return new Internal::MakeStepConfigWidget(this); + auto widget = new Internal::MakeStepConfigWidget(this); + + widget->setSummaryUpdater([this] { + const CommandLine make = effectiveMakeCommand(MakeStep::Display); + if (make.executable().isEmpty()) + return tr("Make: %1").arg(MakeStep::msgNoMakeCommand()); + + if (!buildConfiguration()) + return tr("Make: No build configuration."); + + ProcessParameters param; + param.setMacroExpander(macroExpander()); + param.setWorkingDirectory(buildDirectory()); + param.setCommandLine(make); + param.setEnvironment(buildEnvironment()); + + if (param.commandMissing()) { + return tr("Make: %1 not found in the environment.") + .arg(param.command().executable().toUserOutput()); // Override display text + } + + return param.summaryInWorkdir(displayName()); + }); + + auto updateDetails = [this, widget] { + const bool jobCountVisible = isJobCountSupported(); + m_userJobCountAspect->setVisible(jobCountVisible); + m_overrideMakeflagsAspect->setVisible(jobCountVisible); + + const bool jobCountEnabled = !userArgsContainsJobCount(); + m_userJobCountAspect->setEnabled(jobCountEnabled); + m_overrideMakeflagsAspect->setEnabled(jobCountEnabled); + + m_overrideMakeflagsAspect->m_nonOverrideWarning->setVisible( + makeflagsJobCountMismatch() && !jobCountOverridesMakeflags()); + widget->m_disableInSubDirsCheckBox->setChecked(!enabledForSubDirs()); + + widget->recreateSummary(); + }; + + updateDetails(); + + connect(m_makeCommandAspect, &BaseStringAspect::changed, this, updateDetails); + connect(m_userArgumentsAspect, &BaseStringAspect::changed, this, updateDetails); + connect(m_userJobCountAspect, &BaseIntegerAspect::changed, this, updateDetails); + connect(m_overrideMakeflagsAspect, &BaseBoolAspect::changed, this, updateDetails); + + connect(widget->m_targetsList, &QListWidget::itemChanged, this, + [this, updateDetails](QListWidgetItem *item) { + setBuildTarget(item->text(), item->checkState() & Qt::Checked); + updateDetails(); + }); + + connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::settingsChanged, + this, updateDetails); + + connect(target(), &Target::kitChanged, this, updateDetails); + + connect(buildConfiguration(), &BuildConfiguration::environmentChanged, this, updateDetails); + connect(buildConfiguration(), &BuildConfiguration::buildDirectoryChanged, this, updateDetails); + connect(target(), &Target::parsingFinished, this, updateDetails); + + return widget; } bool MakeStep::buildsTarget(const QString &target) const