forked from qt-creator/qt-creator
ProjectExplorer: Manually check whether a runconfig has a creator
This is used in ProjectConfigurationModel::data() Constructing the full list is comparatively expensive, and the extra decoration is not needed. Change-Id: I5b6c76376f806ea92444916a87d1f2e671e16d5f Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -93,9 +93,9 @@ QVariant ProjectConfigurationModel::data(const QModelIndex &index, int role) con
|
|||||||
{
|
{
|
||||||
if (index.row() >= m_projectConfigurations.size())
|
if (index.row() >= m_projectConfigurations.size())
|
||||||
return {};
|
return {};
|
||||||
ProjectConfiguration * const config = m_projectConfigurations.at(index.row());
|
|
||||||
|
|
||||||
if (role == Qt::DisplayRole) {
|
if (role == Qt::DisplayRole) {
|
||||||
|
ProjectConfiguration * const config = m_projectConfigurations.at(index.row());
|
||||||
QString displayName = config->expandedDisplayName();
|
QString displayName = config->expandedDisplayName();
|
||||||
if (const auto rc = qobject_cast<RunConfiguration *>(config); rc && !rc->hasCreator())
|
if (const auto rc = qobject_cast<RunConfiguration *>(config); rc && !rc->hasCreator())
|
||||||
displayName += QString(" [%1]").arg(Tr::tr("unavailable"));
|
displayName += QString(" [%1]").arg(Tr::tr("unavailable"));
|
||||||
|
@@ -140,6 +140,8 @@ void GlobalOrProjectAspect::resetProjectToGlobalSettings()
|
|||||||
|
|
||||||
static std::vector<RunConfiguration::AspectFactory> theAspectFactories;
|
static std::vector<RunConfiguration::AspectFactory> theAspectFactories;
|
||||||
|
|
||||||
|
static QList<RunConfigurationFactory *> g_runConfigurationFactories;
|
||||||
|
|
||||||
RunConfiguration::RunConfiguration(Target *target, Utils::Id id)
|
RunConfiguration::RunConfiguration(Target *target, Utils::Id id)
|
||||||
: ProjectConfiguration(target, id)
|
: ProjectConfiguration(target, id)
|
||||||
{
|
{
|
||||||
@@ -236,10 +238,13 @@ bool RunConfiguration::isCustomized() const
|
|||||||
|
|
||||||
bool RunConfiguration::hasCreator() const
|
bool RunConfiguration::hasCreator() const
|
||||||
{
|
{
|
||||||
return Utils::contains(RunConfigurationFactory::creatorsForTarget(target()),
|
for (RunConfigurationFactory *factory : std::as_const(g_runConfigurationFactories)) {
|
||||||
[this](const RunConfigurationCreationInfo &info) {
|
if (factory->runConfigurationId() == id()) {
|
||||||
return info.factory->runConfigurationId() == id() && info.buildKey == buildKey();
|
if (factory->supportsBuildKey(target(), buildKey()))
|
||||||
});
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RunConfiguration::setPristineState()
|
void RunConfiguration::setPristineState()
|
||||||
@@ -453,8 +458,6 @@ QVariantHash RunConfiguration::extraData() const
|
|||||||
ExtensionSystem::IPlugin::initialize() method.
|
ExtensionSystem::IPlugin::initialize() method.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static QList<RunConfigurationFactory *> g_runConfigurationFactories;
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Constructs a RunConfigurationFactory instance and registers it into a global
|
Constructs a RunConfigurationFactory instance and registers it into a global
|
||||||
list.
|
list.
|
||||||
@@ -522,6 +525,14 @@ RunConfigurationFactory::availableCreators(Target *target) const
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RunConfigurationFactory::supportsBuildKey(Target *target, const QString &key) const
|
||||||
|
{
|
||||||
|
if (!canHandle(target))
|
||||||
|
return false;
|
||||||
|
const QList<BuildTargetInfo> buildTargets = target->buildSystem()->applicationTargets();
|
||||||
|
return anyOf(buildTargets, [&key](const BuildTargetInfo &info) { return info.buildKey == key; });
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Adds a device type for which this RunConfigurationFactory
|
Adds a device type for which this RunConfigurationFactory
|
||||||
can create RunConfigurations.
|
can create RunConfigurations.
|
||||||
@@ -674,4 +685,11 @@ FixedRunConfigurationFactory::availableCreators(Target *parent) const
|
|||||||
return {rci};
|
return {rci};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool FixedRunConfigurationFactory::supportsBuildKey(Target *target, const QString &key) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(target)
|
||||||
|
Q_UNUSED(key)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace ProjectExplorer
|
} // namespace ProjectExplorer
|
||||||
|
@@ -197,6 +197,7 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual QList<RunConfigurationCreationInfo> availableCreators(Target *target) const;
|
virtual QList<RunConfigurationCreationInfo> availableCreators(Target *target) const;
|
||||||
|
virtual bool supportsBuildKey(Target *target, const QString &key) const;
|
||||||
|
|
||||||
using RunConfigurationCreator = std::function<RunConfiguration *(Target *)>;
|
using RunConfigurationCreator = std::function<RunConfiguration *(Target *)>;
|
||||||
|
|
||||||
@@ -218,6 +219,7 @@ private:
|
|||||||
RunConfiguration *create(Target *target) const;
|
RunConfiguration *create(Target *target) const;
|
||||||
|
|
||||||
friend class RunConfigurationCreationInfo;
|
friend class RunConfigurationCreationInfo;
|
||||||
|
friend class RunConfiguration;
|
||||||
RunConfigurationCreator m_creator;
|
RunConfigurationCreator m_creator;
|
||||||
Utils::Id m_runConfigurationId;
|
Utils::Id m_runConfigurationId;
|
||||||
QList<Utils::Id> m_supportedProjectTypes;
|
QList<Utils::Id> m_supportedProjectTypes;
|
||||||
@@ -231,9 +233,10 @@ public:
|
|||||||
explicit FixedRunConfigurationFactory(const QString &displayName,
|
explicit FixedRunConfigurationFactory(const QString &displayName,
|
||||||
bool addDeviceName = false);
|
bool addDeviceName = false);
|
||||||
|
|
||||||
QList<RunConfigurationCreationInfo> availableCreators(Target *parent) const override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
QList<RunConfigurationCreationInfo> availableCreators(Target *parent) const override;
|
||||||
|
bool supportsBuildKey(Target *target, const QString &key) const override;
|
||||||
|
|
||||||
const QString m_fixedBuildTarget;
|
const QString m_fixedBuildTarget;
|
||||||
const bool m_decorateTargetName;
|
const bool m_decorateTargetName;
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user