diff options
author | Dominik Holland <dominik.holland@qt.io> | 2023-12-20 10:30:31 +0100 |
---|---|---|
committer | Dominik Holland <dominik.holland@qt.io> | 2023-12-20 09:59:40 +0000 |
commit | eccc2445371c794915ad499fa4b84995c148fd63 (patch) | |
tree | bc4a11aeb290cbdae85e1075b490773be51e54b1 | |
parent | 5b69d70d1007ffce4ad16684a09ff897102ae586 (diff) |
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 <hjk@qt.io>
-rw-r--r-- | src/plugins/cmakeprojectmanager/cmakebuildstep.h | 4 | ||||
-rw-r--r-- | src/plugins/projectexplorer/buildstep.cpp | 7 | ||||
-rw-r--r-- | src/plugins/projectexplorer/buildstep.h | 17 |
3 files changed, 23 insertions, 5 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.h b/src/plugins/cmakeprojectmanager/cmakebuildstep.h index 3469095029..b1606fa855 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildstep.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.h @@ -3,6 +3,8 @@ #pragma once +#include <qglobal.h> + #include "cmakeabstractprocessstep.h" #include <utils/treemodel.h> @@ -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 5d63e61b8a..da0dcec7ed 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<void (BuildStep *)> &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 0f8b762f31..cdb3ad52f5 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; + virtual void setBuildTargets(const QStringList &) const {} + protected: - using BuildStepCreator = std::function<BuildStep *(BuildStepList *)>; + using BuildStepCreator = std::function<BuildStep *(BuildStepFactory *bsf, BuildStepList *)>; - template <class BuildStepType> + template <typename BuildStepType> 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<void(BuildStep *)> &extraInit); private: Utils::Id m_stepId; @@ -176,6 +186,7 @@ private: QList<Utils::Id> m_supportedStepLists; Utils::Id m_supportedConfiguration; bool m_isRepeatable = true; + std::function<void(BuildStep *)> m_extraInit; }; } // namespace ProjectExplorer |