moved wxNotebook::HitTest() to the base book control class; implemented it for wxList/Treebook

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39339 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2006-05-26 02:09:44 +00:00
parent 61d702d9e6
commit 851b88c310
5 changed files with 63 additions and 15 deletions

View File

@@ -119,14 +119,8 @@ public:
virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const = 0; virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const = 0;
// get/set size of area between book control area and page area // get/set size of area between book control area and page area
inline unsigned int GetInternalBorder() const unsigned int GetInternalBorder() const { return m_internalBorder; }
{ void SetInternalBorder(unsigned int border) { m_internalBorder = border; }
return m_internalBorder;
}
void SetInternalBorder(unsigned int internalBorder)
{
m_internalBorder = internalBorder;
}
// Sets/gets the margin around the controller // Sets/gets the margin around the controller
void SetControlMargin(int margin) { m_controlMargin = margin; } void SetControlMargin(int margin) { m_controlMargin = margin; }
@@ -198,6 +192,13 @@ public:
} }
} }
// 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: protected:
// Should we accept NULL page pointers in Add/InsertPage()? // Should we accept NULL page pointers in Add/InsertPage()?
// //

View File

@@ -78,6 +78,9 @@ protected:
// get the size which the list control should have // get the size which the list control should have
virtual wxSize GetControllerSize() const; 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 // event handlers
void OnListSelected(wxListEvent& event); void OnListSelected(wxListEvent& event);
void OnSize(wxSizeEvent& event); void OnSize(wxSizeEvent& event);

View File

@@ -144,6 +144,9 @@ protected:
// This subclass of wxBookCtrlBase accepts NULL page pointers (empty pages) // This subclass of wxBookCtrlBase accepts NULL page pointers (empty pages)
virtual bool AllowNullPage() const { return true; } 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 // event handlers
void OnTreeSelectionChange(wxTreeEvent& event); void OnTreeSelectionChange(wxTreeEvent& event);
void OnTreeNodeExpandedCollapsed(wxTreeEvent& event); void OnTreeNodeExpandedCollapsed(wxTreeEvent& event);

View File

@@ -161,6 +161,26 @@ void wxListbook::OnSize(wxSizeEvent& event)
wxBookCtrlBase::OnSize(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 wxSize wxListbook::CalcSizeFromPage(const wxSize& sizePage) const
{ {
// we need to add the size of the list control and the border between // we need to add the size of the list control and the border between

View File

@@ -650,6 +650,20 @@ int wxTreebook::DoSetSelection(size_t pagePos)
return oldSel; 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) void wxTreebook::SetImageList(wxImageList *imageList)
{ {
wxBookCtrlBase::SetImageList(imageList); wxBookCtrlBase::SetImageList(imageList);
@@ -709,18 +723,25 @@ void wxTreebook::OnTreeNodeExpandedCollapsed(wxTreeEvent & event)
// wxTreebook geometry management // wxTreebook geometry management
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
wxTreebookPage * wxTreebook::DoGetCurrentPage() const int wxTreebook::HitTest(wxPoint const & pt, long * WXUNUSED(flags)) const
{ {
if ( m_selection == wxNOT_FOUND ) int pagePos = wxNOT_FOUND;
return NULL;
wxTreebookPage *page = wxBookCtrlBase::GetPage(m_selection); wxTreeCtrl * const tree = GetTreeCtrl();
if ( !page && m_actualSelection != wxNOT_FOUND ) 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 #endif // wxUSE_TREEBOOK