diff --git a/src/plugins/projectexplorer/deployconfiguration.cpp b/src/plugins/projectexplorer/deployconfiguration.cpp index cd951b44948..4b967658786 100644 --- a/src/plugins/projectexplorer/deployconfiguration.cpp +++ b/src/plugins/projectexplorer/deployconfiguration.cpp @@ -198,6 +198,10 @@ DeployConfiguration *DeployConfigurationFactory::create(Target *parent, Core::Id if (!dc) return nullptr; dc->initialize(); + for (const DeployStepCreationInfo &info : qAsConst(m_initialSteps)) { + if (!info.condition || info.condition(parent)) + dc->stepList()->appendStep(info.deployStepId); + } return dc; } @@ -251,6 +255,11 @@ void DeployConfigurationFactory::setSupportedProjectType(Core::Id id) m_supportedProjectType = id; } +void DeployConfigurationFactory::addInitialStep(Core::Id stepId, const std::function &condition) +{ + m_initialSteps.append({stepId, condition}); +} + /// // DefaultDeployConfigurationFactory /// diff --git a/src/plugins/projectexplorer/deployconfiguration.h b/src/plugins/projectexplorer/deployconfiguration.h index 8f2ea2bb407..5cf1ab0dcb1 100644 --- a/src/plugins/projectexplorer/deployconfiguration.h +++ b/src/plugins/projectexplorer/deployconfiguration.h @@ -96,6 +96,9 @@ public: void setDefaultDisplayName(const QString &defaultDisplayName); void setSupportedProjectType(Core::Id id); + // Step is only added if condition is not set, or returns true when called. + void addInitialStep(Core::Id stepId, const std::function &condition = {}); + virtual bool canHandle(ProjectExplorer::Target *target) const; protected: @@ -113,10 +116,15 @@ protected: } private: + struct DeployStepCreationInfo { + Core::Id deployStepId; + std::function condition; // unset counts as unrestricted + }; DeployConfigurationCreator m_creator; Core::Id m_deployConfigBaseId; Core::Id m_supportedProjectType; QList m_supportedTargetDeviceTypes; + QList m_initialSteps; QString m_defaultDisplayName; };