From c9f18835abd49fb620f371e0d956d25ab631aab0 Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Mon, 20 Feb 2012 11:38:52 +0000 Subject: [PATCH] Added wxEVT_WIZARD_BEFORE_PAGE_CHANGED event to allow the application to influence the return value of GetNext after Next is clicked. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70630 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/wizard.h | 5 +++++ interface/wx/wizard.h | 8 ++++++++ src/generic/wizard.cpp | 8 ++++++++ 3 files changed, 21 insertions(+) diff --git a/include/wx/wizard.h b/include/wx/wizard.h index 0c2453ca83..2d38be5b87 100644 --- a/include/wx/wizard.h +++ b/include/wx/wizard.h @@ -291,6 +291,7 @@ wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_WIZARD_CANCEL, wxWizardEvent ); wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_WIZARD_HELP, wxWizardEvent ); wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_WIZARD_FINISHED, wxWizardEvent ); wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_WIZARD_PAGE_SHOWN, wxWizardEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_WIZARD_BEFORE_PAGE_CHANGED, wxWizardEvent ); typedef void (wxEvtHandler::*wxWizardEventFunction)(wxWizardEvent&); @@ -307,6 +308,10 @@ typedef void (wxEvtHandler::*wxWizardEventFunction)(wxWizardEvent&); // changed - unless the event handler vetoes the event #define EVT_WIZARD_PAGE_CHANGING(id, fn) wx__DECLARE_WIZARDEVT(PAGE_CHANGING, id, fn) +// Called before GetNext/GetPrev is called, so that the handler can change state that will be +// used when GetNext/GetPrev is called. PAGE_CHANGING is called too late to influence GetNext/GetPrev. +#define EVT_WIZARD_BEFORE_PAGE_CHANGED(id, fn) wx__DECLARE_WIZARDEVT(BEFORE_PAGE_CHANGED, id, fn) + // the user pressed "Cancel" button and the wizard is going to be dismissed - // unless the event handler vetoes the event #define EVT_WIZARD_CANCEL(id, fn) wx__DECLARE_WIZARDEVT(CANCEL, id, fn) diff --git a/interface/wx/wizard.h b/interface/wx/wizard.h index 9244c18aca..de86f1a850 100644 --- a/interface/wx/wizard.h +++ b/interface/wx/wizard.h @@ -98,6 +98,10 @@ public: The page has been just changed (this event cannot be vetoed). @event{EVT_WIZARD_PAGE_CHANGING(id, func)} The page is being changed (this event can be vetoed). + @event{EVT_WIZARD_BEFORE_PAGE_CHANGED(id, func)} + Called after Next is clicked but before GetNext is called. Unlike EVT_WIZARD_CHANGING, + the handler for this function can change state that might affect the return value of + GetNext. This event can be vetoed. @event{EVT_WIZARD_PAGE_SHOWN(id, func)} The page was shown and laid out (this event cannot be vetoed). @event{EVT_WIZARD_CANCEL(id, func)} @@ -231,6 +235,10 @@ public: The page has just been changed (this event cannot be vetoed). @event{EVT_WIZARD_PAGE_CHANGING(id, func)} The page is being changed (this event can be vetoed). + @event{EVT_WIZARD_BEFORE_PAGE_CHANGED(id, func)} + Called after Next is clicked but before GetNext is called. Unlike EVT_WIZARD_CHANGING, + the handler for this function can change state that might affect the return value of + GetNext. This event can be vetoed. @event{EVT_WIZARD_PAGE_SHOWN(id, func)} The page was shown and laid out (this event cannot be vetoed). @event{EVT_WIZARD_CANCEL(id, func)} diff --git a/src/generic/wizard.cpp b/src/generic/wizard.cpp index d8dbd11137..60d8fa754b 100644 --- a/src/generic/wizard.cpp +++ b/src/generic/wizard.cpp @@ -83,6 +83,7 @@ private: wxDEFINE_EVENT( wxEVT_WIZARD_PAGE_CHANGED, wxWizardEvent ); wxDEFINE_EVENT( wxEVT_WIZARD_PAGE_CHANGING, wxWizardEvent ); +wxDEFINE_EVENT( wxEVT_WIZARD_BEFORE_PAGE_CHANGED, wxWizardEvent ); wxDEFINE_EVENT( wxEVT_WIZARD_CANCEL, wxWizardEvent ); wxDEFINE_EVENT( wxEVT_WIZARD_FINISHED, wxWizardEvent ); wxDEFINE_EVENT( wxEVT_WIZARD_HELP, wxWizardEvent ); @@ -792,6 +793,13 @@ void wxWizard::OnBackOrNext(wxCommandEvent& event) bool forward = event.GetEventObject() == m_btnNext; + // Give the application a chance to set state which may influence GetNext()/GetPrev() + wxWizardEvent eventPreChanged(wxEVT_WIZARD_BEFORE_PAGE_CHANGED, GetId(), forward, m_page); + (void)m_page->GetEventHandler()->ProcessEvent(eventPreChanged); + + if (!eventPreChanged.IsAllowed()) + return; + wxWizardPage *page; if ( forward ) { -- 2.45.2