]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/containr.h
wxArray<T> macros have been changed to fix runtime problems under 64 bit
[wxWidgets.git] / include / wx / containr.h
index ca7042e684a38e81bb367aca81581f61696153be..7139ef424272c900d4cc4498f387c6a32adb9ae7 100644 (file)
 #define _WX_CONTAINR_H_
 
 #ifdef __GNUG__
 #define _WX_CONTAINR_H_
 
 #ifdef __GNUG__
-    #pragma implementation "containr.h"
+    #pragma interface "containr.h"
 #endif
 
 class WXDLLEXPORT wxFocusEvent;
 class WXDLLEXPORT wxNavigationKeyEvent;
 class WXDLLEXPORT wxWindow;
 #endif
 
 class WXDLLEXPORT wxFocusEvent;
 class WXDLLEXPORT wxNavigationKeyEvent;
 class WXDLLEXPORT wxWindow;
+class WXDLLEXPORT wxWindowBase;
 
 /*
    Implementation note: wxControlContainer is not a real mix-in but rather
 
 /*
    Implementation note: wxControlContainer is not a real mix-in but rather
@@ -38,21 +39,26 @@ class WXDLLEXPORT wxControlContainer
 {
 public:
     // ctors and such
 {
 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; }
 
     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);
 
     // 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
 
 protected:
     // set the focus to the child which had it the last time
@@ -78,13 +84,17 @@ extern bool wxSetFocusToChild(wxWindow *win, wxWindow **child);
 
 // declare the methods to be forwarded
 #define WX_DECLARE_CONTROL_CONTAINER() \
 
 // 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; \
     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) \
 
 // implement the event table entries for wxControlContainer
 #define WX_EVENT_TABLE_CONTROL_CONTAINER(classname) \
@@ -93,42 +103,43 @@ extern bool wxSetFocusToChild(wxWindow *win, wxWindow **child);
     EVT_NAVIGATION_KEY(classname::OnNavigationKey)
 
 // implement the methods forwarding to the wxControlContainer
     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) \
 { \
 wxWindow *classname::SetDefaultItem(wxWindow *child) \
 { \
-    return container->SetDefaultItem(child); \
+    return m_container.SetDefaultItem(child); \
 } \
  \
 wxWindow *classname::GetDefaultItem() const \
 { \
 } \
  \
 wxWindow *classname::GetDefaultItem() const \
 { \
-    return container->GetDefaultItem(); \
+    return m_container.GetDefaultItem(); \
 } \
  \
 void classname::OnNavigationKey( wxNavigationKeyEvent& event ) \
 { \
 } \
  \
 void classname::OnNavigationKey( wxNavigationKeyEvent& event ) \
 { \
-    container->HandleOnNavigationKey(event); \
+    m_container.HandleOnNavigationKey(event); \
 } \
  \
 void classname::RemoveChild(wxWindowBase *child) \
 { \
 } \
  \
 void classname::RemoveChild(wxWindowBase *child) \
 { \
-    container->HandleOnWindowDestroy(child); \
+    m_container.HandleOnWindowDestroy(child); \
  \
     wxWindow::RemoveChild(child); \
 } \
  \
 void classname::SetFocus() \
 { \
  \
     wxWindow::RemoveChild(child); \
 } \
  \
 void classname::SetFocus() \
 { \
-    container->DoSetFocus(); \
+    if ( !m_container.DoSetFocus() ) \
+        wxWindow::SetFocus(); \
 } \
  \
 void classname::OnChildFocus(wxChildFocusEvent& event) \
 { \
 } \
  \
 void classname::OnChildFocus(wxChildFocusEvent& event) \
 { \
-    container->SetLastFocus(event.GetWindow()); \
+    m_container.SetLastFocus(event.GetWindow()); \
 } \
  \
 void classname::OnFocus(wxFocusEvent& event) \
 { \
 } \
  \
 void classname::OnFocus(wxFocusEvent& event) \
 { \
-    container->HandleOnFocus(event); \
+    m_container.HandleOnFocus(event); \
 }
 
 
 }