X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fnetworkmodel.cpp;h=939fcb1dd0b755aa10a8c9ee8c2a56cbc509d8cd;hp=5663738f8a69b149371ba4bf1a28f93690348744;hb=46d75f41de7c1aaee605c096da28d4b0d8abf138;hpb=4c2ec3f1bd9e2eb17d31585866f2b2d40a699aac diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index 5663738f..939fcb1d 100644 --- a/src/client/networkmodel.cpp +++ b/src/client/networkmodel.cpp @@ -37,13 +37,15 @@ *****************************************/ NetworkItem::NetworkItem(const NetworkId &netid, AbstractTreeItem *parent) : PropertyMapItem(QList() << "networkName" << "currentServer" << "nickCount", parent), - _networkId(netid) + _networkId(netid), + _statusBufferItem(0) { // DO NOT EMIT dataChanged() DIRECTLY IN NetworkItem // use networkDataChanged() instead. Otherwise you will end up in a infinite loop // as we "sync" the dataChanged() signals of NetworkItem and StatusBufferItem setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable); connect(this, SIGNAL(networkDataChanged(int)), this, SIGNAL(dataChanged(int))); + connect(this, SIGNAL(beginRemoveChilds(int, int)), this, SLOT(onBeginRemoveChilds(int, int))); } QVariant NetworkItem::data(int column, int role) const { @@ -52,8 +54,8 @@ QVariant NetworkItem::data(int column, int role) const { case NetworkModel::BufferInfoRole: case NetworkModel::BufferTypeRole: case NetworkModel::BufferActivityRole: - if(childCount()) - return child(0)->data(column, role); + if(_statusBufferItem) + return _statusBufferItem->data(column, role); else return QVariant(); case NetworkModel::NetworkIdRole: @@ -88,7 +90,8 @@ BufferItem *NetworkItem::bufferItem(const BufferInfo &bufferInfo) { switch(bufferInfo.type()) { case BufferInfo::StatusBuffer: - bufferItem = new StatusBufferItem(bufferInfo, this); + _statusBufferItem = new StatusBufferItem(bufferInfo, this); + bufferItem = _statusBufferItem; disconnect(this, SIGNAL(networkDataChanged(int)), this, SIGNAL(dataChanged(int))); connect(this, SIGNAL(networkDataChanged(int)), bufferItem, SIGNAL(dataChanged(int))); connect(bufferItem, SIGNAL(dataChanged(int)), this, SIGNAL(dataChanged(int))); @@ -182,6 +185,16 @@ QString NetworkItem::toolTip(int column) const { return QString("

%1

").arg(toolTip.join("
")); } +void NetworkItem::onBeginRemoveChilds(int start, int end) { + for(int i = start; i <= end; i++) { + StatusBufferItem *statusBufferItem = qobject_cast(child(i)); + if(statusBufferItem) { + _statusBufferItem = 0; + break; + } + } +} + /***************************************** * Fancy Buffer Items *****************************************/ @@ -319,6 +332,8 @@ QueryBufferItem::QueryBufferItem(const BufferInfo &bufferInfo, NetworkItem *pare QVariant QueryBufferItem::data(int column, int role) const { switch(role) { + case Qt::EditRole: + return BufferItem::data(column, Qt::DisplayRole); case NetworkModel::IrcUserRole: return QVariant::fromValue(_ircUser); case NetworkModel::UserAwayRole: @@ -946,6 +961,15 @@ MsgId NetworkModel::lastSeenMarkerMsgId(BufferId bufferId) const { return _bufferItemCache[bufferId]->lastSeenMarkerMsgId(); } +MsgId NetworkModel::lastSeenMsgId(const BufferId &bufferId) { + BufferItem *bufferItem = findBufferItem(bufferId); + if(!bufferItem) { + qDebug() << "NetworkModel::lastSeenMsgId(): buffer is unknown:" << bufferId; + return MsgId(); + } + return bufferItem->lastSeenMsgId(); +} + void NetworkModel::setLastSeenMsgId(const BufferId &bufferId, const MsgId &msgId) { BufferItem *bufferItem = findBufferItem(bufferId); if(!bufferItem) {