]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/containr.h
made font a non-pointer; code cleanup
[wxWidgets.git] / include / wx / containr.h
index b74b2c2a8feb212a65ff5e0e353ae60392838936..99049e718c9ed9f018739fa8935d3f062417c30e 100644 (file)
@@ -13,7 +13,7 @@
 #ifndef _WX_CONTAINR_H_
 #define _WX_CONTAINR_H_
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
     #pragma interface "containr.h"
 #endif
 
@@ -37,18 +37,29 @@ class WXDLLEXPORT wxWindowBase;
 
 class WXDLLEXPORT wxControlContainer
 {
-    DECLARE_NO_COPY_CLASS(wxControlContainer)
-        
 public:
     // ctors and such
     wxControlContainer(wxWindow *winParent = NULL);
     void SetContainerWindow(wxWindow *winParent) { m_winParent = winParent; }
 
-    // default item access
-    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; }
 
+    // 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);
@@ -58,6 +69,9 @@ public:
     // 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);
@@ -72,8 +86,16 @@ protected:
     // 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
@@ -94,6 +116,8 @@ public: \
     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
@@ -111,6 +135,11 @@ 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(); \
@@ -142,6 +171,10 @@ void classname::OnChildFocus(wxChildFocusEvent& event) \
 void classname::OnFocus(wxFocusEvent& event) \
 { \
     m_container.HandleOnFocus(event); \
+} \
+bool classname::AcceptsFocus() const \
+{ \
+    return m_container.AcceptsFocus(); \
 }