#ifndef _WX_EVTLOOP_H_
#define _WX_EVTLOOP_H_
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma interface "evtloop.h"
#endif
+#include "wx/utils.h"
+
+class WXDLLEXPORT wxEventLoopImpl;
+
// ----------------------------------------------------------------------------
// wxEventLoop: a GUI event loop
// ----------------------------------------------------------------------------
// is the event loop running now?
virtual bool IsRunning() const;
-
+
// return currently active (running) event loop, may be NULL
static wxEventLoop *GetActive() { return ms_activeLoop; }
+ // set currently active (running) event loop
+ static void SetActive(wxEventLoop* loop) { ms_activeLoop = loop; }
+
protected:
- // the pointer to the port specific implementation class
- class WXDLLEXPORT wxEventLoopImpl *m_impl;
+ // this function should be called before the event loop terminates, whether
+ // this happens normally (because of Exit() call) or abnormally (because of
+ // an exception thrown from inside the loop)
+ virtual void OnExit() { }
+
+
// the pointer to currently active loop
static wxEventLoop *ms_activeLoop;
+
+ // the pointer to the port specific implementation class
+ wxEventLoopImpl *m_impl;
+
+ DECLARE_NO_COPY_CLASS(wxEventLoop)
+};
+
+// ----------------------------------------------------------------------------
+// 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;
};
#endif // _WX_EVTLOOP_H_