]> git.saurik.com Git - wxWidgets.git/commitdiff
Make GetIndexOf() and get_path() work for virtual list models, fixes #12073: wxDataVi...
authorRobert Roebling <robert@roebling.de>
Thu, 20 May 2010 18:39:20 +0000 (18:39 +0000)
committerRobert Roebling <robert@roebling.de>
Thu, 20 May 2010 18:39:20 +0000 (18:39 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64362 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/datavcmn.cpp
src/gtk/dataview.cpp

index 753128781eb7157b4ea15dcc8cc062d69e793e0c..dca9eaab7d2716fcae95006a1b37eb5d93a5ffe7 100644 (file)
@@ -543,8 +543,8 @@ void wxDataViewVirtualListModel::RowsDeleted( const wxArrayInt &rows )
     unsigned int i;
     for (i = 0; i < sorted.GetCount(); i++)
     {
-            wxDataViewItem item( wxUIntToPtr(sorted[i]+1) );
-            array.Add( item );
+        wxDataViewItem item( wxUIntToPtr(sorted[i]+1) );
+        array.Add( item );
     }
     /* wxDataViewModel:: */ ItemsDeleted( wxDataViewItem(0), array );
 }
index f62853a3dba76de184bea0d04199f375947efb1b..e2db524fd8506acc6959c72ae04491ba562b429a 100644 (file)
@@ -3529,6 +3529,10 @@ GtkTreePath *wxDataViewCtrlInternal::get_path( GtkTreeIter *iter )
 
     if (m_wx_model->IsVirtualListModel())
     {
+        // iter is root, add nothing
+        if (!iter->user_data)
+           return retval;
+        
         // user_data is just the index +1
         int i = ( (wxUIntPtr) iter->user_data ) -1;
         gtk_tree_path_append_index (retval, i);
@@ -3776,13 +3780,21 @@ gboolean wxDataViewCtrlInternal::iter_parent( GtkTreeIter *iter, GtkTreeIter *ch
 // item can be deleted already in the model    
 int wxDataViewCtrlInternal::GetIndexOf( const wxDataViewItem &parent, const wxDataViewItem &item )
 {
-    wxGtkTreeModelNode *parent_node = FindNode( parent );
-    wxGtkTreeModelChildren &children = parent_node->GetChildren();
-    size_t j;
-    for (j = 0; j < children.GetCount(); j++)
+    if (m_wx_model->IsVirtualListModel())
+    {
+        int index = ((int)(item.GetID())) - 1;
+        return index;
+    }
+    else
     {
-       if (children[j] == item.GetID())
-          return j;
+        wxGtkTreeModelNode *parent_node = FindNode( parent );
+        wxGtkTreeModelChildren &children = parent_node->GetChildren();
+        size_t j;
+        for (j = 0; j < children.GetCount(); j++)
+        {
+            if (children[j] == item.GetID())
+               return j;
+        }
     }
     return -1;
 }