ProjectExplorer: Add a IRunConfigurationFactory::addFixedBuildTarget()

To be used for "special" build targets (Custom executables etc) that do not
depend on the project. This reduces user side boiler plate in a couple of
cases and is a bit clearer than the magic {QString()} result anyway.

Change-Id: I105b6ab952981143b2abf9b218fed30cee80b648
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2017-12-12 09:17:21 +01:00
parent 63ed6321fb
commit 32f2169f77
13 changed files with 39 additions and 71 deletions

View File

@@ -69,16 +69,8 @@ BareMetalCustomRunConfigurationFactory::BareMetalCustomRunConfigurationFactory(Q
setObjectName("BareMetalCustomRunConfigurationFactory");
registerRunConfiguration<BareMetalCustomRunConfiguration>("BareMetal.CustomRunConfig");
setSupportedTargetDeviceTypes({BareMetal::Constants::BareMetalOsType});
}
QList<QString> BareMetalCustomRunConfigurationFactory::availableBuildTargets(Target *, CreationMode) const
{
return {QString()};
}
QString BareMetalCustomRunConfigurationFactory::displayNameForBuildTarget(const QString &) const
{
return BareMetalCustomRunConfiguration::tr("Custom Executable (on GDB server or hardware debugger)");
addFixedBuildTarget(BareMetalCustomRunConfiguration::tr
("Custom Executable (on GDB server or hardware debugger)"));
}
} // namespace Internal

View File

@@ -47,9 +47,6 @@ class BareMetalCustomRunConfigurationFactory : public ProjectExplorer::IRunConfi
public:
explicit BareMetalCustomRunConfigurationFactory(QObject *parent = 0);
QList<QString> availableBuildTargets(ProjectExplorer::Target *parent, CreationMode mode) const override;
QString displayNameForBuildTarget(const QString &buildTarget) const override;
};
} // namespace Internal

View File

@@ -40,16 +40,7 @@ NimRunConfigurationFactory::NimRunConfigurationFactory()
{
registerRunConfiguration<NimRunConfiguration>(Constants::C_NIMRUNCONFIGURATION_ID);
addSupportedProjectType(Constants::C_NIMPROJECT_ID);
}
QList<QString> NimRunConfigurationFactory::availableBuildTargets(Target *, CreationMode) const
{
return {QString()};
}
QString NimRunConfigurationFactory::displayNameForBuildTarget(const QString &buildTarget) const
{
return buildTarget + "-TempRunConf";
addFixedBuildTarget("-TempRunConf");
}
}

View File

@@ -33,9 +33,6 @@ class NimRunConfigurationFactory : public ProjectExplorer::IRunConfigurationFact
{
public:
NimRunConfigurationFactory();
QList<QString> availableBuildTargets(ProjectExplorer::Target *parent, CreationMode mode) const override;
QString displayNameForBuildTarget(const QString &) const override;
};
}

View File

@@ -47,6 +47,8 @@ public:
{ }
QString targetName;
QString displayName; // Used in "RunConfiguration Add ..." drop down.
Utils::FileName targetFilePath;
Utils::FileName projectFilePath;

View File

@@ -306,16 +306,7 @@ CustomExecutableRunConfigurationFactory::CustomExecutableRunConfigurationFactory
{
setObjectName("CustomExecutableRunConfigurationFactory");
registerRunConfiguration<CustomExecutableRunConfiguration>(CUSTOM_EXECUTABLE_ID);
}
QList<QString> CustomExecutableRunConfigurationFactory::availableBuildTargets(Target *, CreationMode) const
{
return {QString()};
}
QString CustomExecutableRunConfigurationFactory::displayNameForBuildTarget(const QString &) const
{
return tr("Custom Executable");
addFixedBuildTarget(tr("Custom Executable"));
}
} // namespace ProjectExplorer

View File

@@ -90,9 +90,6 @@ class CustomExecutableRunConfigurationFactory : public IRunConfigurationFactory
public:
explicit CustomExecutableRunConfigurationFactory(QObject *parent = 0);
QList<QString> availableBuildTargets(Target *parent, CreationMode mode) const override;
QString displayNameForBuildTarget(const QString &) const override;
};
} // namespace ProjectExplorer

View File

