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())
|
||||
return {};
|
||||
ProjectConfiguration * const config = m_projectConfigurations.at(index.row());
|
||||
|
||||
if (role == Qt::DisplayRole) {
|
||||
ProjectConfiguration * const config = m_projectConfigurations.at(index.row());
|
||||
QString displayName = config->expandedDisplayName();
|
||||
if (const auto rc = qobject_cast<RunConfiguration *>(config); rc && !rc->hasCreator())
|
||||
displayName += QString(" [%1]").arg(Tr::tr("unavailable"));
|
||||
|
@@ -140,6 +140,8 @@ void GlobalOrProjectAspect::resetProjectToGlobalSettings()
|
||||
|
||||
static std::vector<RunConfiguration::AspectFactory> theAspectFactories;
|
||||
|
||||
static QList<RunConfigurationFactory *> g_runConfigurationFactories;
|
||||
|
||||
RunConfiguration::RunConfiguration(Target *target, Utils::Id id)
|
||||
: ProjectConfiguration(target, id)
|
||||
{
|
||||
@@ -236,10 +238,13 @@ bool RunConfiguration::isCustomized() const
|
||||
|
||||
bool RunConfiguration::hasCreator() const
|
||||
{
|
||||
return Utils::contains(RunConfigurationFactory::creatorsForTarget(target()),
|
||||
[this](const RunConfigurationCreationInfo &info) {
|
||||
return info.factory->runConfigurationId() == id() && info.buildKey == buildKey();
|
||||
});
|
||||
for (RunConfigurationFactory *factory : std::as_const(g_runConfigurationFactories)) {
|
||||
if (factory->runConfigurationId() == id()) {
|
||||
if (factory->supportsBuildKey(target(), buildKey()))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void RunConfiguration::setPristineState()
|
||||
@@ -453,8 +458,6 @@ QVariantHash RunConfiguration::extraData() const
|
||||
ExtensionSystem::IPlugin::initialize() method.
|
||||
*/
|
||||
|
||||
static QList<RunConfigurationFactory *> g_runConfigurationFactories;
|
||||
|
||||
/*!
|
||||
Constructs a RunConfigurationFactory instance and registers it into a global
|
||||
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
|
||||
can create RunConfigurations.
|
||||
@@ -674,4 +685,11 @@ FixedRunConfigurationFactory::availableCreators(Target *parent) const
|
||||
return {rci};
|
||||
}
|
||||
|
||||
bool FixedRunConfigurationFactory::supportsBuildKey(Target *target, const QString &key) const
|
||||
{
|
||||
Q_UNUSED(target)
|
||||
Q_UNUSED(key)
|
||||
return false;
|
||||
}
|
||||
|
||||
} // namespace ProjectExplorer
|
||||
|
@@ -197,6 +197,7 @@ public:
|
||||
|
||||
protected:
|
||||
virtual QList<RunConfigurationCreationInfo> availableCreators(Target *target) const;
|
||||
virtual bool supportsBuildKey(Target *target, const QString &key) const;
|
||||
|
||||
using RunConfigurationCreator = std::function<RunConfiguration *(Target *)>;
|
||||
|
||||
@@ -218,6 +219,7 @@ private:
|
||||
RunConfiguration *create(Target *target) const;
|
||||
|
||||
friend class RunConfigurationCreationInfo;
|
||||
friend class RunConfiguration;
|
||||
RunConfigurationCreator m_creator;
|
||||
Utils::Id m_runConfigurationId;
|
||||
QList<Utils::Id> m_supportedProjectTypes;
|
||||
@@ -231,9 +233,10 @@ public:
|
||||
explicit FixedRunConfigurationFactory(const QString &displayName,
|
||||
bool addDeviceName = false);
|
||||
|
||||
QList<RunConfigurationCreationInfo> availableCreators(Target *parent) const override;
|
||||
|
||||
private:
|
||||
QList<RunConfigurationCreationInfo> availableCreators(Target *parent) const override;
|
||||
bool supportsBuildKey(Target *target, const QString &key) const override;
|
||||
|
||||
const QString m_fixedBuildTarget;
|
||||
const bool m_decorateTargetName;
|
||||
};
|
||||
|
Reference in New Issue
Block a user