Add lambda-friendly wxDialog::ShowWindowModalThenDo().
Add a convenience ShowWindowModalThenDo() variant of ShowWindowModal() that takes a functor argument and calls it when the dialog is closed. This is, of course, particularly useful when the argument is a C++11 lambda, especially when having more than one window-modal dialog invoked from the same window, which can get messy quickly with all the wxEVT_WINDOW_MODAL_DIALOG_CLOSED handlers. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74775 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -79,6 +79,11 @@ public:
|
||||
virtual void ShowWindowModal () ;
|
||||
virtual void SendWindowModalDialogEvent ( wxEventType type );
|
||||
|
||||
#ifdef wxHAS_EVENT_BIND
|
||||
template<typename Functor>
|
||||
void ShowWindowModalThenDo(const Functor& onEndModal);
|
||||
#endif // wxHAS_EVENT_BIND
|
||||
|
||||
// Modal dialogs have a return code - usually the id of the last
|
||||
// pressed button
|
||||
void SetReturnCode(int returnCode) { m_returnCode = returnCode; }
|
||||
@@ -391,5 +396,40 @@ typedef void (wxEvtHandler::*wxWindowModalDialogEventFunction)(wxWindowModalDial
|
||||
#define EVT_WINDOW_MODAL_DIALOG_CLOSED(winid, func) \
|
||||
wx__DECLARE_EVT1(wxEVT_WINDOW_MODAL_DIALOG_CLOSED, winid, wxWindowModalDialogEventHandler(func))
|
||||
|
||||
#ifdef wxHAS_EVENT_BIND
|
||||
template<typename Functor>
|
||||
class wxWindowModalDialogEventFunctor
|
||||
{
|
||||
public:
|
||||
wxWindowModalDialogEventFunctor(const Functor& f)
|
||||
: m_f(f), m_wasCalled(false)
|
||||
{}
|
||||
|
||||
void operator()(wxWindowModalDialogEvent& event)
|
||||
{
|
||||
if ( m_wasCalled )
|
||||
{
|
||||
event.Skip();
|
||||
return;
|
||||
}
|
||||
|
||||
m_wasCalled = true;
|
||||
m_f(event.GetReturnCode());
|
||||
}
|
||||
|
||||
private:
|
||||
Functor m_f;
|
||||
bool m_wasCalled;
|
||||
};
|
||||
|
||||
template<typename Functor>
|
||||
void wxDialogBase::ShowWindowModalThenDo(const Functor& onEndModal)
|
||||
{
|
||||
Bind(wxEVT_WINDOW_MODAL_DIALOG_CLOSED,
|
||||
wxWindowModalDialogEventFunctor<Functor>(onEndModal));
|
||||
ShowWindowModal();
|
||||
};
|
||||
#endif // wxHAS_EVENT_BIND
|
||||
|
||||
#endif
|
||||
// _WX_DIALOG_H_BASE_
|
||||
|
Reference in New Issue
Block a user