From b31acfda4b9fd696a78513314a1b87bc0ffae1b3 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Fri, 19 Jun 2009 21:54:48 +0000 Subject: [PATCH] Use a BObjectList instead of a DoublyLinkedList for the TableModelListeners. Otherwise we can't add a listener to more than one model. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31123 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/debuganalyzer/gui/table/Table.cpp | 21 ++++++++++++--------- src/apps/debuganalyzer/gui/table/Table.h | 6 +++--- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/apps/debuganalyzer/gui/table/Table.cpp b/src/apps/debuganalyzer/gui/table/Table.cpp index 497c1f88b4..7f277b2fd1 100644 --- a/src/apps/debuganalyzer/gui/table/Table.cpp +++ b/src/apps/debuganalyzer/gui/table/Table.cpp @@ -66,25 +66,26 @@ TableModel::~TableModel() } -void +bool TableModel::AddListener(TableModelListener* listener) { - fListeners.Add(listener); + return fListeners.AddItem(listener); } void TableModel::RemoveListener(TableModelListener* listener) { - fListeners.Remove(listener); + fListeners.RemoveItem(listener); } void TableModel::NotifyRowsAdded(int32 rowIndex, int32 count) { - for (ListenerList::Iterator it = fListeners.GetIterator(); - TableModelListener* listener = it.Next();) { + int32 listenerCount = fListeners.CountItems(); + for (int32 i = listenerCount - 1; i >= 0; i--) { + TableModelListener* listener = fListeners.ItemAt(i); listener->TableRowsAdded(this, rowIndex, count); } } @@ -93,8 +94,9 @@ TableModel::NotifyRowsAdded(int32 rowIndex, int32 count) void TableModel::NotifyRowsRemoved(int32 rowIndex, int32 count) { - for (ListenerList::Iterator it = fListeners.GetIterator(); - TableModelListener* listener = it.Next();) { + int32 listenerCount = fListeners.CountItems(); + for (int32 i = listenerCount - 1; i >= 0; i--) { + TableModelListener* listener = fListeners.ItemAt(i); listener->TableRowsRemoved(this, rowIndex, count); } } @@ -103,8 +105,9 @@ TableModel::NotifyRowsRemoved(int32 rowIndex, int32 count) void TableModel::NotifyRowsChanged(int32 rowIndex, int32 count) { - for (ListenerList::Iterator it = fListeners.GetIterator(); - TableModelListener* listener = it.Next();) { + int32 listenerCount = fListeners.CountItems(); + for (int32 i = listenerCount - 1; i >= 0; i--) { + TableModelListener* listener = fListeners.ItemAt(i); listener->TableRowsChanged(this, rowIndex, count); } } diff --git a/src/apps/debuganalyzer/gui/table/Table.h b/src/apps/debuganalyzer/gui/table/Table.h index e064e57795..02c29f59c0 100644 --- a/src/apps/debuganalyzer/gui/table/Table.h +++ b/src/apps/debuganalyzer/gui/table/Table.h @@ -20,7 +20,7 @@ class Table; class TableModel; -class TableModelListener : public DoublyLinkedListLinkImpl { +class TableModelListener { public: virtual ~TableModelListener(); @@ -42,11 +42,11 @@ public: virtual bool GetValueAt(int32 rowIndex, int32 columnIndex, Variant& value) = 0; - virtual void AddListener(TableModelListener* listener); + virtual bool AddListener(TableModelListener* listener); virtual void RemoveListener(TableModelListener* listener); protected: - typedef DoublyLinkedList ListenerList; + typedef BObjectList ListenerList; protected: void NotifyRowsAdded(int32 rowIndex, int32 count);