@@ -453,10 +453,26 @@ QList<RunConfigurationCreationInfo>
{
if (!canHandle(parent))
return {};
return Utils::transform(availableBuildTargets(parent, mode), [this](const QString &suffix) {
return RunConfigurationCreationInfo{this, m_runConfigBaseId, suffix,
this->displayNameForBuildTarget(suffix)};
});
if (m_fixedBuildTargets.isEmpty()) {
return Utils::transform(availableBuildTargets(parent, mode), [this](const QString &suffix) {
return RunConfigurationCreationInfo{this, m_runConfigBaseId, suffix,
this->displayNameForBuildTarget(suffix)};
});
}
QList<RunConfigurationCreationInfo> result;
for (const BuildTargetInfo &bt : m_fixedBuildTargets) {
RunConfigurationCreationInfo rci(this, m_runConfigBaseId, QString(), bt.displayName);
result.append(rci);
}
return result;
}
QList<QString> IRunConfigurationFactory::availableBuildTargets(Target *, CreationMode) const
{
return {};
}
QString IRunConfigurationFactory::displayNameForBuildTarget(const QString &buildTarget) const
@@ -480,6 +496,13 @@ void IRunConfigurationFactory::addSupportedProjectType(Core::Id id)
m_supportedProjectTypes.append(id);
}
void IRunConfigurationFactory::addFixedBuildTarget(const QString &displayName)
{
BuildTargetInfo bt;
bt.displayName = displayName;
m_fixedBuildTargets.append(bt);
}
bool IRunConfigurationFactory::canHandle(Target *target) const
{
const Project *project = target->project();

View File

@@ -28,6 +28,7 @@
#include "projectconfiguration.h"
#include "projectexplorerconstants.h"
#include "applicationlauncher.h"
#include "buildtargetinfo.h"
#include "devicesupport/idevice.h"
#include <utils/port.h>
@@ -320,7 +321,7 @@ signals:
void availableCreationIdsChanged();
protected:
virtual QList<QString> availableBuildTargets(Target *parent, CreationMode mode = UserCreate) const = 0;
virtual QList<QString> availableBuildTargets(Target *parent, CreationMode mode = UserCreate) const;
virtual QString displayNameForBuildTarget(const QString &buildTarget) const;
virtual bool canCreateHelper(Target *parent, const QString &buildTarget) const;
@@ -336,12 +337,14 @@ protected:
void addSupportedProjectType(Core::Id id);
void setSupportedTargetDeviceTypes(const QList<Core::Id> &ids);
void addFixedBuildTarget(const QString &displayName);
private:
RunConfigurationCreator m_creator;
Core::Id m_runConfigBaseId;
QList<Core::Id> m_supportedProjectTypes;
QList<Core::Id> m_supportedTargetDeviceTypes;
QList<BuildTargetInfo> m_fixedBuildTargets;
};
class PROJECTEXPLORER_EXPORT RunConfigWidget : public QWidget

View File

@@ -38,16 +38,7 @@ QmlProjectRunConfigurationFactory::QmlProjectRunConfigurationFactory(QObject *pa
registerRunConfiguration<QmlProjectRunConfiguration>(Constants::QML_SCENE_RC_ID);
addSupportedProjectType(QmlProjectManager::Constants::QML_PROJECT_ID);
setSupportedTargetDeviceTypes({ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE});
}
QList<QString> QmlProjectRunConfigurationFactory::availableBuildTargets(ProjectExplorer::Target *, CreationMode) const
{
return {QString()};
}
QString QmlProjectRunConfigurationFactory::displayNameForBuildTarget(const QString &) const
{
return tr("QML Scene");
addFixedBuildTarget(tr("QML Scene"));
}
} // namespace Internal

View File

@@ -36,9 +36,6 @@ class QmlProjectRunConfigurationFactory : public ProjectExplorer::IRunConfigurat
public:
explicit QmlProjectRunConfigurationFactory(QObject *parent = 0);
QList<QString> availableBuildTargets(ProjectExplorer::Target *parent, CreationMode mode) const override;
QString displayNameForBuildTarget(const QString &buildTarget) const override;
};
} // namespace Internal

View File

@@ -75,17 +75,7 @@ RemoteLinuxCustomRunConfigurationFactory::RemoteLinuxCustomRunConfigurationFacto
registerRunConfiguration<RemoteLinuxCustomRunConfiguration>
(RemoteLinuxCustomRunConfiguration::runConfigId());
setSupportedTargetDeviceTypes({RemoteLinux::Constants::GenericLinuxOsType});
}
QList<QString>
RemoteLinuxCustomRunConfigurationFactory::availableBuildTargets(Target *, CreationMode) const
{
return {QString()};
}
QString RemoteLinuxCustomRunConfigurationFactory::displayNameForBuildTarget(const QString &) const
{
return RemoteLinuxCustomRunConfiguration::runConfigDefaultDisplayName();
addFixedBuildTarget(RemoteLinuxCustomRunConfiguration::runConfigDefaultDisplayName());
}
} // namespace Internal

View File

@@ -49,9 +49,6 @@ class RemoteLinuxCustomRunConfigurationFactory : public ProjectExplorer::IRunCon
public:
explicit RemoteLinuxCustomRunConfigurationFactory(QObject *parent = 0);
QList<QString> availableBuildTargets(ProjectExplorer::Target *parent, CreationMode mode) const override;
QString displayNameForBuildTarget(const QString &buildTarget) const override;
};
} // namespace Internal