From 1ec9d76e2b3a8f2643a8cca6351f9391515db3b7 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 5 Jan 2018 11:20:44 +0100 Subject: [PATCH] ProjectExplorer: Promote RemoteLinuxRunConfigFactory::availableBuildTargets This was already almost the desired final pattern, so make it the default implementation of ProjectRunConfigurationFactory::availableBuildTargets. For the only remaining feature of "decorating" the build target names, introduce a property m_displayNamePattern. Un-adapted sub-classes still need (and are able) to overide. Change-Id: Ia7d2d2f7d53f8b1da487fa82c8265ad5deb47500 Reviewed-by: Christian Kandeler --- .../projectexplorer/runconfiguration.cpp | 34 +++++++++++++++++-- .../projectexplorer/runconfiguration.h | 2 ++ .../remotelinuxrunconfigurationfactory.cpp | 9 +---- .../remotelinuxrunconfigurationfactory.h | 3 -- 4 files changed, 34 insertions(+), 14 deletions(-) diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp index 760ae803762..b13f267fd02 100644 --- a/src/plugins/projectexplorer/runconfiguration.cpp +++ b/src/plugins/projectexplorer/runconfiguration.cpp @@ -461,16 +461,26 @@ QList : m_fixedBuildTargets; for (const BuildTargetInfo &bt : buildTargets) { - RunConfigurationCreationInfo rci(this, m_runConfigBaseId, bt.targetName, bt.displayName); + QString displayName = bt.displayName; + if (displayName.isEmpty()) + displayName = QFileInfo(bt.targetName).completeBaseName(); + if (displayName.isEmpty()) + displayName = bt.targetName; + if (!m_displayNamePattern.isEmpty()) { + displayName = m_displayNamePattern.contains("%1") + ? m_displayNamePattern.arg(bt.targetName) + : m_displayNamePattern; + } + RunConfigurationCreationInfo rci(this, m_runConfigBaseId, bt.targetName, displayName); result.append(rci); } return result; } -QList IRunConfigurationFactory::availableBuildTargets(Target *, CreationMode) const +QList IRunConfigurationFactory::availableBuildTargets(Target *parent, CreationMode) const { - return {}; + return parent->applicationTargets().list; } @@ -497,6 +507,24 @@ void IRunConfigurationFactory::addFixedBuildTarget(const QString &displayName) m_fixedBuildTargets.append(bt); } +/*! + \internal + + Convenience function to specify a pattern for the name that is displayed for this + RunConfiguration. + + A fixed string is used as-is, a "%1" is replaced by the BuildTargetInfo's targetName. + + This simplistic patterns covers all currently existing uses, if anything more + complex is required, the display name can be set directly when creating the + BuildTargetInfo objects as part of the RunConfiguration's availableBuildTarget() + implementation. +*/ +void IRunConfigurationFactory::setDisplayNamePattern(const QString &pattern) +{ + m_displayNamePattern = pattern; +} + bool IRunConfigurationFactory::canHandle(Target *target) const { const Project *project = target->project(); diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h index 3d9e35ca1e4..5c7c415b675 100644 --- a/src/plugins/projectexplorer/runconfiguration.h +++ b/src/plugins/projectexplorer/runconfiguration.h @@ -337,6 +337,7 @@ protected: void addSupportedProjectType(Core::Id id); void setSupportedTargetDeviceTypes(const QList &ids); void addFixedBuildTarget(const QString &displayName); + void setDisplayNamePattern(const QString &pattern); private: RunConfigurationCreator m_creator; @@ -344,6 +345,7 @@ private: QList m_supportedProjectTypes; QList m_supportedTargetDeviceTypes; QList m_fixedBuildTargets; + QString m_displayNamePattern; }; class PROJECTEXPLORER_EXPORT RunConfigWidget : public QWidget diff --git a/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp b/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp index 097586b268b..2452e1e73cc 100644 --- a/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp +++ b/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp @@ -46,6 +46,7 @@ RemoteLinuxRunConfigurationFactory::RemoteLinuxRunConfigurationFactory(QObject * setObjectName("RemoteLinuxRunConfigurationFactory"); registerRunConfiguration(RemoteLinuxRunConfiguration::IdPrefix); setSupportedTargetDeviceTypes({RemoteLinux::Constants::GenericLinuxOsType}); + setDisplayNamePattern(tr("%1 (on Remote Generic Linux Host)")); } bool RemoteLinuxRunConfigurationFactory::canCreateHelper(Target *parent, const QString &buildTarget) const @@ -53,14 +54,6 @@ bool RemoteLinuxRunConfigurationFactory::canCreateHelper(Target *parent, const Q return parent->applicationTargets().hasTarget(buildTarget); } -QList RemoteLinuxRunConfigurationFactory::availableBuildTargets(Target *parent, CreationMode) const -{ - return Utils::transform(parent->applicationTargets().list, [](BuildTargetInfo bti) { - bti.displayName = bti.targetName + ' ' + tr("(on Remote Generic Linux Host)"); - return bti; - }); -} - // RemoteLinuxCustomRunConfigurationFactory RemoteLinuxCustomRunConfigurationFactory::RemoteLinuxCustomRunConfigurationFactory(QObject *parent) diff --git a/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.h b/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.h index 7b3c60ea05b..0e1ea5a6619 100644 --- a/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.h +++ b/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.h @@ -37,9 +37,6 @@ class RemoteLinuxRunConfigurationFactory : public ProjectExplorer::IRunConfigura public: explicit RemoteLinuxRunConfigurationFactory(QObject *parent = 0); - QList - availableBuildTargets(ProjectExplorer::Target *parent, CreationMode mode) const override; - bool canCreateHelper(ProjectExplorer::Target *parent, const QString &suffix) const override; };