From 3ac7b44cc0765b8444324d71b58cf648009d41c2 Mon Sep 17 00:00:00 2001 From: Robin Dunn 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.45.2