#ifndef _WX_DIALOG_H_BASE_
#define _WX_DIALOG_H_BASE_
-#include "wx/defs.h"
#include "wx/toplevel.h"
+#include "wx/containr.h"
class WXDLLIMPEXP_FWD_CORE wxSizer;
class WXDLLIMPEXP_FWD_CORE wxStdDialogButtonSizer;
extern WXDLLIMPEXP_DATA_CORE(const char) wxDialogNameStr[];
-class WXDLLIMPEXP_CORE wxDialogBase : public wxTopLevelWindow
+class WXDLLIMPEXP_CORE wxDialogBase : public wxNavigationEnabled<wxTopLevelWindow>
{
public:
wxDialogBase();
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; }
#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_