]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/treebkg.cpp
updates from Adrián González Alba
[wxWidgets.git] / src / generic / treebkg.cpp
index 57593a5bb1a778fc21822932ecca2d6d7ac4abe5..87280396482e2c8f989763485732f8533a5f5f41 100644 (file)
@@ -60,18 +60,24 @@ BEGIN_EVENT_TABLE(wxTreebook, wxBookCtrlBase)
     EVT_TREE_SEL_CHANGED   (wxID_TREEBOOKTREEVIEW, wxTreebook::OnTreeSelectionChange)
     EVT_TREE_ITEM_EXPANDED (wxID_TREEBOOKTREEVIEW, wxTreebook::OnTreeNodeExpandedCollapsed)
     EVT_TREE_ITEM_COLLAPSED(wxID_TREEBOOKTREEVIEW, wxTreebook::OnTreeNodeExpandedCollapsed)
+
+    WX_EVENT_TABLE_CONTROL_CONTAINER(wxTreebook)
 END_EVENT_TABLE()
 
 // ============================================================================
 // wxTreebook implementation
 // ============================================================================
 
+WX_DELEGATE_TO_CONTROL_CONTAINER(wxTreebook, wxControl)
+
 // ----------------------------------------------------------------------------
 // wxTreebook creation
 // ----------------------------------------------------------------------------
 
 void wxTreebook::Init()
 {
+    m_container.SetContainerWindow(this);
+
     m_selection =
     m_actualSelection = wxNOT_FOUND;
 }
@@ -89,6 +95,7 @@ wxTreebook::Create(wxWindow *parent,
     {
         style |= wxBK_LEFT;
     }
+    style |= wxTAB_TRAVERSAL;
 
     // no border for this control, it doesn't look nice together with the tree
     style &= ~wxBORDER_MASK;
@@ -723,13 +730,18 @@ void wxTreebook::OnTreeNodeExpandedCollapsed(wxTreeEvent & event)
 // wxTreebook geometry management
 // ----------------------------------------------------------------------------
 
-int wxTreebook::HitTest(wxPoint const & pt, long * WXUNUSED(flags)) const
+int wxTreebook::HitTest(wxPoint const & pt, long * flags) const
 {
     int pagePos = wxNOT_FOUND;
 
-    wxTreeCtrl * const tree = GetTreeCtrl();
-    const wxPoint treePt = ClientToScreen(tree->ScreenToClient(pt));
+    if ( flags )
+        *flags = wxBK_HITTEST_NOWHERE;
 
+    // convert from wxTreebook coorindates to wxTreeCtrl ones
+    const wxTreeCtrl * const tree = GetTreeCtrl();
+    const wxPoint treePt = tree->ScreenToClient(ClientToScreen(pt));
+
+    // is it over the tree?
     if ( wxRect(tree->GetSize()).Inside(treePt) )
     {
         int flagsTree;
@@ -739,6 +751,25 @@ int wxTreebook::HitTest(wxPoint const & pt, long * WXUNUSED(flags)) const
         {
             pagePos = DoInternalFindPageById(id);
         }
+
+        if ( flags )
+        {
+            if ( pagePos != wxNOT_FOUND )
+                *flags = 0;
+
+            if ( flagsTree & (wxTREE_HITTEST_ONITEMBUTTON |
+                              wxTREE_HITTEST_ONITEMICON |
+                              wxTREE_HITTEST_ONITEMSTATEICON) )
+                *flags |= wxBK_HITTEST_ONICON;
+
+            if ( flagsTree & wxTREE_HITTEST_ONITEMLABEL )
+                *flags |= wxBK_HITTEST_ONLABEL;
+        }
+    }
+    else // not over the tree
+    {
+        if ( flags && GetPageRect().Inside( pt ) )
+            *flags |= wxBK_HITTEST_ONPAGE;
     }
 
     return pagePos;