From 761a147545864782a79570dbaf8f4cc25de7423d Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Mon, 4 Aug 2008 22:20:10 +0200 Subject: [PATCH 1/1] internal stuff only: added accessors for bufferName, networkId, networkName and bufferType to NetworkModel --- src/client/networkmodel.cpp | 60 +++++++++++++++++++++++++++++++++++++ src/client/networkmodel.h | 12 +++++++- 2 files changed, 71 insertions(+), 1 deletion(-) diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index d6c18d7c..dbfa6f0c 100644 --- a/src/client/networkmodel.cpp +++ b/src/client/networkmodel.cpp @@ -705,6 +705,10 @@ QString IrcUserItem::toolTip(int column) const { NetworkModel::NetworkModel(QObject *parent) : TreeModel(NetworkModel::defaultHeader(), parent) { + connect(this, SIGNAL(rowsInserted(const QModelIndex &, int, int)), + this, SLOT(checkForNewBuffers(const QModelIndex &, int, int))); + connect(this, SIGNAL(rowsAboutToBeRemoved(const QModelIndex &, int, int)), + this, SLOT(checkForRemovedBuffers(const QModelIndex &, int, int))); } QListNetworkModel::defaultHeader() { @@ -951,3 +955,59 @@ const Network *NetworkModel::networkByIndex(const QModelIndex &index) const { return Client::network(networkId); } + + +void NetworkModel::checkForRemovedBuffers(const QModelIndex &parent, int start, int end) { + if(parent.data(ItemTypeRole) == NetworkItemType) + return; + + for(int row = start; row < end; row++) { + _bufferItemCache.remove(parent.child(row, 0).data(BufferIdRole).value()); + } +} + +void NetworkModel::checkForNewBuffers(const QModelIndex &parent, int start, int end) { + if(parent.data(ItemTypeRole) == NetworkItemType) + return; + + for(int row = start; row < end; row++) { + QModelIndex child = parent.child(row, 0); + _bufferItemCache[child.data(BufferIdRole).value()] = static_cast(child.internalPointer()); + } +} + +QString NetworkModel::bufferName(BufferId bufferId) { + if(!_bufferItemCache.contains(bufferId)) + return QString(); + + return _bufferItemCache[bufferId]->bufferName(); +} + +NetworkId NetworkModel::networkId(BufferId bufferId) { + if(!_bufferItemCache.contains(bufferId)) + return NetworkId(); + + NetworkItem *netItem = qobject_cast(_bufferItemCache[bufferId]->parent()); + if(netItem) + return netItem->networkId(); + else + return NetworkId(); +} + +QString NetworkModel::networkName(BufferId bufferId) { + if(!_bufferItemCache.contains(bufferId)) + return QString(); + + NetworkItem *netItem = qobject_cast(_bufferItemCache[bufferId]->parent()); + if(netItem) + return netItem->networkName(); + else + return QString(); +} + +BufferInfo::Type NetworkModel::bufferType(BufferId bufferId) { + if(!_bufferItemCache.contains(bufferId)) + return BufferInfo::InvalidBuffer; + + return _bufferItemCache[bufferId]->bufferType(); +} diff --git a/src/client/networkmodel.h b/src/client/networkmodel.h index b9920e25..07b21902 100644 --- a/src/client/networkmodel.h +++ b/src/client/networkmodel.h @@ -295,12 +295,21 @@ public: Buffer::ActivityLevel bufferActivity(const BufferInfo &buffer) const; + QString bufferName(BufferId bufferId); + NetworkId networkId(BufferId bufferId); + QString networkName(BufferId bufferId); + BufferInfo::Type bufferType(BufferId bufferId); + public slots: void bufferUpdated(BufferInfo bufferInfo); void removeBuffer(BufferId bufferId); void setBufferActivity(const BufferInfo &buffer, Buffer::ActivityLevel activity); void networkRemoved(const NetworkId &networkId); - + +private slots: + void checkForRemovedBuffers(const QModelIndex &parent, int start, int end); + void checkForNewBuffers(const QModelIndex &parent, int start, int end); + private: int networkRow(NetworkId networkId); NetworkItem *findNetworkItem(NetworkId networkId); @@ -309,6 +318,7 @@ private: BufferItem *findBufferItem(BufferId bufferId); BufferItem *bufferItem(const BufferInfo &bufferInfo); + QHash _bufferItemCache; }; Q_DECLARE_OPERATORS_FOR_FLAGS(NetworkModel::itemTypes); -- 2.20.1