]> git.saurik.com Git - wxWidgets.git/commitdiff
Use child's listmodelnotifier's destructor (by overloading
authorRobert Roebling <robert@roebling.de>
Tue, 24 Apr 2007 18:00:14 +0000 (18:00 +0000)
committerRobert Roebling <robert@roebling.de>
Tue, 24 Apr 2007 18:00:14 +0000 (18:00 +0000)
   it) to get informed about the destruction of the child
   model in a sorted model. Removed Freed() method used for
   that so far.

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

include/wx/dataview.h
src/common/datavcmn.cpp
src/gtk/dataview.cpp

index e2233c86c19f6a703b9c75b076757ca388da9e21..b802aad14f17f325f52a3a90e8403b21ab19db5b 100644 (file)
@@ -82,7 +82,7 @@ class WXDLLIMPEXP_ADV wxDataViewListModelNotifier: public wxObject
 {
 public:
     wxDataViewListModelNotifier() { }
-    virtual ~wxDataViewListModelNotifier() { }
+    virtual ~wxDataViewListModelNotifier() { m_owner = NULL; }
 
     virtual bool RowAppended() = 0;
     virtual bool RowPrepended() = 0;
@@ -92,8 +92,6 @@ public:
     virtual bool ValueChanged( unsigned int col, unsigned int row ) = 0;
     virtual bool RowsReordered( unsigned int *new_order ) = 0;
     virtual bool Cleared() = 0;
-    virtual bool Freed()
-        { m_owner = NULL; return true; }
 
     void SetOwner( wxDataViewListModel *owner ) { m_owner = owner; }
     wxDataViewListModel *GetOwner()             { return m_owner; }
@@ -223,6 +221,8 @@ public:
     bool ChildCleared();
 
     virtual void Resort();
+    
+    void DetachChild();
 
 private:
     bool                             m_ascending;
index c90f0f4f4cd76d086f7d5dc360d3f977c9f220bb..c3aba3e3d4c6752677692ac7a582d596b3525d37 100644 (file)
@@ -38,13 +38,6 @@ wxDataViewListModel::wxDataViewListModel()
 
 wxDataViewListModel::~wxDataViewListModel()
 {
-    wxList::compatibility_iterator node = m_notifiers.GetFirst();
-    while (node)
-    {
-        wxDataViewListModelNotifier* notifier = (wxDataViewListModelNotifier*) node->GetData();
-        notifier->Freed();
-        node = node->GetNext();
-    }
 }
 
 bool wxDataViewListModel::RowAppended()
@@ -217,6 +210,9 @@ class wxDataViewSortedListModelNotifier: public wxDataViewListModelNotifier
 public:
     wxDataViewSortedListModelNotifier( wxDataViewSortedListModel *model )
         { m_model = model; }
+        
+    ~wxDataViewSortedListModelNotifier()
+        { m_model->DetachChild(); }
 
     virtual bool RowAppended()
         { return m_model->ChildRowAppended(); }
@@ -242,9 +238,6 @@ public:
     virtual bool Cleared()
         { return m_model->ChildCleared(); }
 
-    virtual bool Freed()
-        { m_model->m_child = NULL; return wxDataViewListModelNotifier::Freed(); }
-
     wxDataViewSortedListModel *m_model;
 };
 
@@ -325,7 +318,12 @@ wxDataViewSortedListModel::wxDataViewSortedListModel( wxDataViewListModel *child
 wxDataViewSortedListModel::~wxDataViewSortedListModel()
 {
     if (m_child)
-    m_child->RemoveNotifier( m_notifierOnChild );
+        m_child->RemoveNotifier( m_notifierOnChild );
+}
+
+void wxDataViewSortedListModel::DetachChild()
+{
+    m_child = NULL;
 }
 
 // FIXME
index f8b13806ccb3da1c14293e9fde01905678643b52..448d7a762b51a8782bcc81c496340e33b1c15a35 100644 (file)
@@ -778,6 +778,7 @@ class wxGtkDataViewListModelNotifier: public wxDataViewListModelNotifier
 {
 public:
     wxGtkDataViewListModelNotifier( GtkWxListStore* gtk_store, wxDataViewListModel *wx_model );
+    ~wxGtkDataViewListModelNotifier();
 
     virtual bool RowAppended();
     virtual bool RowPrepended();
@@ -788,13 +789,6 @@ public:
     virtual bool RowsReordered( unsigned int *new_order );
     virtual bool Cleared();
 
-    virtual bool Freed()
-    {
-        m_wx_model = NULL;
-        m_gtk_store = NULL;
-        return wxDataViewListModelNotifier::Freed();
-    }
-
     GtkWxListStore      *m_gtk_store;
     wxDataViewListModel *m_wx_model;
 };
@@ -810,6 +804,12 @@ wxGtkDataViewListModelNotifier::wxGtkDataViewListModelNotifier(
     m_wx_model = wx_model;
 }
 
+wxGtkDataViewListModelNotifier::~wxGtkDataViewListModelNotifier()
+{
+    m_wx_model = NULL;
+    m_gtk_store = NULL;
+}
+
 bool wxGtkDataViewListModelNotifier::RowAppended()
 {
     unsigned int pos = m_wx_model->GetRowCount()-1;