]> 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 95e6b6f99eafbca8b6410b306c8a445290910827..e32cabb018e97a24b1249abb1fdfbb3b249e0944 100644 (file)
@@ -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_