]> git.saurik.com Git - wxWidgets.git/commitdiff
moved wxNotebook::HitTest() to the base book control class; implemented it for wxList...
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 26 May 2006 02:09:44 +0000 (02:09 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 26 May 2006 02:09:44 +0000 (02:09 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39339 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/bookctrl.h
include/wx/listbook.h
include/wx/treebook.h
src/generic/listbkg.cpp
src/generic/treebkg.cpp

index 02ad3f6f5e385ba79c0caa5ce38c4b01d3f76fde..2bdf599224611932d5f80228cbe9bd3710eaba04 100644 (file)
@@ -119,14 +119,8 @@ public:
     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; }
@@ -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:
     // Should we accept NULL page pointers in Add/InsertPage()?
     //
index 61f06d573176025837bbe8291b2ea04be20131d1..b8022730f76c444daa5aa6f39cb6bbd9771489a5 100644 (file)
@@ -78,6 +78,9 @@ protected:
     // 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);
index c7db5c24774f0912aa430bde9a9d8d0693fedb74..325aaa3521bf4548995fc75f0d3c641e320fea9b 100644 (file)
@@ -144,6 +144,9 @@ protected:
     // 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);
index d3b9771817618d5c41a57d0a941bd3187cbd641a..f096095e55bf12a50678e141068955c94ac1b8f5 100644 (file)
@@ -161,6 +161,26 @@ void wxListbook::OnSize(wxSizeEvent& 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
index 4bce15eca2d56f6a54e79f49cb080c0837fa9e98..57593a5bb1a778fc21822932ecca2d6d7ac4abe5 100644 (file)
@@ -650,6 +650,20 @@ int wxTreebook::DoSetSelection(size_t pagePos)
     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);
@@ -709,18 +723,25 @@ void wxTreebook::OnTreeNodeExpandedCollapsed(wxTreeEvent & event)
 // 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