]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/listbox.cpp
cleanup magic number usage and comments
[wxWidgets.git] / src / mac / carbon / listbox.cpp
index 715abf0db01bfa23c18bd83361aa8ca5804ff296..cf43eeaa16576761fae1466a76c74f89df20aefe 100644 (file)
@@ -597,7 +597,7 @@ wxSize wxListBox::DoGetBestSize() const
 
         // don't make the listbox too tall (limit height to around 10 items)
         // but don't make it too small neither
 
         // don't make the listbox too tall (limit height to around 10 items)
         // but don't make it too small neither
-        lbHeight = (cy + 4) * wxMin( wxMax( GetCount(), 3 ), 10 );
+        lbHeight = wxMax( (cy + 4) * wxMin( wxMax( GetCount(), 3 ), 10 ), 70 );
     }
 
     return wxSize( lbWidth, lbHeight );
     }
 
     return wxSize( lbWidth, lbHeight );
@@ -782,6 +782,43 @@ void wxListBox::MacScrollTo( int n )
     verify_noerr( m_peer->RevealItem( id , kTextColumnId , kDataBrowserRevealWithoutSelecting ) ) ;
 }
 
     verify_noerr( m_peer->RevealItem( id , kTextColumnId , kDataBrowserRevealWithoutSelecting ) ) ;
 }
 
+int wxListBox::DoListHitTest(const wxPoint& point) const
+{
+    //Yuck - there is no easy way to get a databrowseritem from a point
+    //so we need to iterate through our items to see which one this falls under
+
+    // TODO: binary search would be faster
+    int count = GetCount();
+    DataBrowserTableViewColumnID colId = 0;
+
+    //Get column property id (req. for call to itempartbounds)
+    GetDataBrowserTableViewColumnProperty(m_peer->GetControlRef(), 0, &colId);
+    
+    for(int i = 1; i <= count; ++i)
+    {
+        Rect bounds;
+        GetDataBrowserItemPartBounds(m_peer->GetControlRef(), i, colId, 
+                                     kDataBrowserPropertyEnclosingPart,
+                                     &bounds);
+        
+        //translate to client coords
+        //
+        // TODO: it would probably be more efficient to translate point to
+        //       screen coordinates once outside of the loop
+        MacRootWindowToWindow(&bounds.left, &bounds.top);
+        MacRootWindowToWindow(&bounds.right, &bounds.bottom);
+        
+        //if point is within the bounds, return this item
+        if( (point.x >= bounds.left && point.x <= bounds.right) &&
+            (point.y >= bounds.top && point.y <= bounds.bottom) )
+        {
+            return i - 1; //found
+        }
+    }
+    
+    return wxNOT_FOUND;
+}
+
 #if !TARGET_API_MAC_OSX
 
 void wxListBox::OnChar(wxKeyEvent& event)
 #if !TARGET_API_MAC_OSX
 
 void wxListBox::OnChar(wxKeyEvent& event)