From c78258cd57abac4a593965c1d759c0b877f9f1c7 Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Thu, 12 Jun 2014 16:24:52 +0200 Subject: [PATCH] Allow the user to restrict rc creation to certain .pro Task-number: QTCREATORBUG-10953 Change-Id: Iff1a31c007ac777bfa390d48237480ef56ffc0e4 Reviewed-by: Eike Ziller --- src/libs/utils/algorithm.h | 19 +++++++++++++++++++ src/plugins/android/androidrunfactories.cpp | 9 ++++++--- src/plugins/android/androidrunfactories.h | 2 +- .../baremetalrunconfigurationfactory.cpp | 3 ++- .../baremetalrunconfigurationfactory.h | 2 +- .../cmakerunconfiguration.cpp | 3 ++- .../cmakerunconfiguration.h | 2 +- src/plugins/ios/iosrunfactories.cpp | 16 ++++++++++------ src/plugins/ios/iosrunfactories.h | 2 +- .../projectexplorer/runconfiguration.h | 3 ++- src/plugins/projectexplorer/target.cpp | 15 ++++++++++----- .../qbsprojectmanager/qbsrunconfiguration.cpp | 3 ++- .../qbsprojectmanager/qbsrunconfiguration.h | 2 +- .../desktopqmakerunconfiguration.cpp | 7 ++++--- .../desktopqmakerunconfiguration.h | 2 +- .../qmakeprojectmanager/qmakenodes.cpp | 6 ++++++ src/plugins/qmakeprojectmanager/qmakenodes.h | 1 + .../qmakeprojectmanager/qmakeproject.cpp | 11 +++++++++++ .../qmakeprojectmanager/qmakeproject.h | 1 + .../qmlprojectrunconfigurationfactory.cpp | 3 ++- .../qmlprojectrunconfigurationfactory.h | 2 +- .../qnx/blackberryrunconfigurationfactory.cpp | 19 +++++++++++-------- .../qnx/blackberryrunconfigurationfactory.h | 4 +++- .../qnx/qnxrunconfigurationfactory.cpp | 19 ++++++++++++------- src/plugins/qnx/qnxrunconfigurationfactory.h | 4 +++- .../customexecutablerunconfiguration.cpp | 3 ++- .../customexecutablerunconfiguration.h | 2 +- .../remotelinuxrunconfigurationfactory.cpp | 8 ++++++-- .../remotelinuxrunconfigurationfactory.h | 2 +- src/plugins/winrt/winrtrunfactories.cpp | 3 ++- src/plugins/winrt/winrtrunfactories.h | 2 +- 31 files changed, 127 insertions(+), 53 deletions(-) diff --git a/src/libs/utils/algorithm.h b/src/libs/utils/algorithm.h index 3ac3c7406d8..4594769c772 100644 --- a/src/libs/utils/algorithm.h +++ b/src/libs/utils/algorithm.h @@ -37,6 +37,25 @@ namespace Utils { +template +bool anyOf(const T &container, F predicate) +{ + return std::any_of(container.begin(), container.end(), predicate); +} + +template +bool allOf(const T &container, F predicate) +{ + return std::all_of(container.begin(), container.end(), predicate); +} + +template +void erase(QList &container, F predicate) +{ + container.erase(std::remove_if(container.begin(), container.end(), predicate), + container.end()); +} + // Note: add overloads for other container types as needed template Q_REQUIRED_RESULT diff --git a/src/plugins/android/androidrunfactories.cpp b/src/plugins/android/androidrunfactories.cpp index e38e6b8bbe2..0ac87f3f521 100644 --- a/src/plugins/android/androidrunfactories.cpp +++ b/src/plugins/android/androidrunfactories.cpp @@ -85,17 +85,20 @@ bool AndroidRunConfigurationFactory::canClone(Target *parent, RunConfiguration * return canCreate(parent, source->id()); } -QList AndroidRunConfigurationFactory::availableCreationIds(Target *parent) const +QList AndroidRunConfigurationFactory::availableCreationIds(Target *parent, CreationMode mode) const { - QList ids; if (!AndroidManager::supportsAndroid(parent)) - return ids; + return QList(); QmakeProject *project = static_cast(parent->project()); QList nodes = project->allProFiles(QList() << ApplicationTemplate << LibraryTemplate); + + if (mode == AutoCreate) + nodes = QmakeProject::nodesWithQtcRunnable(nodes); + const Core::Id base = Core::Id(ANDROID_RC_ID_PREFIX); return QmakeProject::idsForNodes(base, nodes); } diff --git a/src/plugins/android/androidrunfactories.h b/src/plugins/android/androidrunfactories.h index 673a9ac58ee..a2628114aa2 100644 --- a/src/plugins/android/androidrunfactories.h +++ b/src/plugins/android/androidrunfactories.h @@ -51,7 +51,7 @@ public: explicit AndroidRunConfigurationFactory(QObject *parent = 0); QString displayNameForId(const Core::Id id) const; - QList availableCreationIds(ProjectExplorer::Target *parent) const; + QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode = UserCreate) const; bool canCreate(ProjectExplorer::Target *parent, const Core::Id id) const; diff --git a/src/plugins/baremetal/baremetalrunconfigurationfactory.cpp b/src/plugins/baremetal/baremetalrunconfigurationfactory.cpp index c536068bf7d..3de3c607ed4 100644 --- a/src/plugins/baremetal/baremetalrunconfigurationfactory.cpp +++ b/src/plugins/baremetal/baremetalrunconfigurationfactory.cpp @@ -84,8 +84,9 @@ bool BareMetalRunConfigurationFactory::canClone(Target *parent, RunConfiguration return bmrc && canCreate(parent, source->id()); } -QList BareMetalRunConfigurationFactory::availableCreationIds(Target *parent) const +QList BareMetalRunConfigurationFactory::availableCreationIds(Target *parent, CreationMode mode) const { + Q_UNUSED(mode) QList result; if (!canHandle(parent)) return result; diff --git a/src/plugins/baremetal/baremetalrunconfigurationfactory.h b/src/plugins/baremetal/baremetalrunconfigurationfactory.h index fd935e28d52..7b9535dcfd4 100644 --- a/src/plugins/baremetal/baremetalrunconfigurationfactory.h +++ b/src/plugins/baremetal/baremetalrunconfigurationfactory.h @@ -42,7 +42,7 @@ public: ~BareMetalRunConfigurationFactory(); QString displayNameForId(const Core::Id id) const; - QList availableCreationIds(ProjectExplorer::Target *parent) const; + QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const; bool canCreate(ProjectExplorer::Target *parent, const Core::Id id) const; diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp index fe4a4bb02c5..feece04f65d 100644 --- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp @@ -352,8 +352,9 @@ CMakeRunConfigurationFactory::~CMakeRunConfigurationFactory() } // used to show the list of possible additons to a project, returns a list of ids -QList CMakeRunConfigurationFactory::availableCreationIds(Target *parent) const +QList CMakeRunConfigurationFactory::availableCreationIds(Target *parent, CreationMode mode) const { + Q_UNUSED(mode) if (!canHandle(parent)) return QList(); CMakeProject *project = static_cast(parent->project()); diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h index c292a7abaf5..53d530362ff 100644 --- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h @@ -138,7 +138,7 @@ public: bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *product) const; ProjectExplorer::RunConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *product); - QList availableCreationIds(ProjectExplorer::Target *parent) const; + QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const; QString displayNameForId(const Core::Id id) const; static Core::Id idFromBuildTarget(const QString &target); diff --git a/src/plugins/ios/iosrunfactories.cpp b/src/plugins/ios/iosrunfactories.cpp index 259ebbe1b91..456ead3217f 100644 --- a/src/plugins/ios/iosrunfactories.cpp +++ b/src/plugins/ios/iosrunfactories.cpp @@ -59,7 +59,11 @@ namespace Internal { static QString pathFromId(const Core::Id id) { - return id.suffixAfter(IOS_RC_ID_PREFIX); + QString pathStr = id.toString(); + const QString prefix = QLatin1String(IOS_RC_ID_PREFIX); + if (!pathStr.startsWith(prefix)) + return QString(); + return pathStr.mid(prefix.size()); } IosRunConfigurationFactory::IosRunConfigurationFactory(QObject *parent) @@ -88,19 +92,19 @@ bool IosRunConfigurationFactory::canClone(Target *parent, RunConfiguration *sour return canCreate(parent, source->id()); } -QList IosRunConfigurationFactory::availableCreationIds(Target *parent) const +QList IosRunConfigurationFactory::availableCreationIds(Target *parent, CreationMode mode) const { - QList ids; if (!IosManager::supportsIos(parent)) - return ids; - Core::Id baseId(IOS_RC_ID_PREFIX); + return QList(); QmakeProject *project = static_cast(parent->project()); QList nodes = project->allProFiles(QList() << ApplicationTemplate << LibraryTemplate << AuxTemplate); - + if (mode == AutoCreate) + nodes = QmakeProject::nodesWithQtcRunnable(nodes); + Core::Id baseId(IOS_RC_ID_PREFIX); return QmakeProject::idsForNodes(baseId, nodes); } diff --git a/src/plugins/ios/iosrunfactories.h b/src/plugins/ios/iosrunfactories.h index 7a664970267..1ecedd108f8 100644 --- a/src/plugins/ios/iosrunfactories.h +++ b/src/plugins/ios/iosrunfactories.h @@ -51,7 +51,7 @@ public: explicit IosRunConfigurationFactory(QObject *parent = 0); QString displayNameForId(const Core::Id id) const QTC_OVERRIDE; - QList availableCreationIds(ProjectExplorer::Target *parent) const QTC_OVERRIDE; + QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode = UserCreate) const QTC_OVERRIDE; bool canCreate(ProjectExplorer::Target *parent, const Core::Id id) const QTC_OVERRIDE; diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h index 2e64ade1a4e..9a67fbe8cd3 100644 --- a/src/plugins/projectexplorer/runconfiguration.h +++ b/src/plugins/projectexplorer/runconfiguration.h @@ -217,7 +217,8 @@ public: explicit IRunConfigurationFactory(QObject *parent = 0); virtual ~IRunConfigurationFactory(); - virtual QList availableCreationIds(Target *parent) const = 0; + enum CreationMode {UserCreate, AutoCreate}; + virtual QList availableCreationIds(Target *parent, CreationMode mode = UserCreate) const = 0; virtual QString displayNameForId(const Core::Id id) const = 0; virtual bool canCreate(Target *parent, const Core::Id id) const = 0; diff --git a/src/plugins/projectexplorer/target.cpp b/src/plugins/projectexplorer/target.cpp index df8d0689050..cb228111704 100644 --- a/src/plugins/projectexplorer/target.cpp +++ b/src/plugins/projectexplorer/target.cpp @@ -599,26 +599,31 @@ void Target::updateDefaultRunConfigurations() int configuredCount = existingConfigured.count(); // find all RC ids that can get created: - QList factoryIds; + QList availableFactoryIds; foreach (IRunConfigurationFactory *rcFactory, rcFactories) - factoryIds.append(rcFactory->availableCreationIds(this)); + availableFactoryIds.append(rcFactory->availableCreationIds(this)); + + QList autoCreateFactoryIds; + foreach (IRunConfigurationFactory *rcFactory, rcFactories) + autoCreateFactoryIds.append(rcFactory->availableCreationIds(this, + IRunConfigurationFactory::AutoCreate)); // Put outdated RCs into toRemove, do not bother with factories // that produce already existing RCs QList toRemove; QList toIgnore; foreach (RunConfiguration *rc, existingConfigured) { - if (factoryIds.contains(rc->id())) + if (availableFactoryIds.contains(rc->id())) toIgnore.append(rc->id()); // Already there else toRemove << rc; } foreach (Core::Id i, toIgnore) - factoryIds.removeAll(i); + autoCreateFactoryIds.removeAll(i); configuredCount -= toRemove.count(); // Create new RCs and put them into newConfigured/newUnconfigured - foreach (Core::Id id, factoryIds) { + foreach (Core::Id id, autoCreateFactoryIds) { IRunConfigurationFactory *factory = 0; foreach (IRunConfigurationFactory *i, rcFactories) { if (i->canCreate(this, id)) { diff --git a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp index de30f0aa2b8..6fda531af9f 100644 --- a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp +++ b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp @@ -550,8 +550,9 @@ RunConfiguration *QbsRunConfigurationFactory::clone(Target *parent, RunConfigura return new QbsRunConfiguration(parent, old); } -QList QbsRunConfigurationFactory::availableCreationIds(Target *parent) const +QList QbsRunConfigurationFactory::availableCreationIds(Target *parent, CreationMode mode) const { + Q_UNUSED(mode) QList result; if (!canHandle(parent)) return result; diff --git a/src/plugins/qbsprojectmanager/qbsrunconfiguration.h b/src/plugins/qbsprojectmanager/qbsrunconfiguration.h index 5f77f015a3b..2b234c476b6 100644 --- a/src/plugins/qbsprojectmanager/qbsrunconfiguration.h +++ b/src/plugins/qbsprojectmanager/qbsrunconfiguration.h @@ -181,7 +181,7 @@ public: bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *source) const; ProjectExplorer::RunConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *source); - QList availableCreationIds(ProjectExplorer::Target *parent) const; + QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const; QString displayNameForId(const Core::Id id) const; private: diff --git a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp index 1bdf5f58512..4aa5bd2af86 100644 --- a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp +++ b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp @@ -667,14 +667,15 @@ RunConfiguration *DesktopQmakeRunConfigurationFactory::clone(Target *parent, Run return new DesktopQmakeRunConfiguration(parent, old); } -QList DesktopQmakeRunConfigurationFactory::availableCreationIds(Target *parent) const +QList DesktopQmakeRunConfigurationFactory::availableCreationIds(Target *parent, CreationMode mode) const { - QList result; if (!canHandle(parent)) - return result; + return QList(); QmakeProject *project = static_cast(parent->project()); QList nodes = project->applicationProFiles(); + if (mode == AutoCreate) + nodes = QmakeProject::nodesWithQtcRunnable(nodes); return QmakeProject::idsForNodes(Core::Id(QMAKE_RC_PREFIX), nodes); } diff --git a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.h b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.h index 439c35e6be7..ffba1c09bcc 100644 --- a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.h +++ b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.h @@ -193,7 +193,7 @@ public: bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *source) const; ProjectExplorer::RunConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *source); - QList availableCreationIds(ProjectExplorer::Target *parent) const; + QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const; QString displayNameForId(const Core::Id id) const; QList runConfigurationsForNode(ProjectExplorer::Target *t, diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.cpp b/src/plugins/qmakeprojectmanager/qmakenodes.cpp index 5601f92eca9..913d1dfa73a 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodes.cpp @@ -1591,6 +1591,12 @@ bool QmakeProFileNode::isDebugAndRelease() const return configValues.contains(QLatin1String("debug_and_release")); } +bool QmakeProFileNode::isQtcRunnable() const +{ + const QStringList configValues = m_varValues.value(ConfigVar); + return configValues.contains(QLatin1String("qtc_runnable")); +} + QmakeProjectType QmakeProFileNode::projectType() const { return m_projectType; diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.h b/src/plugins/qmakeprojectmanager/qmakenodes.h index d179b001f3f..3750558cc6d 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.h +++ b/src/plugins/qmakeprojectmanager/qmakenodes.h @@ -410,6 +410,7 @@ public: bool showInSimpleTree(QmakeProjectType projectType) const; bool isDebugAndRelease() const; + bool isQtcRunnable() const; void setParseInProgress(bool b); void setParseInProgressRecursive(bool b); diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp index 0f36f815c80..9bc24e5d092 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp @@ -1103,6 +1103,17 @@ bool QmakeProject::hasApplicationProFile(const QString &path) const return false; } +QList QmakeProject::nodesWithQtcRunnable(QList nodes) +{ + std::function hasQtcRunnable = [](QmakeProFileNode *node) { + return node->isQtcRunnable(); + }; + + if (anyOf(nodes, hasQtcRunnable)) + erase(nodes, std::not1(hasQtcRunnable)); + return nodes; +} + QList QmakeProject::idsForNodes(const Core::Id base, const QList &nodes) { return Utils::transform(nodes, [&base](QmakeProFileNode *node) { diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.h b/src/plugins/qmakeprojectmanager/qmakeproject.h index 820155be03a..1575b2f1f78 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.h +++ b/src/plugins/qmakeprojectmanager/qmakeproject.h @@ -92,6 +92,7 @@ public: QList applicationProFiles(Parsing parse = ExactParse) const; bool hasApplicationProFile(const QString &path) const; + static QList nodesWithQtcRunnable(QList nodes); static QList idsForNodes(const Core::Id base, const QList &nodes); void notifyChanged(const QString &name); diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.cpp index 808b363ea0f..c6aba0a902c 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.cpp @@ -50,8 +50,9 @@ QmlProjectRunConfigurationFactory::~QmlProjectRunConfigurationFactory() { } -QList QmlProjectRunConfigurationFactory::availableCreationIds(ProjectExplorer::Target *parent) const +QList QmlProjectRunConfigurationFactory::availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const { + Q_UNUSED(mode) if (!canHandle(parent)) return QList(); diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.h b/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.h index f04cdff5605..b43738cbaaf 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.h +++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.h @@ -43,7 +43,7 @@ public: explicit QmlProjectRunConfigurationFactory(QObject *parent = 0); ~QmlProjectRunConfigurationFactory(); - QList availableCreationIds(ProjectExplorer::Target *parent) const; + QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const; QString displayNameForId(const Core::Id id) const; bool canCreate(ProjectExplorer::Target *parent, const Core::Id id) const; diff --git a/src/plugins/qnx/blackberryrunconfigurationfactory.cpp b/src/plugins/qnx/blackberryrunconfigurationfactory.cpp index 22631d80adc..ce5aa07a55d 100644 --- a/src/plugins/qnx/blackberryrunconfigurationfactory.cpp +++ b/src/plugins/qnx/blackberryrunconfigurationfactory.cpp @@ -37,6 +37,7 @@ #include #include #include +#include using namespace Qnx; using namespace Qnx::Internal; @@ -51,19 +52,21 @@ BlackBerryRunConfigurationFactory::BlackBerryRunConfigurationFactory(QObject *pa { } -QList BlackBerryRunConfigurationFactory::availableCreationIds(ProjectExplorer::Target *parent) const +QList BlackBerryRunConfigurationFactory::availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const { - QList ids; + using QmakeProjectManager::QmakeProject; if (!canHandle(parent)) - return ids; + return QList(); - QmakeProjectManager::QmakeProject *qt4Project = qobject_cast(parent->project()); + QmakeProject *qt4Project = qobject_cast(parent->project()); if (!qt4Project) - return ids; + return QList(); - QList nodes = qt4Project->applicationProFiles(); - return QmakeProjectManager::QmakeProject::idsForNodes(Core::Id(Constants::QNX_BB_RUNCONFIGURATION_PREFIX), - nodes); + QList nodes = qt4Project->applicationProFiles(); + if (mode == AutoCreate) + nodes = QmakeProject::nodesWithQtcRunnable(nodes); + return QmakeProject::idsForNodes(Core::Id(Constants::QNX_QNX_RUNCONFIGURATION_PREFIX), + nodes); } QString BlackBerryRunConfigurationFactory::displayNameForId(const Core::Id id) const diff --git a/src/plugins/qnx/blackberryrunconfigurationfactory.h b/src/plugins/qnx/blackberryrunconfigurationfactory.h index b9983d5dfec..890360ee01f 100644 --- a/src/plugins/qnx/blackberryrunconfigurationfactory.h +++ b/src/plugins/qnx/blackberryrunconfigurationfactory.h @@ -34,6 +34,8 @@ #include +namespace QmakeProjectManager { class QmakeProFileNode; } + namespace Qnx { namespace Internal { @@ -43,7 +45,7 @@ class BlackBerryRunConfigurationFactory : public ProjectExplorer::IRunConfigurat public: explicit BlackBerryRunConfigurationFactory(QObject *parent = 0); - QList availableCreationIds(ProjectExplorer::Target *parent) const; + QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const; QString displayNameForId(const Core::Id id) const; bool canCreate(ProjectExplorer::Target *parent, const Core::Id id) const; diff --git a/src/plugins/qnx/qnxrunconfigurationfactory.cpp b/src/plugins/qnx/qnxrunconfigurationfactory.cpp index 7e0810f8c4a..553cc5d6129 100644 --- a/src/plugins/qnx/qnxrunconfigurationfactory.cpp +++ b/src/plugins/qnx/qnxrunconfigurationfactory.cpp @@ -38,6 +38,7 @@ #include #include #include +#include using namespace Qnx; using namespace Qnx::Internal; @@ -52,18 +53,22 @@ QnxRunConfigurationFactory::QnxRunConfigurationFactory(QObject *parent) : { } -QList QnxRunConfigurationFactory::availableCreationIds(ProjectExplorer::Target *parent) const +QList QnxRunConfigurationFactory::availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const { - QList ids; + using QmakeProjectManager::QmakeProject; if (!canHandle(parent)) - return ids; + return QList(); - QmakeProjectManager::QmakeProject *qt4Project = qobject_cast(parent->project()); + QmakeProject *qt4Project = qobject_cast(parent->project()); if (!qt4Project) - return ids; + return QList(); QList nodes = qt4Project->applicationProFiles(); - return QmakeProjectManager::QmakeProject::idsForNodes(Core::Id(Constants::QNX_QNX_RUNCONFIGURATION_PREFIX), - nodes); + + if (mode == AutoCreate) + nodes = QmakeProject::nodesWithQtcRunnable(nodes); + + return QmakeProject::idsForNodes(Core::Id(Constants::QNX_QNX_RUNCONFIGURATION_PREFIX), + nodes); } QString QnxRunConfigurationFactory::displayNameForId(const Core::Id id) const diff --git a/src/plugins/qnx/qnxrunconfigurationfactory.h b/src/plugins/qnx/qnxrunconfigurationfactory.h index b9570491ff5..1117a2ee664 100644 --- a/src/plugins/qnx/qnxrunconfigurationfactory.h +++ b/src/plugins/qnx/qnxrunconfigurationfactory.h @@ -34,6 +34,8 @@ #include +namespace QmakeProjectManager { class QmakeProFileNode; } + namespace Qnx { namespace Internal { @@ -43,7 +45,7 @@ class QnxRunConfigurationFactory : public ProjectExplorer::IRunConfigurationFact public: explicit QnxRunConfigurationFactory(QObject *parent = 0); - QList availableCreationIds(ProjectExplorer::Target *parent) const; + QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const; QString displayNameForId(const Core::Id id) const; bool canCreate(ProjectExplorer::Target *parent, const Core::Id id) const; diff --git a/src/plugins/qtsupport/customexecutablerunconfiguration.cpp b/src/plugins/qtsupport/customexecutablerunconfiguration.cpp index 33b8e68d464..6acd0bf6c0e 100644 --- a/src/plugins/qtsupport/customexecutablerunconfiguration.cpp +++ b/src/plugins/qtsupport/customexecutablerunconfiguration.cpp @@ -367,8 +367,9 @@ bool CustomExecutableRunConfigurationFactory::canHandle(Target *parent) const return parent->project()->supportsKit(parent->kit()); } -QList CustomExecutableRunConfigurationFactory::availableCreationIds(Target *parent) const +QList CustomExecutableRunConfigurationFactory::availableCreationIds(Target *parent, CreationMode mode) const { + Q_UNUSED(mode) if (!canHandle(parent)) return QList(); return QList() << Core::Id(CUSTOM_EXECUTABLE_ID); diff --git a/src/plugins/qtsupport/customexecutablerunconfiguration.h b/src/plugins/qtsupport/customexecutablerunconfiguration.h index 86579a9b08f..93eddf2683a 100644 --- a/src/plugins/qtsupport/customexecutablerunconfiguration.h +++ b/src/plugins/qtsupport/customexecutablerunconfiguration.h @@ -112,7 +112,7 @@ public: explicit CustomExecutableRunConfigurationFactory(QObject *parent = 0); ~CustomExecutableRunConfigurationFactory(); - QList availableCreationIds(ProjectExplorer::Target *parent) const; + QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const; QString displayNameForId(const Core::Id id) const; bool canCreate(ProjectExplorer::Target *parent, const Core::Id id) const; diff --git a/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp b/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp index 93bda58d2f5..0a0d45bca5b 100644 --- a/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp +++ b/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp @@ -49,7 +49,10 @@ namespace Internal { namespace { QString pathFromId(Core::Id id) { - return id.suffixAfter(RemoteLinuxRunConfiguration::IdPrefix); + QByteArray idStr = id.name(); + if (!idStr.startsWith(RemoteLinuxRunConfiguration::IdPrefix)) + return QString(); + return QString::fromUtf8(idStr.mid(strlen(RemoteLinuxRunConfiguration::IdPrefix))); } } // namespace @@ -88,8 +91,9 @@ bool RemoteLinuxRunConfigurationFactory::canClone(Target *parent, RunConfigurati return rlrc && canCreate(parent, source->id()); } -QList RemoteLinuxRunConfigurationFactory::availableCreationIds(Target *parent) const +QList RemoteLinuxRunConfigurationFactory::availableCreationIds(Target *parent, CreationMode mode) const { + Q_UNUSED(mode) QList result; if (!canHandle(parent)) return result; diff --git a/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.h b/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.h index a96679f2b43..16cfa90d2f1 100644 --- a/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.h +++ b/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.h @@ -43,7 +43,7 @@ public: ~RemoteLinuxRunConfigurationFactory(); QString displayNameForId(const Core::Id id) const; - QList availableCreationIds(ProjectExplorer::Target *parent) const; + QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const; bool canCreate(ProjectExplorer::Target *parent, const Core::Id id) const; diff --git a/src/plugins/winrt/winrtrunfactories.cpp b/src/plugins/winrt/winrtrunfactories.cpp index 48a896dfd13..7f1a33a9f58 100644 --- a/src/plugins/winrt/winrtrunfactories.cpp +++ b/src/plugins/winrt/winrtrunfactories.cpp @@ -72,8 +72,9 @@ WinRtRunConfigurationFactory::WinRtRunConfigurationFactory() { } -QList WinRtRunConfigurationFactory::availableCreationIds(Target *parent) const +QList WinRtRunConfigurationFactory::availableCreationIds(Target *parent, CreationMode mode) const { + Q_UNUSED(mode) QList result; if (isKitCompatible(parent->kit())) result.append(Core::Id(winrtConfigurationIdC)); diff --git a/src/plugins/winrt/winrtrunfactories.h b/src/plugins/winrt/winrtrunfactories.h index 2637fa2b10f..4e4fbafa2c6 100644 --- a/src/plugins/winrt/winrtrunfactories.h +++ b/src/plugins/winrt/winrtrunfactories.h @@ -43,7 +43,7 @@ class WinRtRunConfigurationFactory : public ProjectExplorer::IRunConfigurationF public: WinRtRunConfigurationFactory(); - QList availableCreationIds(ProjectExplorer::Target *parent) const; + QList availableCreationIds(ProjectExplorer::Target *parent, CreationMode mode) const; QString displayNameForId(const Core::Id id) const; bool canCreate(ProjectExplorer::Target *parent, const Core::Id id) const; bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const;