class WXDLLEXPORT wxFocusEvent;
class WXDLLEXPORT wxNavigationKeyEvent;
class WXDLLEXPORT wxWindow;
+class WXDLLEXPORT wxWindowBase;
/*
Implementation note: wxControlContainer is not a real mix-in but rather
{
public:
// ctors and such
- wxControlContainer(wxWindow *winParent);
+ wxControlContainer(wxWindow *winParent = NULL);
+ void SetContainerWindow(wxWindow *winParent) { m_winParent = winParent; }
+ // default item access
wxWindow *GetDefaultItem() const { return m_winDefault; }
wxWindow *SetDefaultItem(wxWindow *win)
{ wxWindow *winOld = m_winDefault; m_winDefault = win; return winOld; }
- void SetLastFocus(wxWindow *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()
- void DoSetFocus();
+ // should be called from SetFocus(), returns FALSE if we did nothing with
+ // the focus and the default processing should take place
+ bool DoSetFocus();
+
+ // 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
// declare the methods to be forwarded
#define WX_DECLARE_CONTROL_CONTAINER() \
+public: \
void OnNavigationKey(wxNavigationKeyEvent& event); \
void OnFocus(wxFocusEvent& event); \
virtual void OnChildFocus(wxChildFocusEvent& event); \
virtual void SetFocus(); \
virtual void RemoveChild(wxWindowBase *child); \
virtual wxWindow *GetDefaultItem() const; \
- virtual wxWindow *SetDefaultItem(wxWindow *child) \
+ virtual wxWindow *SetDefaultItem(wxWindow *child); \
+\
+protected: \
+ wxControlContainer m_container
// implement the event table entries for wxControlContainer
#define WX_EVENT_TABLE_CONTROL_CONTAINER(classname) \
EVT_NAVIGATION_KEY(classname::OnNavigationKey)
// implement the methods forwarding to the wxControlContainer
-#define WX_DELEGATE_TO_CONTROL_CONTAINER(classname, container) \
+#define WX_DELEGATE_TO_CONTROL_CONTAINER(classname) \
wxWindow *classname::SetDefaultItem(wxWindow *child) \
{ \
- return container->SetDefaultItem(child); \
+ return m_container.SetDefaultItem(child); \
} \
\
wxWindow *classname::GetDefaultItem() const \
{ \
- return container->GetDefaultItem(); \
+ return m_container.GetDefaultItem(); \
} \
\
void classname::OnNavigationKey( wxNavigationKeyEvent& event ) \
{ \
- container->HandleOnNavigationKey(event); \
+ m_container.HandleOnNavigationKey(event); \
} \
\
void classname::RemoveChild(wxWindowBase *child) \
{ \
- container->HandleOnWindowDestroy(child); \
+ m_container.HandleOnWindowDestroy(child); \
\
wxWindow::RemoveChild(child); \
} \
\
void classname::SetFocus() \
{ \
- container->DoSetFocus(); \
+ if ( !m_container.DoSetFocus() ) \
+ wxWindow::SetFocus(); \
} \
\
void classname::OnChildFocus(wxChildFocusEvent& event) \
{ \
- container->SetLastFocus(event.GetWindow()); \
+ m_container.SetLastFocus(event.GetWindow()); \
} \
\
void classname::OnFocus(wxFocusEvent& event) \
{ \
- container->HandleOnFocus(event); \
+ m_container.HandleOnFocus(event); \
}