X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fnetworkmodel.cpp;h=939fcb1dd0b755aa10a8c9ee8c2a56cbc509d8cd;hp=6e6397247322d3b3fdf1adc25a331f6c1dfbf1f2;hb=46d75f41de7c1aaee605c096da28d4b0d8abf138;hpb=f824db0e31b54969e0b7fa0b5405b1e9173d482c diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index 6e639724..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 *****************************************/ @@ -293,13 +306,11 @@ StatusBufferItem::StatusBufferItem(const BufferInfo &bufferInfo, NetworkItem *pa } QString StatusBufferItem::toolTip(int column) const { - Q_UNUSED(column); - QStringList toolTip; - - QString netName = Client::network(bufferInfo().networkId())->networkName(); - toolTip.append(tr("Status buffer of %1").arg(netName)); - - return tr("

%1

").arg(toolTip.join("
")); + NetworkItem *networkItem = qobject_cast(parent()); + if(networkItem) + return networkItem->toolTip(column); + else + return QString(); } /***************************************** @@ -321,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: @@ -948,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) {