aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Holland <dominik.holland@qt.io>2023-12-20 10:30:31 +0100
committerDominik Holland <dominik.holland@qt.io>2023-12-20 09:59:40 +0000
commiteccc2445371c794915ad499fa4b84995c148fd63 (patch)
treebc4a11aeb290cbdae85e1075b490773be51e54b1
parent5b69d70d1007ffce4ad16684a09ff897102ae586 (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.h4
-rw-r--r--src/plugins/projectexplorer/buildstep.cpp7
-rw-r--r--src/plugins/projectexplorer/buildstep.h17
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