diff --git a/src/plugins/projectexplorer/kit.cpp b/src/plugins/projectexplorer/kit.cpp index 763f81aa9c5..aa52ea586dc 100644 --- a/src/plugins/projectexplorer/kit.cpp +++ b/src/plugins/projectexplorer/kit.cpp @@ -582,6 +582,45 @@ bool Kit::isMutable(Id id) const return d->m_mutable.contains(id); } +QSet Kit::availablePlatforms() const +{ + QSet platforms; + foreach (const KitInformation *ki, KitManager::kitInformation()) + platforms.unite(ki->availablePlatforms(this)); + return platforms; +} + +bool Kit::hasPlatform(const QString &platform) const +{ + if (platform.isEmpty()) + return true; + return availablePlatforms().contains(platform); +} + +QString Kit::displayNameForPlatform(const QString &platform) const +{ + foreach (const KitInformation *ki, KitManager::kitInformation()) { + const QString displayName = ki->displayNameForPlatform(this, platform); + if (!displayName.isEmpty()) + return displayName; + } + return QString(); + +} + +FeatureSet Kit::availableFeatures() const +{ + Core::FeatureSet features; + foreach (const KitInformation *ki, KitManager::kitInformation()) + features |= ki->availableFeatures(this); + return features; +} + +bool Kit::hasFeatures(const FeatureSet &features) const +{ + return availableFeatures().contains(features); +} + void Kit::kitUpdated() { if (d->m_nestedBlockingLevel > 0 && !d->m_mustNotifyAboutDisplayName) { diff --git a/src/plugins/projectexplorer/kit.h b/src/plugins/projectexplorer/kit.h index 8092f445e63..7ee96097498 100644 --- a/src/plugins/projectexplorer/kit.h +++ b/src/plugins/projectexplorer/kit.h @@ -33,6 +33,9 @@ #include "projectexplorer_export.h" #include "task.h" +#include + +#include #include namespace Utils { class Environment; } @@ -113,6 +116,12 @@ public: void setMutable(Core::Id id, bool b); bool isMutable(Core::Id id) const; + QSet availablePlatforms() const; + bool hasPlatform(const QString &platform) const; + QString displayNameForPlatform(const QString &platform) const; + Core::FeatureSet availableFeatures() const; + bool hasFeatures(const Core::FeatureSet &features) const; + private: void setSdkProvided(bool sdkProvided); diff --git a/src/plugins/qtsupport/qtfeatureprovider.h b/src/plugins/projectexplorer/kitfeatureprovider.h similarity index 82% rename from src/plugins/qtsupport/qtfeatureprovider.h rename to src/plugins/projectexplorer/kitfeatureprovider.h index 818292f8356..4bb3adadcc3 100644 --- a/src/plugins/qtsupport/qtfeatureprovider.h +++ b/src/plugins/projectexplorer/kitfeatureprovider.h @@ -27,26 +27,29 @@ ** ****************************************************************************/ -#ifndef QTFEATUREPROVIDER_H -#define QTFEATUREPROVIDER_H +#ifndef KITFEATUREPROVIDER_H +#define KITFEATUREPROVIDER_H +#include #include -namespace QtSupport { +namespace ProjectExplorer { namespace Internal { -class QtFeatureProvider : public Core::IFeatureProvider +class KitFeatureProvider : public Core::IFeatureProvider { Q_OBJECT public: - QtFeatureProvider() {} - Core::FeatureSet availableFeatures(const QString &platformName) const; + + // IFeatureProvider interface +public: + Core::FeatureSet availableFeatures(const QString &platform) const; QStringList availablePlatforms() const; QString displayNameForPlatform(const QString &string) const; }; } // namespace Internal -} // namespace QtSupport +} // namespace ProjectExplorer -#endif // QTFEATUREPROVIDER_H +#endif // KITFEATUREPROVIDER_H diff --git a/src/plugins/projectexplorer/kitinformation.cpp b/src/plugins/projectexplorer/kitinformation.cpp index 6437ec9114d..44c38eaabc9 100644 --- a/src/plugins/projectexplorer/kitinformation.cpp +++ b/src/plugins/projectexplorer/kitinformation.cpp @@ -326,6 +326,15 @@ KitMatcher DeviceTypeKitInformation::deviceTypeMatcher(Core::Id type) }); } +Core::FeatureSet DeviceTypeKitInformation::availableFeatures(const Kit *k) const +{ + Core::Id id = DeviceTypeKitInformation::deviceTypeId(k); + Core::FeatureSet result; + if (id.isValid()) + result |= Core::Feature(Core::Id::fromString(QString::fromLatin1("DeviceType.") + id.toString())); + return result; +} + // -------------------------------------------------------------------------- // DeviceInformation: // -------------------------------------------------------------------------- diff --git a/src/plugins/projectexplorer/kitinformation.h b/src/plugins/projectexplorer/kitinformation.h index 2d17fce8d74..79c09484d0d 100644 --- a/src/plugins/projectexplorer/kitinformation.h +++ b/src/plugins/projectexplorer/kitinformation.h @@ -129,6 +129,8 @@ public: static void setDeviceTypeId(Kit *k, Core::Id type); static KitMatcher deviceTypeMatcher(Core::Id type); + + Core::FeatureSet availableFeatures(const Kit *k) const; }; // -------------------------------------------------------------------------- diff --git a/src/plugins/projectexplorer/kitmanager.cpp b/src/plugins/projectexplorer/kitmanager.cpp index a1b66a9a6cf..891ed458c14 100644 --- a/src/plugins/projectexplorer/kitmanager.cpp +++ b/src/plugins/projectexplorer/kitmanager.cpp @@ -30,9 +30,10 @@ #include "kitmanager.h" #include "kit.h" -#include "task.h" +#include "kitfeatureprovider.h" #include "kitmanagerconfigwidget.h" #include "project.h" +#include "task.h" #include @@ -341,6 +342,35 @@ void KitManager::deregisterKitInformation(KitInformation *ki) delete ki; } +QSet KitManager::availablePlatforms() +{ + QSet platforms; + foreach (const Kit *k, kits()) + platforms.unite(k->availablePlatforms()); + return platforms; +} + +QString KitManager::displayNameForPlatform(const QString &platform) +{ + foreach (const Kit *k, kits()) { + const QString displayName = k->displayNameForPlatform(platform); + if (!displayName.isEmpty()) + return displayName; + } + return QString(); +} + +Core::FeatureSet KitManager::availableFeatures(const QString &platform) +{ + Core::FeatureSet features; + foreach (const Kit *k, kits()) { + QSet kitPlatforms = k->availablePlatforms(); + if (kitPlatforms.isEmpty() || kitPlatforms.contains(platform)) + features |= k->availableFeatures(); + } + return features; +} + KitManager::KitList KitManager::restoreKits(const Utils::FileName &fileName) { KitList result; @@ -586,9 +616,47 @@ QString KitInformation::displayNamePostfix(const Kit *k) const return QString(); } +QSet KitInformation::availablePlatforms(const Kit *k) const +{ + Q_UNUSED(k); + return QSet(); +} + +QString KitInformation::displayNameForPlatform(const Kit *k, const QString &platform) const +{ + Q_UNUSED(k); + Q_UNUSED(platform); + return QString(); +} + +Core::FeatureSet KitInformation::availableFeatures(const Kit *k) const +{ + Q_UNUSED(k); + return Core::FeatureSet(); +} + void KitInformation::notifyAboutUpdate(Kit *k) { KitManager::notifyAboutUpdate(k); } +// -------------------------------------------------------------------- +// KitFeatureProvider: +// -------------------------------------------------------------------- + +Core::FeatureSet Internal::KitFeatureProvider::availableFeatures(const QString &platform) const +{ + return KitManager::availableFeatures(platform); +} + +QStringList Internal::KitFeatureProvider::availablePlatforms() const +{ + return KitManager::availablePlatforms().toList(); +} + +QString Internal::KitFeatureProvider::displayNameForPlatform(const QString &string) const +{ + return KitManager::displayNameForPlatform(string); +} + } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/kitmanager.h b/src/plugins/projectexplorer/kitmanager.h index b5ac4f8c49e..fa163472ec0 100644 --- a/src/plugins/projectexplorer/kitmanager.h +++ b/src/plugins/projectexplorer/kitmanager.h @@ -33,6 +33,7 @@ #include "projectexplorer_export.h" #include +#include #include #include @@ -92,6 +93,10 @@ public: virtual QString displayNamePostfix(const Kit *k) const; + virtual QSet availablePlatforms(const Kit *k) const; + virtual QString displayNameForPlatform(const ProjectExplorer::Kit *k, const QString &platform) const; + virtual Core::FeatureSet availableFeatures(const Kit *k) const; + protected: void setId(Core::Id id) { m_id = id; } void setPriority(int priority) { m_priority = priority; } @@ -144,6 +149,10 @@ public: static void registerKitInformation(ProjectExplorer::KitInformation *ki); static void deregisterKitInformation(ProjectExplorer::KitInformation *ki); + static QSet availablePlatforms(); + static QString displayNameForPlatform(const QString &platform); + static Core::FeatureSet availableFeatures(const QString &platform); + public slots: void saveKits(); diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index e303c2d3b5c..fd11f88598e 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -40,6 +40,7 @@ #include "projectmacroexpander.h" #include "removetaskhandler.h" #include "unconfiguredprojectpanel.h" +#include "kitfeatureprovider.h" #include "kitmanager.h" #include "kitoptionspage.h" #include "target.h" @@ -388,6 +389,8 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er d->m_kitManager = new KitManager; // register before ToolChainManager d->m_toolChainManager = new ToolChainManager; + addAutoReleasedObject(new Internal::KitFeatureProvider); + // Register KitInformation: KitManager::registerKitInformation(new DeviceTypeKitInformation); KitManager::registerKitInformation(new DeviceKitInformation); diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro index ca9be7b40aa..73195464497 100644 --- a/src/plugins/projectexplorer/projectexplorer.pro +++ b/src/plugins/projectexplorer/projectexplorer.pro @@ -28,6 +28,7 @@ HEADERS += projectexplorer.h \ kitconfigwidget.h \ kitinformation.h \ kitinformationconfigwidget.h \ + kitfeatureprovider.h \ kitmanager.h \ kitmanagerconfigwidget.h \ kitmodel.h \ diff --git a/src/plugins/projectexplorer/projectexplorer.qbs b/src/plugins/projectexplorer/projectexplorer.qbs index 841d9e78902..93030dc0c13 100644 --- a/src/plugins/projectexplorer/projectexplorer.qbs +++ b/src/plugins/projectexplorer/projectexplorer.qbs @@ -89,6 +89,7 @@ QtcPlugin { "kit.cpp", "kit.h", "kitchooser.cpp", "kitchooser.h", "kitconfigwidget.cpp", "kitconfigwidget.h", + "kitfeatureprovider.h", "kitinformation.cpp", "kitinformation.h", "kitinformationconfigwidget.cpp", "kitinformationconfigwidget.h", "kitmanager.cpp", "kitmanager.h", diff --git a/src/plugins/qtsupport/qtkitinformation.cpp b/src/plugins/qtsupport/qtkitinformation.cpp index 48df8097e2d..1cb6b20abee 100644 --- a/src/plugins/qtsupport/qtkitinformation.cpp +++ b/src/plugins/qtsupport/qtkitinformation.cpp @@ -221,4 +221,27 @@ KitMatcher QtKitInformation::qtVersionMatcher(const Core::FeatureSet &required, }); } +QSet QtKitInformation::availablePlatforms(const Kit *k) const +{ + QSet result; + BaseQtVersion *version = QtKitInformation::qtVersion(k); + if (version) + result.insert(version->platformName()); + return result; +} + +QString QtKitInformation::displayNameForPlatform(const Kit *k, const QString &platform) const +{ + BaseQtVersion *version = QtKitInformation::qtVersion(k); + if (version && version->platformName() == platform) + return version->platformDisplayName(); + return QString(); +} + +Core::FeatureSet QtKitInformation::availableFeatures(const Kit *k) const +{ + BaseQtVersion *version = QtKitInformation::qtVersion(k); + return version ? version->availableFeatures() : Core::FeatureSet(); +} + } // namespace QtSupport diff --git a/src/plugins/qtsupport/qtkitinformation.h b/src/plugins/qtsupport/qtkitinformation.h index c9db7fedf19..9b52c3459e7 100644 --- a/src/plugins/qtsupport/qtkitinformation.h +++ b/src/plugins/qtsupport/qtkitinformation.h @@ -66,11 +66,15 @@ public: static BaseQtVersion *qtVersion(const ProjectExplorer::Kit *k); static void setQtVersion(ProjectExplorer::Kit *k, const BaseQtVersion *v); - static ProjectExplorer::KitMatcher platformMatcher(const QString &platform); + static ProjectExplorer::KitMatcher platformMatcher(const QString &availablePlatforms); static ProjectExplorer::KitMatcher qtVersionMatcher(const Core::FeatureSet &required = Core::FeatureSet(), const QtVersionNumber &min = QtVersionNumber(0, 0, 0), const QtVersionNumber &max = QtVersionNumber(INT_MAX, INT_MAX, INT_MAX)); + QSet availablePlatforms(const ProjectExplorer::Kit *k) const; + QString displayNameForPlatform(const ProjectExplorer::Kit *k, const QString &platform) const; + Core::FeatureSet availableFeatures(const ProjectExplorer::Kit *k) const; + private slots: void qtVersionsChanged(const QList &addedIds, const QList &removedIds, diff --git a/src/plugins/qtsupport/qtsupport.pro b/src/plugins/qtsupport/qtsupport.pro index 4e6ee531523..f1e794c4ff5 100644 --- a/src/plugins/qtsupport/qtsupport.pro +++ b/src/plugins/qtsupport/qtsupport.pro @@ -29,7 +29,6 @@ HEADERS += \ exampleslistmodel.h \ screenshotcropper.h \ qtconfigwidget.h \ - qtfeatureprovider.h \ desktopqtversionfactory.h \ simulatorqtversionfactory.h \ desktopqtversion.h \ diff --git a/src/plugins/qtsupport/qtsupport.qbs b/src/plugins/qtsupport/qtsupport.qbs index 0454f431f7e..0a2229a61ab 100644 --- a/src/plugins/qtsupport/qtsupport.qbs +++ b/src/plugins/qtsupport/qtsupport.qbs @@ -101,7 +101,6 @@ QtcPlugin { "qtversionmanager.cpp", "qtversionmanager.h", "qtversionmanager.ui", - "qtfeatureprovider.h", "screenshotcropper.cpp", "screenshotcropper.h", "showbuildlog.ui", diff --git a/src/plugins/qtsupport/qtsupportplugin.cpp b/src/plugins/qtsupport/qtsupportplugin.cpp index f3cd82edb1a..d275985c09e 100644 --- a/src/plugins/qtsupport/qtsupportplugin.cpp +++ b/src/plugins/qtsupport/qtsupportplugin.cpp @@ -32,7 +32,6 @@ #include "codegensettingspage.h" #include "customexecutablerunconfiguration.h" #include "desktopqtversionfactory.h" -#include "qtfeatureprovider.h" #include "qtkitinformation.h" #include "qtoptionspage.h" #include "qtversionmanager.h" @@ -79,9 +78,6 @@ bool QtSupportPlugin::initialize(const QStringList &arguments, QString *errorMes addAutoReleasedObject(new WinCeQtVersionFactory); addAutoReleasedObject(new UiCodeModelManager); - QtFeatureProvider *featureMgr = new QtFeatureProvider; - addAutoReleasedObject(featureMgr); - addAutoReleasedObject(new CodeGenSettingsPage); addAutoReleasedObject(new QtOptionsPage); diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp index 5ac557efe35..03d8d719e06 100644 --- a/src/plugins/qtsupport/qtversionmanager.cpp +++ b/src/plugins/qtsupport/qtversionmanager.cpp @@ -32,7 +32,6 @@ #include "qtkitinformation.h" #include "qtversionfactory.h" #include "baseqtversion.h" -#include "qtfeatureprovider.h" #include "qtsupportconstants.h" #include @@ -813,35 +812,4 @@ static BaseQtVersion::QmakeBuildConfigs qmakeBuildConfigFromCmdArgs(QListplatformName() == platformName || platformName.isEmpty()) - features |= qtVersion->availableFeatures(); - } - - return features; -} - -QStringList QtFeatureProvider::availablePlatforms() const -{ - QStringList platforms; - foreach (BaseQtVersion *const qtVersion, QtVersionManager::validVersions()) { - if (!qtVersion->platformName().isEmpty()) - platforms.append(qtVersion->platformName()); - } - platforms.removeDuplicates(); - return platforms; -} - -QString QtFeatureProvider::displayNameForPlatform(const QString &string) const -{ - foreach (BaseQtVersion *const qtVersion, QtVersionManager::validVersions()) { - if (qtVersion->platformName() == string) - return qtVersion->platformDisplayName(); - } - return QString(); -} - } // namespace QtVersion