X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a7b7500c4f51834f2cf69d05e6a95e9048a8faf5..438959cca892a7651634cc3a7aad4819ac49b23c:/include/wx/msw/evtloop.h diff --git a/include/wx/msw/evtloop.h b/include/wx/msw/evtloop.h index eec606477b..e7afd91bab 100644 --- a/include/wx/msw/evtloop.h +++ b/include/wx/msw/evtloop.h @@ -1,6 +1,6 @@ /////////////////////////////////////////////////////////////////////////////// // Name: wx/msw/evtloop.h -// Purpose: wxEventLoop class for MSW +// Purpose: wxEventLoop class for wxMSW port // Author: Vadim Zeitlin // Modified by: // Created: 2004-07-31 @@ -12,62 +12,64 @@ #ifndef _WX_MSW_EVTLOOP_H_ #define _WX_MSW_EVTLOOP_H_ +#include "wx/dynarray.h" +#include "wx/msw/wrapwin.h" +#include "wx/window.h" +#include "wx/msw/evtloopconsole.h" // for wxMSWEventLoopBase + // ---------------------------------------------------------------------------- // wxEventLoop // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxEventLoop : public wxEventLoopBase +WX_DECLARE_EXPORTED_OBJARRAY(MSG, wxMSGArray); + +class WXDLLIMPEXP_CORE wxGUIEventLoop : public wxMSWEventLoopBase { public: - wxEventLoop(); - - // implement base class pure virtuals - virtual int Run(); - virtual void Exit(int rc = 0); - virtual bool Pending() const; - virtual bool Dispatch(); - virtual bool IsRunning() const; + wxGUIEventLoop() { } - // MSW-specific methods - // -------------------- + // process a single message: calls PreProcessMessage() before dispatching + // it + virtual void ProcessMessage(WXMSG *msg); // preprocess a message, return true if processed (i.e. no further // dispatching required) virtual bool PreProcessMessage(WXMSG *msg); - // process a single message - virtual void ProcessMessage(WXMSG *msg); - // set the critical window: this is the window such that all the events // except those to this window (and its children) stop to be processed // (typical examples: assert or crash report dialog) // // calling this function with NULL argument restores the normal event // handling - static void SetCriticalWindow(wxWindow *win) { ms_winCritical = win; } + static void SetCriticalWindow(wxWindowMSW *win) { ms_winCritical = win; } // return true if there is no critical window or if this window is [a child // of] the critical one - static bool AllowProcessing(wxWindow *win) + static bool AllowProcessing(wxWindowMSW *win) { return !ms_winCritical || IsChildOfCriticalWindow(win); } + // override/implement base class virtuals + virtual bool Dispatch(); + virtual int DispatchTimeout(unsigned long timeout); + virtual void WakeUp(); + virtual bool YieldFor(long eventsToProcess); + protected: + virtual void OnNextIteration(); + +private: // check if the given window is a child of ms_winCritical (which must be // non NULL) - static bool IsChildOfCriticalWindow(wxWindow *win); + static bool IsChildOfCriticalWindow(wxWindowMSW *win); + // array of messages used for temporary storage by YieldFor() + wxMSGArray m_arrMSG; // critical window or NULL - static wxWindow *ms_winCritical; - - // the loop exit code - int m_exitcode; - - // should we exit the loop? - bool m_shouldExit; + static wxWindowMSW *ms_winCritical; }; #endif // _WX_MSW_EVTLOOP_H_ -