From: Manuel Nickschas Date: Mon, 1 Dec 2008 23:28:17 +0000 (+0100) Subject: Make NetworkModel::bufferId() a bit more efficient and optionally case insensitive... X-Git-Tag: 0.4.0~380 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=188b778bd62a10521ab721a212f8ea2f62fd636a Make NetworkModel::bufferId() a bit more efficient and optionally case insensitive, and constify some stuff --- diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index 68dfd0a0..50712621 100644 --- a/src/client/networkmodel.cpp +++ b/src/client/networkmodel.cpp @@ -748,7 +748,7 @@ bool NetworkModel::isBufferIndex(const QModelIndex &index) const { return index.data(NetworkModel::ItemTypeRole) == NetworkModel::BufferItemType; } -int NetworkModel::networkRow(NetworkId networkId) { +int NetworkModel::networkRow(NetworkId networkId) const { NetworkItem *netItem = 0; for(int i = 0; i < rootItem->childCount(); i++) { netItem = qobject_cast(rootItem->child(i)); @@ -768,7 +768,7 @@ QModelIndex NetworkModel::networkIndex(NetworkId networkId) { return indexByItem(qobject_cast(rootItem->child(netRow))); } -NetworkItem *NetworkModel::findNetworkItem(NetworkId networkId) { +NetworkItem *NetworkModel::findNetworkItem(NetworkId networkId) const { int netRow = networkRow(networkId); if(netRow == -1) return 0; @@ -800,7 +800,7 @@ QModelIndex NetworkModel::bufferIndex(BufferId bufferId) { return indexByItem(_bufferItemCache[bufferId]); } -BufferItem *NetworkModel::findBufferItem(BufferId bufferId) { +BufferItem *NetworkModel::findBufferItem(BufferId bufferId) const { if(_bufferItemCache.contains(bufferId)) return _bufferItemCache[bufferId]; else @@ -1047,11 +1047,15 @@ QString NetworkModel::networkName(BufferId bufferId) const { return QString(); } -BufferId NetworkModel::bufferId(NetworkId networkId, const QString &bufferName) const { - foreach(BufferItem *item, _bufferItemCache) { - NetworkItem *netItem = qobject_cast(item->parent()); - if(netItem && netItem->networkId() == networkId && item->bufferName() == bufferName) - return item->bufferId(); +BufferId NetworkModel::bufferId(NetworkId networkId, const QString &bufferName, Qt::CaseSensitivity cs) const { + const NetworkItem *netItem = findNetworkItem(networkId); + if(!netItem) + return BufferId(); + + for(int i = 0; i < netItem->childCount(); i++) { + BufferItem *bufferItem = qobject_cast(netItem->child(i)); + if(bufferItem && !bufferItem->bufferName().compare(bufferName, cs)) + return bufferItem->bufferId(); } return BufferId(); } diff --git a/src/client/networkmodel.h b/src/client/networkmodel.h index a13d8591..0ffc0a0d 100644 --- a/src/client/networkmodel.h +++ b/src/client/networkmodel.h @@ -306,7 +306,7 @@ public: * @param bufferName The bufferName we look for * @return The id of the buffer if found, an invalid one else */ - BufferId bufferId(NetworkId networkId, const QString &bufferName) const; + BufferId bufferId(NetworkId networkId, const QString &bufferName, Qt::CaseSensitivity cs = Qt::CaseInsensitive) const; QString bufferName(BufferId bufferId) const; BufferInfo::Type bufferType(BufferId bufferId) const; @@ -335,11 +335,11 @@ private slots: void checkForNewBuffers(const QModelIndex &parent, int start, int end); private: - int networkRow(NetworkId networkId); - NetworkItem *findNetworkItem(NetworkId networkId); + int networkRow(NetworkId networkId) const; + NetworkItem *findNetworkItem(NetworkId networkId) const; NetworkItem *networkItem(NetworkId networkId); - inline BufferItem *findBufferItem(const BufferInfo &bufferInfo) { return findBufferItem(bufferInfo.bufferId()); } - BufferItem *findBufferItem(BufferId bufferId); + inline BufferItem *findBufferItem(const BufferInfo &bufferInfo) const { return findBufferItem(bufferInfo.bufferId()); } + BufferItem *findBufferItem(BufferId bufferId) const; BufferItem *bufferItem(const BufferInfo &bufferInfo); QHash _bufferItemCache;