#ifndef _WX_CONTAINR_H_
#define _WX_CONTAINR_H_
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma interface "containr.h"
#endif
{
public:
// ctors and such
- wxControlContainer(wxWindow *winParent);
+ wxControlContainer(wxWindow *winParent = NULL);
+ void SetContainerWindow(wxWindow *winParent) { m_winParent = winParent; }
- wxWindow *GetDefaultItem() const { return m_winDefault; }
+ // 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; }
- void SetLastFocus(wxWindow *win);
+ // 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);
// 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
+ // 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
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
return m_container.SetDefaultItem(child); \
} \
\
+void classname::SetTmpDefaultItem(wxWindow *child) \
+{ \
+ m_container.SetTmpDefaultItem(child); \
+} \
+ \
wxWindow *classname::GetDefaultItem() const \
{ \
return m_container.GetDefaultItem(); \
void classname::OnFocus(wxFocusEvent& event) \
{ \
m_container.HandleOnFocus(event); \
+} \
+bool classname::AcceptsFocus() const \
+{ \
+ return m_container.AcceptsFocus(); \
}