From 24bfa0e1a6b3f3cc7daf973e2d782c4defa37b2c Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 9 Jan 2019 14:46:15 +0100 Subject: [PATCH] ProjectExplorer: Add a mechanism to add build steps by Id This allows plugins to add build steps they know to be provided by another plugin without needing to link against it. Change-Id: Id53ea41c024be9a2fb122e496a235a7cf8f6bb22 Reviewed-by: Christian Kandeler --- src/plugins/projectexplorer/buildsteplist.cpp | 11 +++++++++++ src/plugins/projectexplorer/buildsteplist.h | 2 ++ 2 files changed, 13 insertions(+) diff --git a/src/plugins/projectexplorer/buildsteplist.cpp b/src/plugins/projectexplorer/buildsteplist.cpp index f961d9f4ef9..40d4c3b9ac7 100644 --- a/src/plugins/projectexplorer/buildsteplist.cpp +++ b/src/plugins/projectexplorer/buildsteplist.cpp @@ -151,6 +151,17 @@ void BuildStepList::insertStep(int position, BuildStep *step) emit stepInserted(position); } +void BuildStepList::insertStep(int position, Core::Id stepId) +{ + for (BuildStepFactory *factory : BuildStepFactory::allBuildStepFactories()) { + if (BuildStep *step = factory->create(this, stepId)) { + insertStep(position, step); + return; + } + } + QTC_ASSERT(false, qDebug() << "No factory for build step" << stepId.toString() << "found."); +} + bool BuildStepList::removeStep(int position) { BuildStep *bs = at(position); diff --git a/src/plugins/projectexplorer/buildsteplist.h b/src/plugins/projectexplorer/buildsteplist.h index 9100051577f..1c3ec4d4740 100644 --- a/src/plugins/projectexplorer/buildsteplist.h +++ b/src/plugins/projectexplorer/buildsteplist.h @@ -73,7 +73,9 @@ public: bool contains(Core::Id id) const; void insertStep(int position, BuildStep *step); + void insertStep(int position, Core::Id id); void appendStep(BuildStep *step) { insertStep(count(), step); } + void appendStep(Core::Id stepId) { insertStep(count(), stepId); } bool removeStep(int position); void moveStepUp(int position); BuildStep *at(int position);