X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/af49c4b8a2d3553e733e71c7dd3911881f4c1a2a..95a4630380511f5e747b1465bf4834e5fac3d515:/include/wx/containr.h diff --git a/include/wx/containr.h b/include/wx/containr.h index 234161da03..1bf91cfef5 100644 --- a/include/wx/containr.h +++ b/include/wx/containr.h @@ -13,10 +13,6 @@ #ifndef _WX_CONTAINR_H_ #define _WX_CONTAINR_H_ -#if defined(__GNUG__) && !defined(__APPLE__) - #pragma interface "containr.h" -#endif - class WXDLLEXPORT wxFocusEvent; class WXDLLEXPORT wxNavigationKeyEvent; class WXDLLEXPORT wxWindow; @@ -42,33 +38,18 @@ public: wxControlContainer(wxWindow *winParent = NULL); void SetContainerWindow(wxWindow *winParent) { m_winParent = winParent; } - // default item access: we have a permanent default item which is the one - // set by the user code but we may also have a temporary default item which - // would be chosen if the user pressed "Enter" now but the default action - // reverts to the "permanent" default as soon as this temporary default - // item lsoes focus - - // get the default item, temporary or permanent - wxWindow *GetDefaultItem() const - { return m_winTmpDefault ? m_winTmpDefault : m_winDefault; } - - // set the permanent default item, return its old value - wxWindow *SetDefaultItem(wxWindow *win) - { wxWindow *winOld = m_winDefault; m_winDefault = win; return winOld; } - - // set a temporary default item, SetTmpDefaultItem(NULL) should be called - // soon after a call to SetTmpDefaultItem(window) - void SetTmpDefaultItem(wxWindow *win) { m_winTmpDefault = win; } - // the methods to be called from the window event handlers void HandleOnNavigationKey(wxNavigationKeyEvent& event); void HandleOnFocus(wxFocusEvent& event); void HandleOnWindowDestroy(wxWindowBase *child); - // should be called from SetFocus(), returns FALSE if we did nothing with + // should be called from SetFocus(), returns false if we did nothing with // the focus and the default processing should take place bool DoSetFocus(); + // can our child get the focus? + bool AcceptsFocus() const; + // called from OnChildFocus() handler, i.e. when one of our (grand) // children gets the focus void SetLastFocus(wxWindow *win); @@ -83,16 +64,13 @@ protected: // the child which had the focus last time this panel was activated wxWindow *m_winLastFocused; - // a default window (usually a button) or NULL - wxWindow *m_winDefault; - - // a temporary override of m_winDefault, use the latter if NULL - wxWindow *m_winTmpDefault; + // a guard against infinite recursion + bool m_inSetFocus; DECLARE_NO_COPY_CLASS(wxControlContainer) }; -// this function is for wxWindows internal use only +// this function is for wxWidgets internal use only extern bool wxSetFocusToChild(wxWindow *win, wxWindow **child); // ---------------------------------------------------------------------------- @@ -107,10 +85,9 @@ public: \ void OnFocus(wxFocusEvent& event); \ virtual void OnChildFocus(wxChildFocusEvent& event); \ virtual void SetFocus(); \ + virtual void SetFocusIgnoringChildren(); \ virtual void RemoveChild(wxWindowBase *child); \ - virtual wxWindow *GetDefaultItem() const; \ - virtual wxWindow *SetDefaultItem(wxWindow *child); \ - virtual void SetTmpDefaultItem(wxWindow *win); \ + virtual bool AcceptsFocus() const; \ \ protected: \ wxControlContainer m_container @@ -122,22 +99,7 @@ protected: \ EVT_NAVIGATION_KEY(classname::OnNavigationKey) // implement the methods forwarding to the wxControlContainer -#define WX_DELEGATE_TO_CONTROL_CONTAINER(classname) \ -wxWindow *classname::SetDefaultItem(wxWindow *child) \ -{ \ - return m_container.SetDefaultItem(child); \ -} \ - \ -void classname::SetTmpDefaultItem(wxWindow *child) \ -{ \ - m_container.SetTmpDefaultItem(child); \ -} \ - \ -wxWindow *classname::GetDefaultItem() const \ -{ \ - return m_container.GetDefaultItem(); \ -} \ - \ +#define WX_DELEGATE_TO_CONTROL_CONTAINER(classname, basename) \ void classname::OnNavigationKey( wxNavigationKeyEvent& event ) \ { \ m_container.HandleOnNavigationKey(event); \ @@ -147,13 +109,18 @@ void classname::RemoveChild(wxWindowBase *child) \ { \ m_container.HandleOnWindowDestroy(child); \ \ - wxWindow::RemoveChild(child); \ + basename::RemoveChild(child); \ } \ \ void classname::SetFocus() \ { \ if ( !m_container.DoSetFocus() ) \ - wxWindow::SetFocus(); \ + basename::SetFocus(); \ +} \ + \ +void classname::SetFocusIgnoringChildren() \ +{ \ + basename::SetFocus(); \ } \ \ void classname::OnChildFocus(wxChildFocusEvent& event) \ @@ -164,6 +131,10 @@ void classname::OnChildFocus(wxChildFocusEvent& event) \ void classname::OnFocus(wxFocusEvent& event) \ { \ m_container.HandleOnFocus(event); \ +} \ +bool classname::AcceptsFocus() const \ +{ \ + return m_container.AcceptsFocus(); \ }