virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const = 0;
// get/set size of area between book control area and page area
- inline unsigned int GetInternalBorder() const
- {
- return m_internalBorder;
- }
- void SetInternalBorder(unsigned int internalBorder)
- {
- m_internalBorder = internalBorder;
- }
+ unsigned int GetInternalBorder() const { return m_internalBorder; }
+ void SetInternalBorder(unsigned int border) { m_internalBorder = border; }
// Sets/gets the margin around the controller
void SetControlMargin(int margin) { m_controlMargin = margin; }
}
}
+ // hit test: returns which page is hit and, optionally, where (icon, label)
+ virtual int HitTest(const wxPoint& WXUNUSED(pt),
+ long * WXUNUSED(flags) = NULL) const
+ {
+ return wxNOT_FOUND;
+ }
+
protected:
// Should we accept NULL page pointers in Add/InsertPage()?
//
// get the size which the list control should have
virtual wxSize GetControllerSize() const;
+ // return the page corresponding to the tab at the specified position
+ virtual int HitTest(const wxPoint& pt, long *flags = NULL) const;
+
// event handlers
void OnListSelected(wxListEvent& event);
void OnSize(wxSizeEvent& event);
// This subclass of wxBookCtrlBase accepts NULL page pointers (empty pages)
virtual bool AllowNullPage() const { return true; }
+ // return the page corresponding to the tab at the specified position
+ virtual int HitTest(const wxPoint& pt, long *flags = NULL) const;
+
// event handlers
void OnTreeSelectionChange(wxTreeEvent& event);
void OnTreeNodeExpandedCollapsed(wxTreeEvent& event);
wxBookCtrlBase::OnSize(event);
}
+int wxListbook::HitTest(const wxPoint& pt, long * WXUNUSED(flags)) const
+{
+ int pagePos = wxNOT_FOUND;
+
+ const wxPoint clientPt = ClientToScreen(GetListView()->ScreenToClient(pt));
+
+ if ( wxRect(GetListView()->GetSize()).Inside(clientPt) )
+ {
+ int flagsList;
+ pagePos = GetListView()->HitTest(clientPt, flagsList);
+
+ if ( !(flagsList & wxLIST_HITTEST_ONITEM) )
+ {
+ pagePos = wxNOT_FOUND;
+ }
+ }
+
+ return pagePos;
+}
+
wxSize wxListbook::CalcSizeFromPage(const wxSize& sizePage) const
{
// we need to add the size of the list control and the border between
return oldSel;
}
+wxTreebookPage *wxTreebook::DoGetCurrentPage() const
+{
+ if ( m_selection == wxNOT_FOUND )
+ return NULL;
+
+ wxTreebookPage *page = wxBookCtrlBase::GetPage(m_selection);
+ if ( !page && m_actualSelection != wxNOT_FOUND )
+ {
+ page = wxBookCtrlBase::GetPage(m_actualSelection);
+ }
+
+ return page;
+}
+
void wxTreebook::SetImageList(wxImageList *imageList)
{
wxBookCtrlBase::SetImageList(imageList);
// wxTreebook geometry management
// ----------------------------------------------------------------------------
-wxTreebookPage * wxTreebook::DoGetCurrentPage() const
+int wxTreebook::HitTest(wxPoint const & pt, long * WXUNUSED(flags)) const
{
- if ( m_selection == wxNOT_FOUND )
- return NULL;
+ int pagePos = wxNOT_FOUND;
- wxTreebookPage *page = wxBookCtrlBase::GetPage(m_selection);
- if ( !page && m_actualSelection != wxNOT_FOUND )
+ wxTreeCtrl * const tree = GetTreeCtrl();
+ const wxPoint treePt = ClientToScreen(tree->ScreenToClient(pt));
+
+ if ( wxRect(tree->GetSize()).Inside(treePt) )
{
- page = wxBookCtrlBase::GetPage(m_actualSelection);
+ int flagsTree;
+ wxTreeItemId id = tree->HitTest(treePt, flagsTree);
+
+ if ( id.IsOk() && (flagsTree & wxTREE_HITTEST_ONITEM) )
+ {
+ pagePos = DoInternalFindPageById(id);
+ }
}
- return page;
+ return pagePos;
}
#endif // wxUSE_TREEBOOK