From eccc2445371c794915ad499fa4b84995c148fd63 Mon Sep 17 00:00:00 2001 From: Dominik Holland Date: Wed, 20 Dec 2023 10:30:31 +0100 Subject: [PATCH] ProjectExplorer: Allow an extraInit function to be called ... when BuildSteps are created. Potentially useful to tweak step behavior without the need to inherit or such. Change-Id: I8c8e9bdec84fafc454db9dc9a492d399b00b7f57 Reviewed-by: hjk --- .../cmakeprojectmanager/cmakebuildstep.h | 4 +++- src/plugins/projectexplorer/buildstep.cpp | 7 ++++++- src/plugins/projectexplorer/buildstep.h | 19 +++++++++++++++---- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.h b/src/plugins/cmakeprojectmanager/cmakebuildstep.h index 34690950290..b1606fa8552 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildstep.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "cmakeabstractprocessstep.h" #include @@ -39,7 +41,7 @@ public: CMakeBuildStep(ProjectExplorer::BuildStepList *bsl, Utils::Id id); QStringList buildTargets() const; - void setBuildTargets(const QStringList &target); + void setBuildTargets(const QStringList &target) override; bool buildsBuildTarget(const QString &target) const; void setBuildsBuildTarget(const QString &target, bool on); diff --git a/src/plugins/projectexplorer/buildstep.cpp b/src/plugins/projectexplorer/buildstep.cpp index 5d63e61b8ae..da0dcec7edf 100644 --- a/src/plugins/projectexplorer/buildstep.cpp +++ b/src/plugins/projectexplorer/buildstep.cpp @@ -349,6 +349,11 @@ void BuildStepFactory::setFlags(BuildStep::Flags flags) m_flags = flags; } +void BuildStepFactory::setExtraInit(const std::function &extraInit) +{ + m_extraInit = extraInit; +} + void BuildStepFactory::setSupportedStepList(Id id) { m_supportedStepLists = {id}; @@ -392,7 +397,7 @@ Id BuildStepFactory::stepId() const BuildStep *BuildStepFactory::create(BuildStepList *parent) { QTC_ASSERT(m_creator, return nullptr); - BuildStep *step = m_creator(parent); + BuildStep *step = m_creator(this, parent); step->setDefaultDisplayName(m_displayName); return step; } diff --git a/src/plugins/projectexplorer/buildstep.h b/src/plugins/projectexplorer/buildstep.h index 0f8b762f313..cdb3ad52f53 100644 --- a/src/plugins/projectexplorer/buildstep.h +++ b/src/plugins/projectexplorer/buildstep.h @@ -76,6 +76,8 @@ public: QString summaryText() const; QWidget *doCreateConfigWidget(); + virtual void setBuildTargets(const QStringList &) {} + signals: void updateSummary(); @@ -143,15 +145,22 @@ public: QString displayName() const; -protected: - using BuildStepCreator = std::function; + virtual void setBuildTargets(const QStringList &) const {} - template +protected: + using BuildStepCreator = std::function; + + template void registerStep(Utils::Id id) { QTC_CHECK(!m_creator); m_stepId = id; - m_creator = [id](BuildStepList *bsl) { return new BuildStepType(bsl, id); }; + m_creator = [id, this](BuildStepFactory *bsf, BuildStepList *bsl) { + auto bs = new BuildStepType(bsl, id); + if (bsf->m_extraInit) + bsf->m_extraInit(bs); + return bs; + }; } void cloneStepCreator(Utils::Id exitstingStepId, Utils::Id overrideNewStepId = {}); @@ -164,6 +173,7 @@ protected: void setRepeatable(bool on) { m_isRepeatable = on; } void setDisplayName(const QString &displayName); void setFlags(BuildStep::Flags flags); + void setExtraInit(const std::function &extraInit); private: Utils::Id m_stepId; @@ -176,6 +186,7 @@ private: QList m_supportedStepLists; Utils::Id m_supportedConfiguration; bool m_isRepeatable = true; + std::function m_extraInit; }; } // namespace ProjectExplorer