diff --git a/src/plugins/coreplugin/iwizardfactory.cpp b/src/plugins/coreplugin/iwizardfactory.cpp index d9d6b4456fd..d5f11e765e0 100644 --- a/src/plugins/coreplugin/iwizardfactory.cpp +++ b/src/plugins/coreplugin/iwizardfactory.cpp @@ -203,19 +203,6 @@ private: NewItemDialogData s_reopenData; } -/* A utility to find all wizards supporting a view mode and matching a predicate */ -QList findWizardFactories(const std::function &predicate) -{ - const QList allFactories = IWizardFactory::allWizardFactories(); - QList rc; - auto cend = allFactories.constEnd(); - for (auto it = allFactories.constBegin(); it != cend; ++it) { - if (predicate(*it)) - rc.push_back(*it); - } - return rc; -} - static Id actionId(const IWizardFactory *factory) { return factory->id().withPrefix("Wizard.Impl."); @@ -263,12 +250,6 @@ QList IWizardFactory::allWizardFactories() return s_allFactories; } -// Utility to find all registered wizards of a certain kind -QList IWizardFactory::wizardFactoriesOfKind(WizardKind kind) -{ - return findWizardFactories([kind](IWizardFactory *f) { return f->kind() == kind; }); -} - QString IWizardFactory::runPath(const QString &defaultPath) { QString path = defaultPath; diff --git a/src/plugins/coreplugin/iwizardfactory.h b/src/plugins/coreplugin/iwizardfactory.h index b82c1701046..c250c9fbb1a 100644 --- a/src/plugins/coreplugin/iwizardfactory.h +++ b/src/plugins/coreplugin/iwizardfactory.h @@ -100,8 +100,6 @@ public: // Utility to find all registered wizards static QList allWizardFactories(); - // Utility to find all registered wizards of a certain kind - static QList wizardFactoriesOfKind(WizardKind kind); static QSet allAvailablePlatforms(); static QString displayNameForPlatform(Id i); diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 4968b065a88..8e6a034525e 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -1559,7 +1559,8 @@ void ProjectExplorerPluginPrivate::newProject() qDebug() << "ProjectExplorerPlugin::newProject"; ICore::showNewItemDialog(tr("New Project", "Title of dialog"), - IWizardFactory::wizardFactoriesOfKind(IWizardFactory::ProjectWizard)); + Utils::filtered(IWizardFactory::allWizardFactories(), + [](IWizardFactory *f) { return !f->supportedProjectTypes().isEmpty(); })); updateActions(); } @@ -3098,8 +3099,9 @@ void ProjectExplorerPluginPrivate::addNewFile() map.insert(QLatin1String(Constants::PROJECT_KIT_IDS), QVariant::fromValue(profileIds)); } ICore::showNewItemDialog(tr("New File", "Title of dialog"), - IWizardFactory::wizardFactoriesOfKind(IWizardFactory::FileWizard), - location, map); + Utils::filtered(IWizardFactory::allWizardFactories(), + [](IWizardFactory *f) { return f->supportedPlatforms().isEmpty(); }), + location, map); } void ProjectExplorerPluginPrivate::addNewSubproject() @@ -3113,14 +3115,20 @@ void ProjectExplorerPluginPrivate::addNewSubproject() currentNode).contains(AddSubProject)) { QVariantMap map; map.insert(QLatin1String(Constants::PREFERRED_PROJECT_NODE), QVariant::fromValue(currentNode)); - if (ProjectTree::currentProject()) { + Project *project = ProjectTree::currentProject(); + Core::Id projectType; + if (project) { QList profileIds = Utils::transform(ProjectTree::currentProject()->targets(), &Target::id); map.insert(QLatin1String(Constants::PROJECT_KIT_IDS), QVariant::fromValue(profileIds)); + projectType = project->id(); } ICore::showNewItemDialog(tr("New Subproject", "Title of dialog"), - IWizardFactory::wizardFactoriesOfKind(IWizardFactory::ProjectWizard), - location, map); + Utils::filtered(IWizardFactory::allWizardFactories(), + [projectType](IWizardFactory *f) { + return projectType.isValid() ? f->supportedPlatforms().contains(projectType) + : !f->supportedPlatforms().isEmpty(); }), + location, map); } } diff --git a/src/plugins/projectexplorer/projectwelcomepage.cpp b/src/plugins/projectexplorer/projectwelcomepage.cpp index 74935dab674..c905f02ec94 100644 --- a/src/plugins/projectexplorer/projectwelcomepage.cpp +++ b/src/plugins/projectexplorer/projectwelcomepage.cpp @@ -252,7 +252,8 @@ void ProjectWelcomePage::reloadWelcomeScreenData() void ProjectWelcomePage::newProject() { Core::ICore::showNewItemDialog(tr("New Project"), - Core::IWizardFactory::wizardFactoriesOfKind(Core::IWizardFactory::ProjectWizard)); + Utils::filtered(Core::IWizardFactory::allWizardFactories(), + [](Core::IWizardFactory *f) { return !f->supportedProjectTypes().isEmpty(); })); } void ProjectWelcomePage::openProject() diff --git a/src/plugins/qmakeprojectmanager/wizards/subdirsprojectwizard.cpp b/src/plugins/qmakeprojectmanager/wizards/subdirsprojectwizard.cpp index ae4335f68e1..50b23aa69f8 100644 --- a/src/plugins/qmakeprojectmanager/wizards/subdirsprojectwizard.cpp +++ b/src/plugins/qmakeprojectmanager/wizards/subdirsprojectwizard.cpp @@ -31,11 +31,14 @@ #include "subdirsprojectwizard.h" #include "subdirsprojectwizarddialog.h" +#include "../qmakeprojectmanagerconstants.h" #include #include #include +#include + #include namespace QmakeProjectManager { @@ -93,7 +96,10 @@ bool SubdirsProjectWizard::postGenerateFiles(const QWizard *w, const Core::Gener map.insert(QLatin1String(ProjectExplorer::Constants::PREFERRED_PROJECT_NODE), profileName); map.insert(QLatin1String(ProjectExplorer::Constants::PROJECT_KIT_IDS), QVariant::fromValue(wizard->selectedKits())); IWizardFactory::requestNewItemDialog(tr("New Subproject", "Title of dialog"), - Core::IWizardFactory::wizardFactoriesOfKind(Core::IWizardFactory::ProjectWizard), + Utils::filtered(Core::IWizardFactory::allWizardFactories(), + [](Core::IWizardFactory *f) { + return f->supportedPlatforms().contains(Constants::QMAKEPROJECT_ID); + }), wizard->parameters().projectPath(), map); } else { return false;