diff --git a/src/libs/utils/wizard.cpp b/src/libs/utils/wizard.cpp index f611d512319..71069e60f66 100644 --- a/src/libs/utils/wizard.cpp +++ b/src/libs/utils/wizard.cpp @@ -276,6 +276,7 @@ public: bool m_automaticProgressCreation = true; WizardProgress *m_wizardProgress = nullptr; QSet m_fieldNames; + bool m_skipForSubproject = false; }; Wizard::Wizard(QWidget *parent, Qt::WindowFlags flags) : @@ -525,6 +526,32 @@ void Wizard::_q_pageRemoved(int pageId) d->m_wizardProgress->removeItem(item); } +void Wizard::setSkipForSubprojects(bool skip) +{ + Q_D(Wizard); + d->m_skipForSubproject = skip; +} + +int Wizard::nextId() const +{ + Q_D(const Wizard); + if (!d->m_skipForSubproject) + return QWizard::nextId(); + + const QList allIds = pageIds(); + int index = allIds.indexOf(currentId()); + QTC_ASSERT(index > -1, return QWizard::nextId()); + + while (++index < allIds.size()) { + if (auto wp = qobject_cast(page(index))) { + if (!wp->skipForSubprojects()) + return index; + } + } + QTC_CHECK(false); // should not happen + return QWizard::nextId(); +} + class WizardProgressPrivate { WizardProgress *q_ptr; diff --git a/src/libs/utils/wizard.h b/src/libs/utils/wizard.h index 35abff2f6d7..ac3ad795bf6 100644 --- a/src/libs/utils/wizard.h +++ b/src/libs/utils/wizard.h @@ -50,6 +50,10 @@ public: void showVariables(); + // allows to skip pages + void setSkipForSubprojects(bool skip); + int nextId() const override; + protected: virtual QString stringify(const QVariant &v) const; virtual QString evaluate(const QVariant &v) const; diff --git a/src/libs/utils/wizardpage.h b/src/libs/utils/wizardpage.h index 76d3039a673..1ab23f92b5a 100644 --- a/src/libs/utils/wizardpage.h +++ b/src/libs/utils/wizardpage.h @@ -74,6 +74,9 @@ public: void registerFieldWithName(const QString &name, QWidget *widget, const char *property = nullptr, const char *changedSignal = nullptr); + void setSkipForSubprojects(bool skip) { m_skipForSubproject = skip; } + bool skipForSubprojects() const { return m_skipForSubproject; } + virtual bool handleReject(); virtual bool handleAccept(); @@ -85,6 +88,7 @@ private: void registerFieldName(const QString &name); QSet m_toRegister; + bool m_skipForSubproject = false; }; } // namespace Utils