]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/datavgen.cpp
testing header replace
[wxWidgets.git] / src / generic / datavgen.cpp
index 8a3cdb48745c0f4265d48e158285961fb77c14cd..32691b07ab0ad7d0cc8381165290a5453b23b997 100644 (file)
@@ -2423,7 +2423,10 @@ bool wxDataViewMainWindow::IsExpanded( unsigned int row ) const
        return false;
        
     if (!node->HasChildren())
+    {
+       delete node;
        return false;
+    }
     
     return node->IsOpen();
 }
@@ -3524,18 +3527,33 @@ int wxDataViewCtrl::GetSelections( wxDataViewItemArray & sel ) const
 void wxDataViewCtrl::SetSelections( const wxDataViewItemArray & sel )
 {
     wxDataViewSelection selection(wxDataViewSelectionCmp);
+
+    wxDataViewItem last_parent;
+
     int len = sel.GetCount();
     for( int i = 0; i < len; i ++ )
     {
-        int row = m_clientArea->GetRowByItem( sel[i] );
+        wxDataViewItem item = sel[i];
+        wxDataViewItem parent = GetModel()->GetParent( item );
+        if (parent)
+        {
+            if (parent != last_parent)
+                ExpandAncestors(item);
+        }
+        
+        last_parent = parent;
+        int row = m_clientArea->GetRowByItem( item );
         if( row >= 0 )
             selection.Add( static_cast<unsigned int>(row) );
     }
+    
     m_clientArea->SetSelections( selection );
 }
 
 void wxDataViewCtrl::Select( const wxDataViewItem & item )
 {
+    ExpandAncestors( item );
+    
     int row = m_clientArea->GetRowByItem( item );
     if( row >= 0 )
     {
@@ -3659,7 +3677,7 @@ void wxDataViewCtrl::EnsureVisible( int row, int column )
 
 void wxDataViewCtrl::EnsureVisible( const wxDataViewItem & item, const wxDataViewColumn * column )
 {
-    wxDataViewCtrlBase::EnsureVisible( item, column );
+    ExpandAncestors( item );
   
     m_clientArea->RecalculateDisplay();