Mostly replace ungrammatical "allows to do" with correct "allows doing". Closes https://github.com/wxWidgets/wxWidgets/pull/1183
		
			
				
	
	
		
			150 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /////////////////////////////////////////////////////////////////////////////
 | |
| // Name:        wx/modalhook.h
 | |
| // Purpose:     Public interface of wxModalDialogHook class.
 | |
| // Author:      Vadim Zeitlin
 | |
| // Copyright:   (c) 2013 Vadim Zeitlin <vadim@wxwidgets.org>
 | |
| // Licence:     wxWindows licence
 | |
| /////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| /**
 | |
|     Allows intercepting all modal dialog calls.
 | |
| 
 | |
|     This class can be used to hook into normal modal dialog handling for some
 | |
|     special needs. One of the most common use cases is for testing: as
 | |
|     automatic tests can't continue if a modal dialog is shown while they run,
 | |
|     this class can be used to avoid showing the modal dialogs during unattended
 | |
|     execution. wxModalDialogHook can also be used for disabling some background
 | |
|     operation while a modal dialog is shown.
 | |
| 
 | |
|     To install a modal dialog hook, you need to derive your own class from this
 | |
|     one and implement its pure virtual Enter() method. Then simply create an
 | |
|     object of your class and call Register() on it to start receiving calls to
 | |
|     your overridden Enter() (and possibly Exit()) methods:
 | |
|     @code
 | |
|         class MyModalDialogHook : public wxModalDialogHook
 | |
|         {
 | |
|         protected:
 | |
|             virtual int Enter(wxDialog* dialog)
 | |
|             {
 | |
|                 // Just for demonstration purposes, intercept all uses of
 | |
|                 // wxFileDialog. Notice that this doesn't provide any real
 | |
|                 // sandboxing, of course, the program can still read and write
 | |
|                 // files by not using wxFileDialog to ask the user for their
 | |
|                 // names.
 | |
|                 if ( wxDynamicCast(dialog, wxFileDialog) )
 | |
|                 {
 | |
|                     wxLogError("Access to file system disallowed.");
 | |
| 
 | |
|                     // Skip showing the file dialog entirely.
 | |
|                     return wxID_CANCEL;
 | |
|                 }
 | |
| 
 | |
|                 m_lastEnter = wxDateTime::Now();
 | |
| 
 | |
|                 // Allow the dialog to be shown as usual.
 | |
|                 return wxID_NONE;
 | |
|             }
 | |
| 
 | |
|             virtual void Exit(wxDialog* dialog)
 | |
|             {
 | |
|                 // Again, just for demonstration purposes, show how long did
 | |
|                 // the user take to dismiss the dialog. Notice that we
 | |
|                 // shouldn't use wxLogMessage() here as this would result in
 | |
|                 // another modal dialog call and hence infinite recursion. In
 | |
|                 // general, the hooks should be as unintrusive as possible.
 | |
|                 wxLogDebug("%s dialog took %s to be dismissed",
 | |
|                            dialog->GetClassInfo()->GetClassName(),
 | |
|                            (wxDateTime::Now() - m_lastEnter).Format());
 | |
|             }
 | |
|         };
 | |
| 
 | |
|         class MyApp : public wxApp
 | |
|         {
 | |
|         public:
 | |
|             virtual bool OnInit()
 | |
|             {
 | |
|                 ...
 | |
|                 m_myHook.Register();
 | |
|                 ...
 | |
|             }
 | |
| 
 | |
|         private:
 | |
|             MyModalDialogHook m_myHook;
 | |
|         };
 | |
|     @endcode
 | |
| 
 | |
|     @since 2.9.5
 | |
|  */
 | |
| class wxModalDialogHook
 | |
| {
 | |
| public:
 | |
|     /**
 | |
|         Default and trivial constructor.
 | |
| 
 | |
|         The constructor doesn't do anything, call Register() to make this hook
 | |
|         active.
 | |
|      */
 | |
|     wxModalDialogHook();
 | |
| 
 | |
|     /**
 | |
|         Destructor unregisters the hook if it's currently active.
 | |
|      */
 | |
|     virtual ~wxModalDialogHook();
 | |
| 
 | |
|     /**
 | |
|         Register this hook as being active.
 | |
| 
 | |
|         After registering the hook, its Enter() and Exit() methods will be
 | |
|         called whenever a modal dialog is shown.
 | |
| 
 | |
|         Notice that the order of registration matters: the last hook registered
 | |
|         is called first, and if its Enter() returns a value different from
 | |
|         ::wxID_NONE, the subsequent hooks are skipped.
 | |
| 
 | |
|         It is an error to register the same hook twice.
 | |
|      */
 | |
|     void Register();
 | |
| 
 | |
|     /**
 | |
|         Unregister this hook.
 | |
| 
 | |
|         Notice that is done automatically from the destructor, so usually
 | |
|         calling this method explicitly is unnecessary.
 | |
| 
 | |
|         The hook must be currently registered.
 | |
|      */
 | |
|     void Unregister();
 | |
| 
 | |
| protected:
 | |
|     /**
 | |
|         Called by wxWidgets before showing any modal dialogs.
 | |
| 
 | |
|         Override this to be notified whenever a modal dialog is about to be
 | |
|         shown.
 | |
| 
 | |
|         If the return value of this method is ::wxID_NONE, the dialog is shown
 | |
|         as usual and Exit() will be called when it is dismissed. If the return
 | |
|         value is anything else, the dialog is not shown at all and its
 | |
|         wxDialog::ShowModal() simply returns with the given result. In this
 | |
|         case, Exit() won't be called neither.
 | |
| 
 | |
|         @param dialog The dialog about to be shown, never @NULL.
 | |
|         @return wxID_NONE to continue with showing the dialog or anything else
 | |
|             to skip showing the dialog and just return this value from its
 | |
|             ShowModal().
 | |
|      */
 | |
|     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 called because
 | |
|         another modal hook, registered after this one, intercepted the dialog
 | |
|         or if our Enter() was called but returned a value different from
 | |
|         ::wxID_NONE.
 | |
| 
 | |
|         @param dialog The dialog that was shown and dismissed, never @NULL.
 | |
|      */
 | |
|     virtual void Exit(wxDialog* dialog);
 | |
| };
 |