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;
}
{
style |= wxBK_LEFT;
}
+ style |= wxTAB_TRAVERSAL;
// no border for this control, it doesn't look nice together with the tree
style &= ~wxBORDER_MASK;
else // page change vetoed
{
// tree selection might have already had changed
- tree->SelectItem(DoInternalGetPage(oldSel));
+ if ( oldSel != wxNOT_FOUND )
+ tree->SelectItem(DoInternalGetPage(oldSel));
}
return oldSel;
// 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;
- if ( wxRect(tree->GetSize()).Inside(treePt) )
+ // 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()).Contains(treePt) )
{
int flagsTree;
wxTreeItemId id = tree->HitTest(treePt, flagsTree);
{
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().Contains( pt ) )
+ *flags |= wxBK_HITTEST_ONPAGE;
}
return pagePos;