diff options
author | Rainer Keller <rainer.keller@digia.com> | 2014-06-18 12:46:15 +0200 |
---|---|---|
committer | Rainer Keller <rainer.keller@digia.com> | 2014-06-19 14:00:58 +0200 |
commit | 53969701f60721be9456dfbed47f517b4ed893e7 (patch) | |
tree | a063071d47a31519f2c0051ca5005ce20dd4edef | |
parent | 12103e0f676f762658310b885f8d427cdd755a18 (diff) | |
download | qt-creator-53969701f60721be9456dfbed47f517b4ed893e7.tar.gz |
Show Qt Quick templates only when needed plugins are available
A Qt Quick template should only be visible if its required plugins are
available.
Change-Id: I932563cb9ffd2a2eca0e77e9945638573d07ba3e
Reviewed-by: Jarek Kobus <jaroslaw.kobus@digia.com>
3 files changed, 28 insertions, 2 deletions
diff --git a/src/plugins/qmakeprojectmanager/wizards/qtquickapp.cpp b/src/plugins/qmakeprojectmanager/wizards/qtquickapp.cpp index 7ae6469615..f64789053f 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 676128eb61..72631b3a4b 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 c76ff0fa76..78451eaf54 100644 --- a/src/plugins/qmakeprojectmanager/wizards/qtquickappwizardpages.cpp +++ b/src/plugins/qmakeprojectmanager/wizards/qtquickappwizardpages.cpp @@ -30,6 +30,8 @@ #include "qtquickappwizardpages.h" #include <utils/wizard.h> +#include <extensionsystem/pluginmanager.h> +#include <extensionsystem/pluginspec.h> #include <QComboBox> #include <QLabel> @@ -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<QString> 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); |