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
|
#pragma once
|
||||||
|
|
||||||
|
#include <qglobal.h>
|
||||||
|
|
||||||
#include "cmakeabstractprocessstep.h"
|
#include "cmakeabstractprocessstep.h"
|
||||||
#include <utils/treemodel.h>
|
#include <utils/treemodel.h>
|
||||||
|
|
||||||
@@ -39,7 +41,7 @@ public:
|
|||||||
CMakeBuildStep(ProjectExplorer::BuildStepList *bsl, Utils::Id id);
|
CMakeBuildStep(ProjectExplorer::BuildStepList *bsl, Utils::Id id);
|
||||||
|
|
||||||
QStringList buildTargets() const;
|
QStringList buildTargets() const;
|
||||||
void setBuildTargets(const QStringList &target);
|
void setBuildTargets(const QStringList &target) override;
|
||||||
|
|
||||||
bool buildsBuildTarget(const QString &target) const;
|
bool buildsBuildTarget(const QString &target) const;
|
||||||
void setBuildsBuildTarget(const QString &target, bool on);
|
void setBuildsBuildTarget(const QString &target, bool on);
|
||||||
|
@@ -349,6 +349,11 @@ void BuildStepFactory::setFlags(BuildStep::Flags flags)
|
|||||||
m_flags = flags;
|
m_flags = flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BuildStepFactory::setExtraInit(const std::function<void (BuildStep *)> &extraInit)
|
||||||
|
{
|
||||||
|
m_extraInit = extraInit;
|
||||||
|
}
|
||||||
|
|
||||||
void BuildStepFactory::setSupportedStepList(Id id)
|
void BuildStepFactory::setSupportedStepList(Id id)
|
||||||
{
|
{
|
||||||
m_supportedStepLists = {id};
|
m_supportedStepLists = {id};
|
||||||
@@ -392,7 +397,7 @@ Id BuildStepFactory::stepId() const
|
|||||||
BuildStep *BuildStepFactory::create(BuildStepList *parent)
|
BuildStep *BuildStepFactory::create(BuildStepList *parent)
|
||||||
{
|
{
|
||||||
QTC_ASSERT(m_creator, return nullptr);
|
QTC_ASSERT(m_creator, return nullptr);
|
||||||
BuildStep *step = m_creator(parent);
|
BuildStep *step = m_creator(this, parent);
|
||||||
step->setDefaultDisplayName(m_displayName);
|
step->setDefaultDisplayName(m_displayName);
|
||||||
return step;
|
return step;
|
||||||
}
|
}
|
||||||
|
@@ -76,6 +76,8 @@ public:
|
|||||||
QString summaryText() const;
|
QString summaryText() const;
|
||||||
QWidget *doCreateConfigWidget();
|
QWidget *doCreateConfigWidget();
|
||||||
|
|
||||||
|
virtual void setBuildTargets(const QStringList &) {}
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void updateSummary();
|
void updateSummary();
|
||||||
|
|
||||||
@@ -143,15 +145,22 @@ public:
|
|||||||
|
|
||||||
QString displayName() const;
|
QString displayName() const;
|
||||||
|
|
||||||
protected:
|
virtual void setBuildTargets(const QStringList &) const {}
|
||||||
using BuildStepCreator = std::function<BuildStep *(BuildStepList *)>;
|
|
||||||
|
|
||||||
template <class BuildStepType>
|
protected:
|
||||||
|
using BuildStepCreator = std::function<BuildStep *(BuildStepFactory *bsf, BuildStepList *)>;
|
||||||
|
|
||||||
|
template <typename BuildStepType>
|
||||||
void registerStep(Utils::Id id)
|
void registerStep(Utils::Id id)
|
||||||
{
|
{
|
||||||
QTC_CHECK(!m_creator);
|
QTC_CHECK(!m_creator);
|
||||||
m_stepId = id;
|
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 = {});
|
void cloneStepCreator(Utils::Id exitstingStepId, Utils::Id overrideNewStepId = {});
|
||||||
|
|
||||||
@@ -164,6 +173,7 @@ protected:
|
|||||||
void setRepeatable(bool on) { m_isRepeatable = on; }
|
void setRepeatable(bool on) { m_isRepeatable = on; }
|
||||||
void setDisplayName(const QString &displayName);
|
void setDisplayName(const QString &displayName);
|
||||||
void setFlags(BuildStep::Flags flags);
|
void setFlags(BuildStep::Flags flags);
|
||||||
|
void setExtraInit(const std::function<void(BuildStep *)> &extraInit);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Utils::Id m_stepId;
|
Utils::Id m_stepId;
|
||||||
@@ -176,6 +186,7 @@ private:
|
|||||||
QList<Utils::Id> m_supportedStepLists;
|
QList<Utils::Id> m_supportedStepLists;
|
||||||
Utils::Id m_supportedConfiguration;
|
Utils::Id m_supportedConfiguration;
|
||||||
bool m_isRepeatable = true;
|
bool m_isRepeatable = true;
|
||||||
|
std::function<void(BuildStep *)> m_extraInit;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace ProjectExplorer
|
} // namespace ProjectExplorer
|
||||||
|
Reference in New Issue
Block a user