]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/containr.h
implemented SetFocus
[wxWidgets.git] / include / wx / containr.h
index 234161da031e63fcb2740062af8f8cb7b813b392..1bf91cfef58c78a467d6b64473f36a3f7676599b 100644 (file)
 #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(); \
 }