diff --git a/src/plugins/coreplugin/basefilewizardfactory.cpp b/src/plugins/coreplugin/basefilewizardfactory.cpp index 72357bd6548..eb7700016e3 100644 --- a/src/plugins/coreplugin/basefilewizardfactory.cpp +++ b/src/plugins/coreplugin/basefilewizardfactory.cpp @@ -180,7 +180,7 @@ void WizardEventLoop::rejected() \sa Core::Internal::WizardEventLoop */ -void BaseFileWizardFactory::runWizard(const QString &path, QWidget *parent, const QString &platform, const QVariantMap &extraValues) +void BaseFileWizardFactory::runWizardImpl(const QString &path, QWidget *parent, const QString &platform, const QVariantMap &extraValues) { QTC_ASSERT(!path.isEmpty(), return); diff --git a/src/plugins/coreplugin/basefilewizardfactory.h b/src/plugins/coreplugin/basefilewizardfactory.h index e4028522616..d4ff388ba8b 100644 --- a/src/plugins/coreplugin/basefilewizardfactory.h +++ b/src/plugins/coreplugin/basefilewizardfactory.h @@ -106,9 +106,6 @@ class CORE_EXPORT BaseFileWizardFactory : public IWizardFactory Q_OBJECT public: - // IWizard - void runWizard(const QString &path, QWidget *parent, const QString &platform, const QVariantMap &extraValues); - static QString buildFileName(const QString &path, const QString &baseName, const QString &extension); protected: @@ -129,6 +126,10 @@ protected: OverwriteResult promptOverwrite(GeneratedFiles *files, QString *errorMessage) const; static bool postGenerateOpenEditors(const GeneratedFiles &l, QString *errorMessage = 0); + +private: + // IWizard + void runWizardImpl(const QString &path, QWidget *parent, const QString &platform, const QVariantMap &extraValues); }; } // namespace Core diff --git a/src/plugins/coreplugin/icore.cpp b/src/plugins/coreplugin/icore.cpp index a031d88c2d2..f06fe01e37d 100644 --- a/src/plugins/coreplugin/icore.cpp +++ b/src/plugins/coreplugin/icore.cpp @@ -286,6 +286,7 @@ */ #include "dialogs/newdialog.h" +#include "iwizardfactory.h" #include "mainwindow.h" #include "documentmanager.h" @@ -312,7 +313,7 @@ ICore *ICore::instance() bool ICore::isNewItemDialogRunning() { - return NewDialog::isRunning(); + return NewDialog::isRunning() || IWizardFactory::isWizardRunning(); } ICore::ICore(MainWindow *mainwindow) diff --git a/src/plugins/coreplugin/icore.h b/src/plugins/coreplugin/icore.h index 43b8d66b02c..a381a537fd9 100644 --- a/src/plugins/coreplugin/icore.h +++ b/src/plugins/coreplugin/icore.h @@ -59,6 +59,8 @@ class CORE_EXPORT ICore : public QObject Q_OBJECT friend class Internal::MainWindow; + friend class IWizardFactory; + explicit ICore(Internal::MainWindow *mw); ~ICore(); diff --git a/src/plugins/coreplugin/iwizardfactory.cpp b/src/plugins/coreplugin/iwizardfactory.cpp index e85a39f59e5..68b708bd80b 100644 --- a/src/plugins/coreplugin/iwizardfactory.cpp +++ b/src/plugins/coreplugin/iwizardfactory.cpp @@ -155,6 +155,7 @@ static QList s_providerList; QList s_allFactories; QList s_factoryCreators; bool s_areFactoriesLoaded = false; +bool s_isWizardRunning = false; } /* A utility to find all wizards supporting a view mode and matching a predicate */ @@ -242,6 +243,17 @@ QString IWizardFactory::runPath(const QString &defaultPath) return path; } +void IWizardFactory::runWizard(const QString &path, QWidget *parent, const QString &platform, const QVariantMap &variables) +{ + s_isWizardRunning = true; + ICore::validateNewDialogIsRunning(); + + runWizardImpl(path, parent, platform, variables); + + s_isWizardRunning = false; + ICore::validateNewDialogIsRunning(); +} + bool IWizardFactory::isAvailable(const QString &platformName) const { if (platformName.isEmpty()) @@ -293,6 +305,11 @@ void IWizardFactory::registerFeatureProvider(IFeatureProvider *provider) s_providerList.append(provider); } +bool IWizardFactory::isWizardRunning() +{ + return s_isWizardRunning; +} + void IWizardFactory::destroyFeatureProvider() { qDeleteAll(s_providerList); diff --git a/src/plugins/coreplugin/iwizardfactory.h b/src/plugins/coreplugin/iwizardfactory.h index d9091cd2924..670d0b7ecc2 100644 --- a/src/plugins/coreplugin/iwizardfactory.h +++ b/src/plugins/coreplugin/iwizardfactory.h @@ -88,7 +88,9 @@ public: QString runPath(const QString &defaultPath); - virtual void runWizard(const QString &path, QWidget *parent, const QString &platform, const QVariantMap &variables) = 0; + // Does bookkeeping and the calls runWizardImpl. Please implement that. + virtual void runWizard(const QString &path, QWidget *parent, const QString &platform, + const QVariantMap &variables); virtual bool isAvailable(const QString &platformName) const; QStringList supportedPlatforms() const; @@ -105,10 +107,15 @@ public: static void registerFeatureProvider(IFeatureProvider *provider); + static bool isWizardRunning(); + protected: FeatureSet pluginFeatures() const; FeatureSet availableFeatures(const QString &platformName) const; + virtual void runWizardImpl(const QString &path, QWidget *parent, const QString &platform, + const QVariantMap &variables) = 0; + private: static void initialize(); static void destroyFeatureProvider(); diff --git a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp index ba5cc0bcf04..ad04824d8ca 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp @@ -356,7 +356,7 @@ void JsonWizardFactory::registerGeneratorFactory(JsonWizardGeneratorFactory *fac JsonWizardFactory::~JsonWizardFactory() { } -void JsonWizardFactory::runWizard(const QString &path, QWidget *parent, const QString &platform, +void JsonWizardFactory::runWizardImpl(const QString &path, QWidget *parent, const QString &platform, const QVariantMap &variables) { JsonWizard wizard(parent); diff --git a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.h b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.h index 9cb53404ec9..8d5efeefd34 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.h +++ b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.h @@ -86,15 +86,16 @@ public: ~JsonWizardFactory(); - void runWizard(const QString &path, QWidget *parent, const QString &platform, - const QVariantMap &variables); - static QList objectOrList(const QVariant &data, QString *errorMessage); + static QString localizedString(const QVariant &value); bool isAvailable(const QString &platformName) const override; private: + void runWizardImpl(const QString &path, QWidget *parent, const QString &platform, + const QVariantMap &variables); + // Create all wizards. As other plugins might register factories for derived // classes. Called when the new file dialog is shown for the first time. static QList createWizardFactories();