X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fnetworkmodel.cpp;h=777e809a6a8ec079ddd03b7fe3598975a9d43a95;hp=d6c18d7c9bdfcd70e9568a1cd399edf05c840742;hb=3e85aa859e7533ec910f8b2efe4a8abd801d3a47;hpb=4a174a228d64ab906a0944f3de3dfe4324d058ff diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index d6c18d7c..777e809a 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() { @@ -770,11 +774,10 @@ void NetworkModel::networkRemoved(const NetworkId &networkId) { } QModelIndex NetworkModel::bufferIndex(BufferId bufferId) { - BufferItem *bufferItem = findBufferItem(bufferId); - if(bufferItem) - return indexByItem(bufferItem); - else + if(!_bufferItemCache.contains(bufferId)) return QModelIndex(); + + return indexByItem(_bufferItemCache[bufferId]); } BufferItem *NetworkModel::findBufferItem(const BufferInfo &bufferInfo) { @@ -951,3 +954,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(); +}