+
+ DECLARE_NO_COPY_CLASS(wxEventLoopBase)
+};
+
+// we're moving away from old m_impl wxEventLoop model as otherwise the user
+// code doesn't have access to platform-specific wxEventLoop methods and this
+// can sometimes be very useful (e.g. under MSW this is necessary for
+// integration with MFC) but currently this is done for MSW only, other ports
+// should follow a.s.a.p.
+#ifdef __WXMSW__
+ #include "wx/msw/evtloop.h"
+#else
+
+class WXDLLEXPORT wxEventLoopImpl;
+
+class WXDLLEXPORT wxEventLoop : public wxEventLoopBase
+{
+public:
+ wxEventLoop() { m_impl = NULL; }
+ virtual ~wxEventLoop();
+
+ virtual int Run();
+ virtual void Exit(int rc = 0);
+ virtual bool Pending() const;
+ virtual bool Dispatch();
+ virtual bool IsRunning() const { return GetActive() == this; }
+
+protected:
+ // the pointer to the port specific implementation class
+ wxEventLoopImpl *m_impl;
+
+ DECLARE_NO_COPY_CLASS(wxEventLoop)
+ };
+
+#endif // __WXMSW__/!__WXMSW__
+
+// ----------------------------------------------------------------------------
+// wxModalEventLoop
+// ----------------------------------------------------------------------------
+
+// this is a naive generic implementation which uses wxWindowDisabler to
+// implement modality, we will surely need platform-specific implementations
+// too, this generic implementation is here only temporarily to see how it
+// works
+class WXDLLEXPORT wxModalEventLoop : public wxEventLoop
+{
+public:
+ wxModalEventLoop(wxWindow *winModal)
+ {
+ m_windowDisabler = new wxWindowDisabler(winModal);
+ }
+
+protected:
+ virtual void OnExit()
+ {
+ delete m_windowDisabler;
+ m_windowDisabler = NULL;
+
+ wxEventLoop::OnExit();
+ }
+
+private:
+ wxWindowDisabler *m_windowDisabler;