Added chainable wxWizardPageSimple::Chain() overload.

Add the simplest and most fool proof of chaining the pages in static wizards:
just chain several calls to the new, non-static, wxWizardPageSimple::Chain()
overload.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73806 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2013-04-10 12:12:57 +00:00
parent 4381c90d1f
commit 2d3636405a
4 changed files with 36 additions and 3 deletions

View File

@@ -628,6 +628,7 @@ All (GUI):
- Added wxDocument::Activate() (troelsk). - Added wxDocument::Activate() (troelsk).
- Added wxDocManager::FindDocumentByPath() (troelsk). - Added wxDocManager::FindDocumentByPath() (troelsk).
- Added wxEVT_GRID_COL_AUTO_SIZE event (Igor Korot). - Added wxEVT_GRID_COL_AUTO_SIZE event (Igor Korot).
- Added chainable wxWizardPageSimple::Chain() overload.
wxGTK: wxGTK:

View File

@@ -147,7 +147,15 @@ public:
void SetPrev(wxWizardPage *prev) { m_prev = prev; } void SetPrev(wxWizardPage *prev) { m_prev = prev; }
void SetNext(wxWizardPage *next) { m_next = next; } void SetNext(wxWizardPage *next) { m_next = next; }
// a convenience function to make the pages follow each other // Convenience functions to make the pages follow each other without having
// to call their SetPrev() or SetNext() explicitly.
wxWizardPageSimple& Chain(wxWizardPageSimple* next)
{
SetNext(next);
next->SetPrev(this);
return *next;
}
static void Chain(wxWizardPageSimple *first, wxWizardPageSimple *second) static void Chain(wxWizardPageSimple *first, wxWizardPageSimple *second)
{ {
wxCHECK_RET( first && second, wxCHECK_RET( first && second,

View File

@@ -226,6 +226,28 @@ public:
wxWizardPage *next = NULL, wxWizardPage *next = NULL,
const wxBitmap& bitmap = wxNullBitmap); const wxBitmap& bitmap = wxNullBitmap);
/**
A helper chaining this page with the next one.
Notice that this method returns a reference to the next page, so the
calls to it can, in turn, be chained:
@code
wxWizardPageSimple* firstPage = new FirstPage;
(*firstPage).Chain(new SecondPage)
.Chain(new ThirdPage)
.Chain(new LastPage);
@endcode
This makes this method the simplest way to define the order of changes
in fully static wizards, i.e. in those where the order doesn't depend
on the choices made by the user in the wizard pages during run-time.
@param next A non-@NULL pointer to the next page.
@return Reference to @a next on which Chain() can be called again.
@since 2.9.5
*/
/** /**
A convenience function to make the pages follow each other. A convenience function to make the pages follow each other.
Example: Example:

View File

@@ -414,8 +414,10 @@ MyWizard::MyWizard(wxFrame *frame, bool useSizer)
wxValidationPage *page4 = new wxValidationPage(this); wxValidationPage *page4 = new wxValidationPage(this);
// set the page order using a convenience function - could also use // set the page order using a convenience function - could also use
// SetNext/Prev directly as below // SetNext/Prev directly as below, but Chain() is shorter, avoids the risk
wxWizardPageSimple::Chain(page3, page4); // of an error and can itself be chained, e.g. you could write
// page3.Chain(page4).Chain(page5) and so on.
page3->Chain(page4);
// this page is not a wxWizardPageSimple, so we use SetNext/Prev to insert // this page is not a wxWizardPageSimple, so we use SetNext/Prev to insert
// it into the chain of pages // it into the chain of pages