]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/listctrl.cpp
fixed header include guard position (patch 992443)
[wxWidgets.git] / src / generic / listctrl.cpp
index 4e3588f7e3b218d94d9bf2d28dfd1e43d93b771c..7b1bffec796c4faae4ad1f991874f6af693d686d 100644 (file)
@@ -76,6 +76,9 @@
     #include "wx/mac/private.h"
 #endif
 
+#include <math.h>
+
+
 // NOTE: If using the wxListBox visual attributes works everywhere then this can
 // be removed, as well as the #else case below.
 #define _USE_VISATTR 0
@@ -677,6 +680,7 @@ public:
     void EnsureVisible( long index );
     long FindItem( long start, const wxString& str, bool partial = false );
     long FindItem( long start, long data);
+    long FindItem( const wxPoint& pt );
     long HitTest( int x, int y, int &flags );
     void InsertItem( wxListItem &item );
     void InsertColumn( long col, wxListItem &item );
@@ -2105,7 +2109,7 @@ void wxListTextCtrl::OnKeyUp( wxKeyEvent &event )
         sx = parentSize.x - myPos.x;
     if (mySize.x > sx)
         sx = mySize.x;
-    SetSize(sx, wxDefaultSize.y);
+    SetSize(sx, wxDefaultCoord);
 
     event.Skip();
 }
@@ -2114,13 +2118,16 @@ void wxListTextCtrl::OnKillFocus( wxFocusEvent &event )
 {
     if ( !m_finished )
     {
-        // We must finish regardless of success, otherwise we'll get focus problems
+        // We must finish regardless of success, otherwise we'll get
+        // focus problems:
         Finish();
 
         if ( !AcceptChanges() )
             m_owner->OnRenameCancelled( m_itemEdited );
     }
 
+    // We must let the native text control handle focus, too, otherwise
+    // it could have problems with the cursor (e.g., in wxGTK):
     event.Skip();
 }
 
@@ -4281,6 +4288,22 @@ long wxListMainWindow::FindItem(long start, long data)
     return wxNOT_FOUND;
 }
 
+long wxListMainWindow::FindItem( const wxPoint& pt )
+{
+    size_t topItem;
+    GetVisibleLinesRange(&topItem, NULL);
+
+    wxPoint p;
+    GetItemPosition( GetItemCount()-1, p );
+    if( p.y == 0 )
+        return topItem;
+    long id = (long) floor( pt.y*(GetItemCount()-topItem-1)/p.y+topItem );
+    if( id >= 0 && id < (long)GetItemCount() )
+        return id;
+
+    return wxNOT_FOUND;
+}
+
 long wxListMainWindow::HitTest( int x, int y, int &flags )
 {
     CalcUnscrolledPosition( x, y, &x, &y );
@@ -4320,7 +4343,7 @@ void wxListMainWindow::InsertItem( wxListItem &item )
 {
     wxASSERT_MSG( !IsVirtual(), _T("can't be used with virtual control") );
 
-    size_t count = GetItemCount();
+    int count = GetItemCount();
     wxCHECK_RET( item.m_itemId >= 0, _T("invalid item index") );
 
     if (item.m_itemId > count)
@@ -5056,10 +5079,10 @@ long wxGenericListCtrl::FindItem( long start, long data )
     return m_mainWin->FindItem( start, data );
 }
 
-long wxGenericListCtrl::FindItem( long WXUNUSED(start), const wxPoint& WXUNUSED(pt),
+long wxGenericListCtrl::FindItem( long WXUNUSED(start), const wxPoint& pt,
                            int WXUNUSED(direction))
 {
-    return 0;
+    return m_mainWin->FindItem( pt );
 }
 
 long wxGenericListCtrl::HitTest( const wxPoint &point, int &flags )