]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/dialog.h
Revert "Make wxMSW stack walking methods work with Unicode identifiers."
[wxWidgets.git] / include / wx / dialog.h
index bf9d71646acc39c2b7af35587705d86aa119d39e..e32cabb018e97a24b1249abb1fdfbb3b249e0944 100644 (file)
@@ -4,7 +4,6 @@
 // Author:      Vadim Zeitlin
 // Modified by:
 // Created:     29.06.99
-// RCS-ID:      $Id$
 // Copyright:   (c) Vadim Zeitlin
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
@@ -12,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;
@@ -65,10 +64,10 @@ enum wxDialogModality
 
 extern WXDLLIMPEXP_DATA_CORE(const char) wxDialogNameStr[];
 
-class WXDLLIMPEXP_CORE wxDialogBase : public wxTopLevelWindow
+class WXDLLIMPEXP_CORE wxDialogBase : public wxNavigationEnabled<wxTopLevelWindow>
 {
 public:
-    wxDialogBase() { Init(); }
+    wxDialogBase();
     virtual ~wxDialogBase() { }
 
     // define public wxDialog methods to be implemented by the derived classes
@@ -80,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; }
@@ -242,9 +246,6 @@ protected:
     static bool                         sm_layoutAdaptation;
 
 private:
-    // common part of all ctors
-    void Init();
-
     // helper of GetParentForModalDialog(): returns the passed in window if it
     // can be used as our parent or NULL if it can't
     wxWindow *CheckIfCanBeUsedAsParent(wxWindow *parent) const;
@@ -350,9 +351,7 @@ public:
 #if defined(__WXUNIVERSAL__) && !defined(__WXMICROWIN__)
     #include "wx/univ/dialog.h"
 #else
-    #if defined(__WXPALMOS__)
-        #include "wx/palmos/dialog.h"
-    #elif defined(__WXMSW__)
+    #if defined(__WXMSW__)
         #include "wx/msw/dialog.h"
     #elif defined(__WXMOTIF__)
         #include "wx/motif/dialog.h"
@@ -397,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_