]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/dialog.h
Partial fix for #15196: wxRichTextCell caret issues (dghart)
[wxWidgets.git] / include / wx / dialog.h
index 49454a1ef746fb424cc85778b42e43debf0fe222..e32cabb018e97a24b1249abb1fdfbb3b249e0944 100644 (file)
@@ -11,8 +11,8 @@
 #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;
@@ -64,7 +64,7 @@ enum wxDialogModality
 
 extern WXDLLIMPEXP_DATA_CORE(const char) wxDialogNameStr[];
 
-class WXDLLIMPEXP_CORE wxDialogBase : public wxTopLevelWindow
+class WXDLLIMPEXP_CORE wxDialogBase : public wxNavigationEnabled<wxTopLevelWindow>
 {
 public:
     wxDialogBase();
@@ -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_