| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | 
							- ///////////////////////////////////////////////////////////////////////////////
 
- // Name:        wx/modalhook.h
 
- // Purpose:     Allows to hook into showing modal dialogs.
 
- // Author:      Vadim Zeitlin
 
- // Created:     2013-05-19
 
- // Copyright:   (c) 2013 Vadim Zeitlin <vadim@wxwidgets.org>
 
- // Licence:     wxWindows licence
 
- ///////////////////////////////////////////////////////////////////////////////
 
- #ifndef _WX_MODALHOOK_H_
 
- #define _WX_MODALHOOK_H_
 
- #include "wx/vector.h"
 
- class WXDLLIMPEXP_FWD_CORE wxDialog;
 
- // ----------------------------------------------------------------------------
 
- // Class allowing to be notified about any modal dialog calls.
 
- // ----------------------------------------------------------------------------
 
- // To be notified about entering and exiting modal dialogs and possibly to
 
- // replace them with something else (e.g. just return a predefined value for
 
- // testing), define an object of this class, override its Enter() and
 
- // possibly Exit() methods and call Register() on it.
 
- class WXDLLIMPEXP_CORE wxModalDialogHook
 
- {
 
- public:
 
-     // Default ctor doesn't do anything, call Register() to activate the hook.
 
-     wxModalDialogHook() { }
 
-     // Dtor unregisters the hook if it had been registered.
 
-     virtual ~wxModalDialogHook() { DoUnregister(); }
 
-     // Register this hook as being active, i.e. its Enter() and Exit() methods
 
-     // will be called.
 
-     //
 
-     // Notice that the order of registration matters: the last hook registered
 
-     // is called first, and if its Enter() returns something != wxID_NONE, the
 
-     // subsequent hooks are skipped.
 
-     void Register();
 
-     // Unregister this hook. Notice that is done automatically from the dtor.
 
-     void Unregister();
 
-     // Called from wxWidgets code before showing any modal dialogs and calls
 
-     // Enter() for every registered hook.
 
-     static int CallEnter(wxDialog* dialog);
 
-     // Called from wxWidgets code after dismissing the dialog and calls Exit()
 
-     // for every registered hook.
 
-     static void CallExit(wxDialog* dialog);
 
- protected:
 
-     // Called by wxWidgets before showing any modal dialogs, override this to
 
-     // be notified about this and return anything but wxID_NONE to skip showing
 
-     // the modal dialog entirely and just return the specified result.
 
-     virtual int Enter(wxDialog* dialog) = 0;
 
-     // Called by wxWidgets after dismissing the modal dialog. Notice that it
 
-     // won't be called if Enter() hadn't been.
 
-     virtual void Exit(wxDialog* WXUNUSED(dialog)) { }
 
- private:
 
-     // Unregister the given hook, return true if it was done or false if the
 
-     // hook wasn't found.
 
-     bool DoUnregister();
 
-     // All the hooks in reverse registration order (i.e. in call order).
 
-     typedef wxVector<wxModalDialogHook*> Hooks;
 
-     static Hooks ms_hooks;
 
-     wxDECLARE_NO_COPY_CLASS(wxModalDialogHook);
 
- };
 
- // Helper object used by WX_MODAL_DIALOG_HOOK below to ensure that CallExit()
 
- // is called on scope exit.
 
- class wxModalDialogHookExitGuard
 
- {
 
- public:
 
-     wxEXPLICIT wxModalDialogHookExitGuard(wxDialog* dialog)
 
-         : m_dialog(dialog)
 
-     {
 
-     }
 
-     ~wxModalDialogHookExitGuard()
 
-     {
 
-         wxModalDialogHook::CallExit(m_dialog);
 
-     }
 
- private:
 
-     wxDialog* const m_dialog;
 
-     wxDECLARE_NO_COPY_CLASS(wxModalDialogHookExitGuard);
 
- };
 
- // This macro needs to be used at the top of every implementation of
 
- // ShowModal() in order for wxModalDialogHook to work.
 
- #define WX_HOOK_MODAL_DIALOG()                                                \
 
-     const int modalDialogHookRC = wxModalDialogHook::CallEnter(this);         \
 
-     if ( modalDialogHookRC != wxID_NONE )                                     \
 
-         return modalDialogHookRC;                                             \
 
-     wxModalDialogHookExitGuard modalDialogHookExit(this)
 
- #endif // _WX_MODALHOOK_H_
 
 
  |