]> git.saurik.com Git - wxWidgets.git/commitdiff
wxNotebook::HitTest() for wxMSW added (patch 748469)
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 6 Jul 2003 21:02:24 +0000 (21:02 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 6 Jul 2003 21:02:24 +0000 (21:02 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21715 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/latex/wx/notebook.tex
include/wx/msw/notebook.h
include/wx/notebook.h
include/wx/univ/notebook.h
src/msw/notebook.cpp
src/univ/notebook.cpp

index 29e87d94c6250582446da376009f81a6e0c47578..332f441a634551198701b55e76234576ee9fcb41 100644 (file)
@@ -197,6 +197,36 @@ the platform and so\rtfsp
 \helpref{wxNotebookEvent::GetSelection}{wxnotebookeventgetselection} should be
 used instead in this case.
 
+\membersection{wxNotebook::HitTest}\label{wxnotebookhittest}
+
+\func{int}{HitTest}{\param{const wxPoint\&}{ pt}, \param{long}{ *flags = {\tt NULL}}}
+
+Returns the index of the tab at the specified position or {\tt wxNOT\_FOUND} 
+if none. If {\it flags} parameter is non {\tt NULL}, the position of the point
+inside the tab is returned as well.
+
+{\bf NB: } This method is currently only implemented under wxMSW and wxUniv.
+
+\wxheading{Parameters}
+
+\docparam{pt}{Specifies the point for the hit test.}
+
+\docparam{flags}{Return value for detailed information. One of the following values:
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf wxNB\_HITTEST\_NOWHERE}}{There was no tab under this point.}
+\twocolitem{{\bf wxNB\_HITTEST\_ONICON}}{The point was over an icon (currently wxMSW only).}
+\twocolitem{{\bf wxNB\_HITTEST\_ONLABEL}}{The point was over a label (currently wxMSW only).}
+\twocolitem{{\bf wxNB\_HITTEST\_ONITEM}}{The point was over an item, but not on the label or icon.}
+\end{twocollist}
+}
+
+\wxheading{Return value}
+
+Returns the zero-based tab index or {\tt wxNOT\_FOUND} if there is no tab is at
+the specified position.
+
+
 \membersection{wxNotebook::InsertPage}\label{wxnotebookinsertpage}
 
 \func{bool}{InsertPage}{\param{int}{ index}, \param{wxNotebookPage*}{ page},
index 714f15cda74159f5e9d36d66a66016cf7a12e2a1..d85e7ce96c4f310b13640bc315ab19b62ebb895a 100644 (file)
 // wxNotebook
 // ----------------------------------------------------------------------------
 
-/*
- * Flags returned by HitTest
- */
-
-#define wxNB_HITTEST_NOWHERE           1
-#define wxNB_HITTEST_ONICON            2
-#define wxNB_HITTEST_ONLABEL           4
-#define wxNB_HITTEST_ONITEM            6
-
 class WXDLLEXPORT wxNotebook : public wxNotebookBase
 {
 public:
@@ -103,6 +94,7 @@ public:
   // ----------
     // remove all pages
   bool DeleteAllPages();
+
     // inserts a new page to the notebook (it will be deleted ny the notebook,
     // don't delete it yourself). If bSelect, this page becomes active.
   bool InsertPage(int nPage,
@@ -118,9 +110,10 @@ public:
     // Windows only: attempts to apply the UX theme page background to this page
   void ApplyThemeBackground(wxWindow* window, const wxColour& colour);
 
-  // Hit test
-  int HitTest(const wxPoint& pt, long& flags);
-  // calculate the size of the notebook from the size of its page
+    // hit test
+  virtual int HitTest(const wxPoint& pt, long *flags = NULL) const;
+
+    // calculate the size of the notebook from the size of its page
   virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const;
 
   // callbacks
index 03fb928e887d1667c1833e300356052ba5bedee8..ec0dfa5ba343fa89e9cd5dd7273cc0f1fdc0eba8 100644 (file)
 #include "wx/dynarray.h"
 #include "wx/imaglist.h"
 
+// ----------------------------------------------------------------------------
+// constants
+// ----------------------------------------------------------------------------
+
+// wxNotebook hit results
+enum
+{
+    wxNB_HITTEST_NOWHERE = 1,   // not on tab
+    wxNB_HITTEST_ONICON  = 2,   // on icon
+    wxNB_HITTEST_ONLABEL = 4,   // on label
+    wxNB_HITTEST_ONITEM  = wxNB_HITTEST_ONICON | wxNB_HITTEST_ONLABEL
+};
+
 // ----------------------------------------------------------------------------
 // types
 // ----------------------------------------------------------------------------
@@ -144,6 +157,13 @@ public:
     // NB: this function will _not_ generate wxEVT_NOTEBOOK_PAGE_xxx events
     virtual int SetSelection(int nPage) = 0;
 
+    // hit test, returns which tab is hit and, optionally, where (icon, label)
+    // (not implemented on all platforms)
+    virtual int HitTest(const wxPoint& pt, long *flags = NULL) const
+    {
+        return wxNOT_FOUND;
+    }
+
     // cycle thru the tabs
     void AdvanceSelection(bool forward = TRUE)
     {
index e5742ddc0fab2bc8ff55459b21d4ebcbbf502d8f..3b3ef0c0c7be0da62871d58d5c8b4a08ee9a17fe 100644 (file)
@@ -105,8 +105,7 @@ public:
     // hit testing
     // -----------
 
-    // return the tab at this position or -1 if none
-    int HitTest(const wxPoint& pt) const;
+    virtual int HitTest(const wxPoint& pt, long *flags = NULL) const;
 
     // input handling
     // --------------
index dbca8ed2d2221e24183539328e4800715d8caf96..1b82f24ba1d9b6d2fa476a2a136d3e94c323e3cc 100644 (file)
@@ -561,25 +561,31 @@ bool wxNotebook::InsertPage(int nPage,
     return TRUE;
 }
 
-// Hit test
-int wxNotebook::HitTest(const wxPoint& pt, long& flags)
+int wxNotebook::HitTest(const wxPoint& pt, long *flags) const
 {
     TC_HITTESTINFO hitTestInfo;
     hitTestInfo.pt.x = pt.x;
     hitTestInfo.pt.y = pt.y;
-    int item = TabCtrl_HitTest( (HWND) GetHWND(), & hitTestInfo ) ;
-    flags = 0;
+    int item = TabCtrl_HitTest(GetHwnd(), &hitTestInfo);
 
-    if ((hitTestInfo.flags & TCHT_NOWHERE) == TCHT_NOWHERE)
-        flags |= wxNB_HITTEST_NOWHERE;
-    if ((hitTestInfo.flags & TCHT_ONITEMICON) == TCHT_ONITEMICON)
-        flags |= wxNB_HITTEST_ONICON;
-    if ((hitTestInfo.flags & TCHT_ONITEMLABEL) == TCHT_ONITEMLABEL)
-        flags |= wxNB_HITTEST_ONLABEL;
+    if ( flags )
+    {
+        *flags = 0;
+
+        if ((hitTestInfo.flags & TCHT_NOWHERE) == TCHT_NOWHERE)
+            *flags |= wxNB_HITTEST_NOWHERE;
+        if ((hitTestInfo.flags & TCHT_ONITEM) == TCHT_ONITEM)
+            *flags |= wxNB_HITTEST_ONITEM;
+        if ((hitTestInfo.flags & TCHT_ONITEMICON) == TCHT_ONITEMICON)
+            *flags |= wxNB_HITTEST_ONICON;
+        if ((hitTestInfo.flags & TCHT_ONITEMLABEL) == TCHT_ONITEMLABEL)
+            *flags |= wxNB_HITTEST_ONLABEL;
+    }
 
     return item;
 }
 
+
 // ----------------------------------------------------------------------------
 // wxNotebook callbacks
 // ----------------------------------------------------------------------------
index c1d4f7fdc0e4270f41a18e9606938a63a2468474..84c4761c5ff5eba5fbb5cf7ba628cd83eaf08813 100644 (file)
@@ -585,8 +585,11 @@ void wxNotebook::DoDraw(wxControlRenderer *renderer)
 // wxNotebook geometry
 // ----------------------------------------------------------------------------
 
-int wxNotebook::HitTest(const wxPoint& pt) const
+int wxNotebook::HitTest(const wxPoint& pt, long *flags) const
 {
+    if ( flags )
+        *flags = wxNB_HITTEST_NOWHERE;
+
     // first check that it is in this window at all
     if ( !GetClientRect().Inside(pt) )
     {
@@ -627,7 +630,15 @@ int wxNotebook::HitTest(const wxPoint& pt) const
         GetTabSize(n, &rectTabs.width, &rectTabs.height);
 
         if ( rectTabs.Inside(pt) )
+        {
+            if ( flags )
+            {
+                // TODO: be more precise
+                *flags = wxNB_HITTEST_ONITEM;
+            }
+
             return n;
+        }
 
         // move the rectTabs to the next tab
         if ( IsVertical() )