]> git.saurik.com Git - wxWidgets.git/commitdiff
Return an invalid item from wxDataViewCtrl::GetItemByRow() for invalid rows.
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 27 Feb 2012 18:54:02 +0000 (18:54 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 27 Feb 2012 18:54:02 +0000 (18:54 +0000)
This function is called in many places in the code with possibly invalid (i.e.
out of range) row, so handle it gracefully inside it in virtual list control
case. This is consistent with the behaviour in non-virtual case and with that
of GetRowByItem().

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70717 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/generic/dataview.h
src/generic/datavgen.cpp

index c2cf345a4c69e5fdec7e227e28d19e7e05dc916d..89b0461623cb0f19193e2c74be00baa995b95c01 100644 (file)
@@ -199,6 +199,8 @@ public:
 protected:
     virtual void EnsureVisible( int row, int column );
 
+    // Notice that row here may be invalid (i.e. >= GetRowCount()), this is not
+    // an error and this function simply returns an invalid item in this case.
     virtual wxDataViewItem GetItemByRow( unsigned int row ) const;
     virtual int GetRowByItem( const wxDataViewItem & item ) const;
 
index 21c53c66dabe54a6fd54ec1e7b38fb8d199e9ab6..716d4b9bf95af43a81b902a23a64c5800e091d15 100644 (file)
@@ -2970,15 +2970,20 @@ wxDataViewTreeNode * wxDataViewMainWindow::GetTreeNodeByRow(unsigned int row) co
 
 wxDataViewItem wxDataViewMainWindow::GetItemByRow(unsigned int row) const
 {
+    wxDataViewItem item;
     if (IsVirtualList())
     {
-        return wxDataViewItem( wxUIntToPtr(row+1) );
+        if ( row < GetRowCount() )
+            item = wxDataViewItem(wxUIntToPtr(row+1));
     }
     else
     {
         wxDataViewTreeNode *node = GetTreeNodeByRow(row);
-        return node ? node->GetItem() : wxDataViewItem();
+        if ( node )
+            item = node->GetItem();
     }
+
+    return item;
 }
 
 bool