#ifndef _WX_CONTAINR_H_
#define _WX_CONTAINR_H_
-#ifdef __GNUG__
- #pragma interface "containr.h"
-#endif
-
class WXDLLEXPORT wxFocusEvent;
class WXDLLEXPORT wxNavigationKeyEvent;
class WXDLLEXPORT wxWindow;
{
public:
// ctors and such
- wxControlContainer(wxWindow *winParent);
-
- wxWindow *GetDefaultItem() const { return m_winDefault; }
- wxWindow *SetDefaultItem(wxWindow *win)
- { wxWindow *winOld = m_winDefault; m_winDefault = win; return winOld; }
-
- void SetLastFocus(wxWindow *win);
+ wxControlContainer(wxWindow *winParent = NULL);
+ void SetContainerWindow(wxWindow *winParent) { m_winParent = winParent; }
// 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);
+
protected:
// set the focus to the child which had it the last time
bool SetFocusToChild();
// the child which had the focus last time this panel was activated
wxWindow *m_winLastFocused;
- // a default window (e.g. a button) or NULL
- wxWindow *m_winDefault;
+ // 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);
// ----------------------------------------------------------------------------
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 bool AcceptsFocus() const; \
\
protected: \
wxControlContainer m_container
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); \
-} \
- \
-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); \
{ \
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) \
void classname::OnFocus(wxFocusEvent& event) \
{ \
m_container.HandleOnFocus(event); \
+} \
+bool classname::AcceptsFocus() const \
+{ \
+ return m_container.AcceptsFocus(); \
}