From f7ed8c899f6c5806712cc4384d908d4bdb47a898 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Tue, 24 Apr 2007 18:00:14 +0000 Subject: [PATCH] Use child's listmodelnotifier's destructor (by overloading 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 | 6 +++--- src/common/datavcmn.cpp | 20 +++++++++----------- src/gtk/dataview.cpp | 14 +++++++------- 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/include/wx/dataview.h b/include/wx/dataview.h index e2233c86c1..b802aad14f 100644 --- a/include/wx/dataview.h +++ b/include/wx/dataview.h @@ -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; diff --git a/src/common/datavcmn.cpp b/src/common/datavcmn.cpp index c90f0f4f4c..c3aba3e3d4 100644 --- a/src/common/datavcmn.cpp +++ b/src/common/datavcmn.cpp @@ -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 diff --git a/src/gtk/dataview.cpp b/src/gtk/dataview.cpp index f8b13806cc..448d7a762b 100644 --- a/src/gtk/dataview.cpp +++ b/src/gtk/dataview.cpp @@ -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; -- 2.45.2