ProjectExplorer: Use function object for special build config init

Change-Id: I5da0f28ee1a64f8d9a3145f059019be702bee463
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2019-12-09 12:59:38 +01:00
parent b82add7813
commit 041a86c8c7
18 changed files with 269 additions and 282 deletions

View File

@@ -84,6 +84,8 @@ public:
QString m_configWidgetDisplayName;
bool m_configWidgetHasFrame = false;
std::function<void()> m_initializer;
// FIXME: Remove.
BuildConfiguration::BuildType m_initialBuildType = BuildConfiguration::Unknown;
Utils::FilePath m_initialBuildDirectory;
@@ -181,6 +183,28 @@ void BuildConfiguration::addConfigWidgets(const std::function<void(NamedWidget *
adder(subConfigWidget);
}
void BuildConfiguration::doInitialize(const BuildInfo &info)
{
setDisplayName(info.displayName);
setDefaultDisplayName(info.displayName);
setBuildDirectory(info.buildDirectory);
d->m_initialBuildType = info.buildType;
d->m_initialDisplayName = info.displayName;
d->m_initialBuildDirectory = info.buildDirectory;
d->m_extraInfo = info.extraInfo;
acquaintAspects();
if (d->m_initializer)
d->m_initializer();
}
void BuildConfiguration::setInitializer(const std::function<void ()> &initializer)
{
d->m_initializer = initializer;
}
NamedWidget *BuildConfiguration::createConfigWidget()
{
NamedWidget *named = new NamedWidget(d->m_configWidgetDisplayName);
@@ -405,7 +429,7 @@ bool BuildConfiguration::regenerateBuildFiles(Node *node)
void BuildConfiguration::restrictNextBuild(const RunConfiguration *rc)
{
Q_UNUSED(rc);
Q_UNUSED(rc)
}
BuildConfiguration::BuildType BuildConfiguration::buildType() const
@@ -568,21 +592,10 @@ BuildConfiguration *BuildConfigurationFactory::create(Target *parent, const Buil
if (!canHandle(parent))
return nullptr;
QTC_ASSERT(m_creator, return nullptr);
BuildConfiguration *bc = m_creator(parent);
if (!bc)
return nullptr;
bc->setDisplayName(info.displayName);
bc->setDefaultDisplayName(info.displayName);
bc->setBuildDirectory(info.buildDirectory);
bc->d->m_initialBuildType = info.buildType;
bc->d->m_initialDisplayName = info.displayName;
bc->d->m_initialBuildDirectory = info.buildDirectory;
bc->d->m_extraInfo = info.extraInfo;
bc->acquaintAspects();
bc->initialize();
if (bc)
bc->doInitialize(info);
return bc;
}