diff --git a/src/plugins/qmakeprojectmanager/wizards/qtquickapp.cpp b/src/plugins/qmakeprojectmanager/wizards/qtquickapp.cpp index 7ae64696158..f64789053f1 100644 --- a/src/plugins/qmakeprojectmanager/wizards/qtquickapp.cpp +++ b/src/plugins/qmakeprojectmanager/wizards/qtquickapp.cpp @@ -119,6 +119,7 @@ static bool parseTemplateXml(QXmlStreamReader &reader, TemplateInfo *info) static const QLatin1String attribute_viewerclassname("viewerclassname"); static const QLatin1String attribute_qrcdeployment("qrcdeployment"); static const QLatin1String attribute_stubversionminor("stubversionminor"); + static const QLatin1String attribute_requiredPlugins("requiredPlugins"); while (!reader.atEnd() && !reader.hasError()) { reader.readNext(); @@ -145,6 +146,12 @@ static bool parseTemplateXml(QXmlStreamReader &reader, TemplateInfo *info) if (reader.attributes().hasAttribute(attribute_stubversionminor)) info->stubVersionMinor = reader.attributes().value(attribute_stubversionminor).toString().toInt(); + // This attribute is currently used in enterprise addons to filter out templates when the enterprise + // addon is not installed. This applies to the Boot To Qt addon for example. + if (reader.attributes().hasAttribute(attribute_requiredPlugins)) + info->requiredPlugins = reader.attributes().value(attribute_requiredPlugins).toString() + .split(QLatin1Char(','), QString::SkipEmptyParts); + } else if (reader.name() == tag_displayName) { if (!assignLanguageElementText(reader, locale, &info->displayName)) continue; diff --git a/src/plugins/qmakeprojectmanager/wizards/qtquickapp.h b/src/plugins/qmakeprojectmanager/wizards/qtquickapp.h index 676128eb612..72631b3a4ba 100644 --- a/src/plugins/qmakeprojectmanager/wizards/qtquickapp.h +++ b/src/plugins/qmakeprojectmanager/wizards/qtquickapp.h @@ -63,6 +63,7 @@ public: QString viewerClassName; QString viewerDir; QString qrcDeployment; + QStringList requiredPlugins; int stubVersionMinor; }; diff --git a/src/plugins/qmakeprojectmanager/wizards/qtquickappwizardpages.cpp b/src/plugins/qmakeprojectmanager/wizards/qtquickappwizardpages.cpp index c76ff0fa764..78451eaf54d 100644 --- a/src/plugins/qmakeprojectmanager/wizards/qtquickappwizardpages.cpp +++ b/src/plugins/qmakeprojectmanager/wizards/qtquickappwizardpages.cpp @@ -30,6 +30,8 @@ #include "qtquickappwizardpages.h" #include +#include +#include #include #include @@ -55,8 +57,24 @@ QtQuickComponentSetPage::QtQuickComponentSetPage(QWidget *parent) QLabel *label = new QLabel(tr("Qt Quick component set:"), this); d->m_versionComboBox = new QComboBox(this); - foreach (const TemplateInfo &templateInfo, QtQuickApp::templateInfos()) - d->m_versionComboBox->addItem(templateInfo.displayName); + + QSet availablePlugins; + foreach (ExtensionSystem::PluginSpec *s, ExtensionSystem::PluginManager::plugins()) { + if (s->state() == ExtensionSystem::PluginSpec::Running && !s->hasError()) + availablePlugins += s->name(); + } + + foreach (const TemplateInfo &templateInfo, QtQuickApp::templateInfos()) { + bool ok = true; + foreach (const QString &neededPlugin, templateInfo.requiredPlugins) { + if (!availablePlugins.contains(neededPlugin)) { + ok = false; + break; + } + } + if (ok) + d->m_versionComboBox->addItem(templateInfo.displayName); + } l->addWidget(label); l->addWidget(d->m_versionComboBox);