ProjectExplorer: Introduce priorities for RunControlFactories

This can be used by downstream plugins to overrule existing
RunControlFactories.

Change-Id: I23c8e3983827dfa1b5f780664d2e539e908944aa
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
hjk
2017-06-26 12:57:33 +02:00
parent a72b38b8c9
commit e974f0733e
3 changed files with 26 additions and 1 deletions

View File

@@ -1980,10 +1980,18 @@ void ProjectExplorerPluginPrivate::buildStateChanged(Project * pro)
// NBS TODO implement more than one runner // NBS TODO implement more than one runner
static IRunControlFactory *findRunControlFactory(RunConfiguration *config, Core::Id mode) static IRunControlFactory *findRunControlFactory(RunConfiguration *config, Core::Id mode)
{ {
return ExtensionSystem::PluginManager::getObject<IRunControlFactory>( auto factories = ExtensionSystem::PluginManager::getObjects<IRunControlFactory>(
[&config, &mode](IRunControlFactory *factory) { [&config, &mode](IRunControlFactory *factory) {
return factory->canRun(config, mode); return factory->canRun(config, mode);
}); });
if (factories.isEmpty())
return nullptr;
auto it = std::max_element(factories.begin(), factories.end(),
[](IRunControlFactory *a, IRunControlFactory *b) {
return a->priority() < b->priority();
});
return *it;
} }
void ProjectExplorerPluginPrivate::executeRunConfiguration(RunConfiguration *runConfiguration, Core::Id runMode) void ProjectExplorerPluginPrivate::executeRunConfiguration(RunConfiguration *runConfiguration, Core::Id runMode)

View File

@@ -501,6 +501,19 @@ IRunConfigurationAspect *IRunControlFactory::createRunConfigurationAspect(RunCon
than it needs to be. than it needs to be.
*/ */
const char PRIORITY_KEY[] = "RunControlFactoryPriority";
int ProjectExplorer::IRunControlFactory::priority() const
{
return property(PRIORITY_KEY).toInt(); // 0 by default.
}
void IRunControlFactory::setPriority(int priority)
{
setProperty(PRIORITY_KEY, priority);
}
namespace Internal { namespace Internal {
class RunControlPrivate class RunControlPrivate

View File

@@ -335,6 +335,10 @@ public:
virtual RunControl *create(RunConfiguration *runConfiguration, Core::Id mode, QString *errorMessage) = 0; virtual RunControl *create(RunConfiguration *runConfiguration, Core::Id mode, QString *errorMessage) = 0;
virtual IRunConfigurationAspect *createRunConfigurationAspect(RunConfiguration *rc); virtual IRunConfigurationAspect *createRunConfigurationAspect(RunConfiguration *rc);
int priority() const;
protected:
void setPriority(int priority); // Higher values will be preferred.
}; };
class PROJECTEXPLORER_EXPORT RunConfigWidget : public QWidget class PROJECTEXPLORER_EXPORT RunConfigWidget : public QWidget