diff options
author | Christian Loose <christian.loose@hamburg.de> | 2013-09-23 20:40:52 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-01-09 21:03:25 +0100 |
commit | 955d0df8736577eea0061e61a924104e34d3915d (patch) | |
tree | 89eb91c6b449d2ac488015b58dcf66838d1b9a2a | |
parent | 0efc6e92d8008127c162e3c2721e6f4364aae8ab (diff) |
Add option NoCancelButtonOnLastPage to QWizard
Add support to hide the cancel button on the last page of a wizard. This
is useful for wizards where the last page is used as a summary page that
should not be cancelled.
[ChangeLog][QtWidgets][QWizard] Added NoCancelButtonOnLastPage option.
Task-number: QTBUG-7484
Change-Id: I282bda55a8dec9cde6439a9285d79e0a5c6df96a
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
-rw-r--r-- | src/widgets/dialogs/qwizard.cpp | 7 | ||||
-rw-r--r-- | src/widgets/dialogs/qwizard.h | 3 | ||||
-rw-r--r-- | tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp | 45 |
3 files changed, 53 insertions, 2 deletions
diff --git a/src/widgets/dialogs/qwizard.cpp b/src/widgets/dialogs/qwizard.cpp index 0ad1dad1b8..1cd294e5ea 100644 --- a/src/widgets/dialogs/qwizard.cpp +++ b/src/widgets/dialogs/qwizard.cpp @@ -1704,6 +1704,10 @@ void QWizardPrivate::_q_updateButtonStates() btn.finish->setVisible(buttonLayoutContains(QWizard::FinishButton) && (canFinish || (opts & QWizard::HaveFinishButtonOnEarlyPages))); + if (!(opts & QWizard::NoCancelButton)) + btn.cancel->setVisible(buttonLayoutContains(QWizard::CancelButton) + && (canContinue || !(opts & QWizard::NoCancelButtonOnLastPage))); + bool useDefault = !(opts & QWizard::NoDefaultButton); if (QPushButton *nextPush = qobject_cast<QPushButton *>(btn.next)) nextPush->setDefault(canContinue && useDefault && !commitPage); @@ -2188,6 +2192,7 @@ void QWizardAntiFlickerWidget::paintEvent(QPaintEvent *) \value HaveCustomButton1 Show the first user-defined button (CustomButton1). \value HaveCustomButton2 Show the second user-defined button (CustomButton2). \value HaveCustomButton3 Show the third user-defined button (CustomButton3). + \value NoCancelButtonOnLastPage Don't show the \uicontrol Cancel button on the last page. \sa setOptions(), setOption(), testOption() */ @@ -2642,7 +2647,7 @@ void QWizard::setOptions(WizardOptions options) d->updateButtonLayout(); } else if (changed & (NoBackButtonOnStartPage | NoBackButtonOnLastPage | HaveNextButtonOnLastPage | HaveFinishButtonOnEarlyPages - | DisabledBackButtonOnLastPage)) { + | DisabledBackButtonOnLastPage | NoCancelButtonOnLastPage)) { d->_q_updateButtonStates(); } diff --git a/src/widgets/dialogs/qwizard.h b/src/widgets/dialogs/qwizard.h index 9dea9a8e6f..51b18e0e8f 100644 --- a/src/widgets/dialogs/qwizard.h +++ b/src/widgets/dialogs/qwizard.h @@ -115,7 +115,8 @@ public: HelpButtonOnRight = 0x00001000, HaveCustomButton1 = 0x00002000, HaveCustomButton2 = 0x00004000, - HaveCustomButton3 = 0x00008000 + HaveCustomButton3 = 0x00008000, + NoCancelButtonOnLastPage = 0x00010000 }; Q_DECLARE_FLAGS(WizardOptions, WizardOption) diff --git a/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp b/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp index a711bc28e3..25a82050e3 100644 --- a/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp +++ b/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp @@ -90,6 +90,7 @@ private slots: void setOption_HaveNextButtonOnLastPage(); void setOption_HaveFinishButtonOnEarlyPages(); void setOption_NoCancelButton(); + void setOption_NoCancelButtonOnLastPage(); void setOption_CancelButtonOnLeft(); void setOption_HaveHelpButton(); void setOption_HelpButtonOnRight(); @@ -1423,6 +1424,50 @@ void tst_QWizard::setOption_NoCancelButton() } } +void tst_QWizard::setOption_NoCancelButtonOnLastPage() +{ + for (int i = 0; i < 2; ++i) { + QWizard wizard; + wizard.setOption(QWizard::NoCancelButton, false); + wizard.setOption(QWizard::NoCancelButtonOnLastPage, true); + wizard.addPage(new QWizardPage); + wizard.addPage(new QWizardPage); + wizard.page(1)->setFinalPage(true); // changes nothing (final != last in general) + wizard.addPage(new QWizardPage); + + wizard.setStartId(1); + wizard.show(); + qApp->processEvents(); + + QVERIFY(wizard.button(QWizard::CancelButton)->isVisible()); + + wizard.next(); + qApp->processEvents(); + QVERIFY(!wizard.button(QWizard::CancelButton)->isVisible()); + + wizard.next(); + qApp->processEvents(); + QVERIFY(!wizard.button(QWizard::CancelButton)->isVisible()); + + wizard.back(); + qApp->processEvents(); + QVERIFY(wizard.button(QWizard::CancelButton)->isVisible()); + + wizard.next(); + qApp->processEvents(); + QVERIFY(!wizard.button(QWizard::CancelButton)->isVisible()); + + wizard.setOption(QWizard::NoCancelButtonOnLastPage, false); + QVERIFY(wizard.button(QWizard::CancelButton)->isVisible()); + + wizard.setOption(QWizard::NoCancelButtonOnLastPage, true); + QVERIFY(!wizard.button(QWizard::CancelButton)->isVisible()); + + wizard.addPage(new QWizardPage); + QVERIFY(!wizard.button(QWizard::CancelButton)->isVisible()); // this is maybe wrong + } +} + void tst_QWizard::setOption_CancelButtonOnLeft() { for (int i = 0; i < 2; ++i) { |