Provide a clean, public and documented way to implement proper TAB navigation for subwindows of a composite control: instead of using various ugly and never documented WX_XXX_CONTROL_CONTAINER macros it is now enough to simply inherit from wxNavigationEnabled<BaseClass> to do it. No real changes in the code as the new class is not used anywhere yet. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68363 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			69 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /////////////////////////////////////////////////////////////////////////////
 | |
| // Name:        wx/containr.h
 | |
| // Purpose:     documentation of wxNavigationEnabled<>
 | |
| // Author:      Vadim Zeitlin
 | |
| // Created:     2011-07-23
 | |
| // RCS-ID:      $Id$
 | |
| // Copyright:   (c) 2011 Vadim Zeitlin <vadim@wxwidgets.org>
 | |
| // Licence:     wxWindows licence
 | |
| /////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| /**
 | |
|     A helper class implementing TAB navigation among the window children.
 | |
| 
 | |
|     This class contains the functionality needed to correctly implement TAB
 | |
|     navigation among the children of the window. Its exact contents is not
 | |
|     important and is intentionally not documented as the only way to use this
 | |
|     class is to inherit from it instead of inheriting from the usual base class
 | |
|     directly. For example, if some class needs to inherit from wxControl but
 | |
|     contains multiple sub-windows and needs to support keyboard navigation, it
 | |
|     is enough to declare it in the following way:
 | |
|     @code
 | |
|         class MyControlWithSubChildren :
 | |
|             public wxNavigationEnabled<wxControl>
 | |
|         {
 | |
|         public:
 | |
|             // Default constructor is implemented in the same way as always.
 | |
|             MyControlWithSubChildren() { }
 | |
| 
 | |
|             // Non-default constructor can't use wxControl ctor any more as
 | |
|             // wxControl is not its direct base class, but it can use Create().
 | |
|             MyControlWithSubChildren(wxWindow *parent, wxWindowID winid)
 | |
|             {
 | |
|                 wxControl::Create(parent, winid);
 | |
| 
 | |
|                 // More creation code...
 | |
|             }
 | |
| 
 | |
|             // Everything else as usual ...
 | |
|         };
 | |
|     @endcode
 | |
| 
 | |
|     @library{wxcore}
 | |
| 
 | |
|     @since 2.9.3
 | |
|  */
 | |
| template <class W>
 | |
| class wxNavigationEnabled : public W
 | |
| {
 | |
| public:
 | |
|     /// The name of the real base window class that this class derives from.
 | |
|     typedef W BaseWindowClass;
 | |
| 
 | |
|     /**
 | |
|         Default constructor.
 | |
| 
 | |
|         This class provides only the default constructor as it's not possible,
 | |
|         in general, to provide all the constructors of the real base class
 | |
|         BaseWindowClass.
 | |
| 
 | |
|         This is however not usually a problem for wxWindow-derived classes as,
 | |
|         by convention, they always define a Create() method such that calling
 | |
|         it on an object initialized using the default constructor is equivalent
 | |
|         to using a non-default constructor directly. So the classes inheriting
 | |
|         from wxNavigationEnabled<W> should simply call W::Create() in their
 | |
|         constructors.
 | |
|      */
 | |
|     wxNavigationEnabled();
 | |
| };
 |