]> git.saurik.com Git - wxWidgets.git/commitdiff
Remove DestroyTreeHelper(), make GetChildNodes() const, add RemoveChild().
authorVáclav Slavík <vslavik@fastmail.fm>
Sat, 27 Aug 2011 16:44:42 +0000 (16:44 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Sat, 27 Aug 2011 16:44:42 +0000 (16:44 +0000)
There's no reason for DestroyTreeHelper() code, that's what destructors
are for.  On a related note, make removal of children from a node more
explicit too.

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

src/generic/datavgen.cpp

index c14a1dcd5a7f5713138841b4a663c29c8a081050..6b9456a63602545512939fd549c0680c72dc4710 100644 (file)
@@ -291,7 +291,18 @@ public:
 
     ~wxDataViewTreeNode()
     {
-        delete m_branchData;
+        if ( m_branchData )
+        {
+            wxDataViewTreeNodes& nodes = m_branchData->children;
+            for ( wxDataViewTreeNodes::iterator i = nodes.begin();
+                  i != nodes.end();
+                  ++i )
+            {
+                delete *i;
+            }
+
+            delete m_branchData;
+        }
     }
 
     static wxDataViewTreeNode* CreateRootNode()
@@ -304,7 +315,7 @@ public:
 
     wxDataViewTreeNode * GetParent() const { return m_parent; }
 
-    wxDataViewTreeNodes& GetChildNodes()
+    const wxDataViewTreeNodes& GetChildNodes() const
     {
         wxASSERT( m_branchData != NULL );
         return m_branchData->children;
@@ -321,6 +332,12 @@ public:
             m_branchData->children.Sort( &wxGenericTreeModelNodeCmp );
     }
 
+    void RemoveChild(wxDataViewTreeNode *node)
+    {
+        wxCHECK_RET( m_branchData != NULL, "leaf node doesn't have children" );
+        m_branchData->children.Remove(node);
+    }
+
     const wxDataViewItem & GetItem() const { return m_item; }
     void SetItem( const wxDataViewItem & item ) { m_item = item; }
 
@@ -2012,8 +2029,6 @@ bool wxDataViewMainWindow::ItemAdded(const wxDataViewItem & parent, const wxData
     return true;
 }
 
-static void DestroyTreeHelper( wxDataViewTreeNode * node);
-
 bool wxDataViewMainWindow::ItemDeleted(const wxDataViewItem& parent,
                                        const wxDataViewItem& item)
 {
@@ -2089,8 +2104,8 @@ bool wxDataViewMainWindow::ItemDeleted(const wxDataViewItem& parent,
         // Delete the item from wxDataViewTreeNode representation:
         const int itemsDeleted = 1 + itemNode->GetSubTreeCount();
 
-        parentNode->GetChildNodes().Remove(itemNode);
-        ::DestroyTreeHelper(itemNode);
+        parentNode->RemoveChild(itemNode);
+        delete itemNode;
         parentNode->ChangeSubTreeCount(-itemsDeleted);
 
         // Make the row number invalid and get a new valid one when user call GetRowCount
@@ -3257,25 +3272,12 @@ void wxDataViewMainWindow::BuildTree(wxDataViewModel * model)
     m_count = -1;
 }
 
-static void DestroyTreeHelper( wxDataViewTreeNode * node )
-{
-    if ( node->HasChildren() )
-    {
-        wxDataViewTreeNodes& nodes = node->GetChildNodes();
-        const int len = nodes.size();
-        for (int i = 0; i < len; i++)
-            DestroyTreeHelper(nodes[i]);
-    }
-    delete node;
-}
-
 void wxDataViewMainWindow::DestroyTree()
 {
     if (!IsVirtualList())
     {
-        ::DestroyTreeHelper(m_root);
-            m_count = 0;
-            m_root = NULL;
+        wxDELETE(m_root);
+        m_count = 0;
     }
 }