added OnExit(); made event loop exception safe; added wxModalEvtLoop

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@23647 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2003-09-17 23:32:32 +00:00
parent efbfda9d66
commit 4300caa7a6
2 changed files with 91 additions and 19 deletions

View File

@@ -16,6 +16,8 @@
#pragma interface "evtloop.h"
#endif
class WXDLLEXPORT wxEventLoopImpl;
// ----------------------------------------------------------------------------
// wxEventLoop: a GUI event loop
// ----------------------------------------------------------------------------
@@ -51,12 +53,48 @@ public:
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_