forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -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);
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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<BuildStep *(BuildStepList *)>;
|
||||
virtual void setBuildTargets(const QStringList &) const {}
|
||||
|
||||
template <class BuildStepType>
|
||||
protected:
|
||||
using BuildStepCreator = std::function<BuildStep *(BuildStepFactory *bsf, BuildStepList *)>;
|
||||
|
||||
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
|
||||
|
Reference in New Issue
Block a user