From: Vadim Zeitlin Date: Wed, 10 Apr 2013 12:12:57 +0000 (+0000) Subject: Added chainable wxWizardPageSimple::Chain() overload. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/2d3636405a26819eb00fb865e8dc4fefe37224d2?ds=sidebyside 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 --- diff --git a/docs/changes.txt b/docs/changes.txt index 0e17ef80d4..4fb411a567 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -628,6 +628,7 @@ All (GUI): - Added wxDocument::Activate() (troelsk). - Added wxDocManager::FindDocumentByPath() (troelsk). - Added wxEVT_GRID_COL_AUTO_SIZE event (Igor Korot). +- Added chainable wxWizardPageSimple::Chain() overload. wxGTK: diff --git a/include/wx/wizard.h b/include/wx/wizard.h index 2d38be5b87..59fe14f870 100644 --- a/include/wx/wizard.h +++ b/include/wx/wizard.h @@ -147,7 +147,15 @@ public: void SetPrev(wxWizardPage *prev) { m_prev = prev; } 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) { wxCHECK_RET( first && second, diff --git a/interface/wx/wizard.h b/interface/wx/wizard.h index ca6287f53a..986d5b1270 100644 --- a/interface/wx/wizard.h +++ b/interface/wx/wizard.h @@ -226,6 +226,28 @@ public: wxWizardPage *next = NULL, 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. Example: diff --git a/samples/wizard/wizard.cpp b/samples/wizard/wizard.cpp index fcbcdb6b8f..215f686f85 100644 --- a/samples/wizard/wizard.cpp +++ b/samples/wizard/wizard.cpp @@ -414,8 +414,10 @@ MyWizard::MyWizard(wxFrame *frame, bool useSizer) wxValidationPage *page4 = new wxValidationPage(this); // set the page order using a convenience function - could also use - // SetNext/Prev directly as below - wxWizardPageSimple::Chain(page3, page4); + // SetNext/Prev directly as below, but Chain() is shorter, avoids the risk + // 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 // it into the chain of pages