From 3ac7b44cc0765b8444324d71b58cf648009d41c2 Mon Sep 17 00:00:00 2001
From: Robin Dunn <robin@alldunn.com>
Date: Tue, 18 Nov 2003 21:20:09 +0000
Subject: [PATCH] Added FindItemAtPoint

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24588 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
 docs/latex/wx/gridbagsizer.tex | 17 ++++++++++++++++-
 include/wx/gbsizer.h           | 11 +++++++++--
 src/common/gbsizer.cpp         | 18 ++++++++++++++++++
 3 files changed, 43 insertions(+), 3 deletions(-)

diff --git a/docs/latex/wx/gridbagsizer.tex b/docs/latex/wx/gridbagsizer.tex
index a0d1e0ff4f..82f1a0bd45 100644
--- a/docs/latex/wx/gridbagsizer.tex
+++ b/docs/latex/wx/gridbagsizer.tex
@@ -10,7 +10,11 @@ more than one row and/or column using \helpref{wxGBSpan}{wxgbspan}.
 
 \wxheading{Derived from}
 
-\helpref{wxFlexGridSizer}{wxflexgridsizer}
+\helpref{wxFlexGridSizer}{wxflexgridsizer}\\
+\helpref{wxGridSizer}{wxgridsizer}\\
+\helpref{wxSizer}{wxsizer}\\
+\helpref{wxObject}{wxobject}
+
 
 \wxheading{Include files}
 
@@ -76,6 +80,17 @@ not found. (non-recursive)
 
 
 
+\membersection{wxGridBagSizer::FindItemAtPoint}\label{wxgridbagsizerfinditematpoint}
+
+\func{wxGBSizerItem*}{FindItemAtPoint}{\param{const wxPoint\& }{pt}}
+
+Return the sizer item located at the point given in pt, or NULL if
+there is no item at that point. The (x,y) coordinates in pt correspond
+to the client coordinates of the window using the sizer for
+layout. (non-recursive)
+
+
+
 \membersection{wxGridBagSizer::FindItemAtPosition}\label{wxgridbagsizerfinditematposition}
 
 \func{wxGBSizerItem*}{FindItemAtPosition}{\param{const wxGBPosition\& }{pos}}
diff --git a/include/wx/gbsizer.h b/include/wx/gbsizer.h
index b0f56150d8..a0fe51142b 100644
--- a/include/wx/gbsizer.h
+++ b/include/wx/gbsizer.h
@@ -25,8 +25,8 @@
 // Classes to represent a position in the grid and a size of an item in the
 // grid, IOW, the number of rows and columns it occupies.  I chose to use these
 // instead of wxPoint and wxSize because they are (x,y) and usually pixel
-// oriented whild grids and tables are usually thought of as (row,col) so some
-// confusion would definitly result in using wxPoint...
+// oriented while grids and tables are usually thought of as (row,col) so some
+// confusion would definitely result in using wxPoint...
 // 
 // NOTE: This should probably be refactored to a common RowCol data type which
 // is used for this and also for wxGridCellCoords.
@@ -242,6 +242,13 @@ public:
     wxGBSizerItem* FindItemAtPosition(const wxGBPosition& pos);
 
     
+    // Return the sizer item located at the point given in pt, or NULL if
+    // there is no item at that point. The (x,y) coordinates in pt correspond
+    // to the client coordinates of the window using the sizer for
+    // layout. (non-recursive)
+    wxGBSizerItem* FindItemAtPoint(const wxPoint& pt);
+
+    
     // Return the sizer item that has a matching user data (it only compares
     // pointer values) or NULL if not found. (non-recursive)
     wxGBSizerItem* FindItemWithData(const wxObject* userData);
diff --git a/src/common/gbsizer.cpp b/src/common/gbsizer.cpp
index 83753c51e1..85653bc76d 100644
--- a/src/common/gbsizer.cpp
+++ b/src/common/gbsizer.cpp
@@ -406,6 +406,24 @@ wxGBSizerItem* wxGridBagSizer::FindItemAtPosition(const wxGBPosition& pos)
 
 
 
+wxGBSizerItem* wxGridBagSizer::FindItemAtPoint(const wxPoint& pt)
+{
+    wxSizerItemList::compatibility_iterator node = m_children.GetFirst();
+    while (node)
+    {
+        wxGBSizerItem* item = (wxGBSizerItem*)node->GetData();
+        wxRect rect(item->GetPosition(), item->GetSize());
+        rect.Inflate(m_hgap, m_vgap);
+        if ( rect.Inside(pt) )
+            return item;
+        node = node->GetNext();
+    }
+    return NULL;
+}
+
+
+
+
 wxGBSizerItem* wxGridBagSizer::FindItemWithData(const wxObject* userData)
 {
     wxSizerItemList::compatibility_iterator node = m_children.GetFirst();
-- 
2.50.0

