X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fnetworkmodel.cpp;h=784f3fc816bbfb2a0c7247bedfd7693280d98817;hp=59485da85f1745983068cb0d1b39c93683c0cfb9;hb=2f11200e02c352180b1e7546ae1c88b08566275c;hpb=d1b6499b0b848d4287efae89107576548533502c diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index 59485da8..784f3fc8 100644 --- a/src/client/networkmodel.cpp +++ b/src/client/networkmodel.cpp @@ -59,7 +59,7 @@ const BufferInfo &BufferItem::bufferInfo() const { } quint64 BufferItem::id() const { - return bufferInfo().uid(); + return bufferInfo().uid().toInt(); } bool BufferItem::isStatusBuffer() const { @@ -94,9 +94,9 @@ QVariant BufferItem::data(int column, int role) const { case NetworkModel::ItemTypeRole: return NetworkModel::BufferItemType; case NetworkModel::BufferIdRole: - return bufferInfo().uid(); + return qVariantFromValue(bufferInfo().uid()); case NetworkModel::NetworkIdRole: - return bufferInfo().networkId(); + return qVariantFromValue(bufferInfo().networkId()); case NetworkModel::BufferTypeRole: return int(bufferType()); case NetworkModel::ItemActiveRole: @@ -132,10 +132,7 @@ void BufferItem::attachIrcChannel(IrcChannel *ircChannel) { void BufferItem::ircChannelDestroyed() { emit dataChanged(); - for(int i = 0; i < childCount(); i++) { - emit childDestroyed(i); - removeChild(i); - } + removeAllChilds(); } QString BufferItem::bufferName() const { @@ -174,35 +171,42 @@ void BufferItem::join(IrcUser *ircUser) { void BufferItem::addUserToCategory(IrcUser *ircUser) { Q_ASSERT(_ircChannel); - + UserCategoryItem *categoryItem; int categoryId = UserCategoryItem::categoryFromModes(_ircChannel->userModes(ircUser)); if(!(categoryItem = qobject_cast(childById(qHash(categoryId))))) { categoryItem = new UserCategoryItem(categoryId, this); emit newChild(categoryItem); } - categoryItem->addUser(ircUser); } void BufferItem::part(IrcUser *ircUser) { - Q_UNUSED(ircUser); + if(!ircUser) + return; + + removeUserFromCategory(ircUser); emit dataChanged(2); } void BufferItem::removeUserFromCategory(IrcUser *ircUser) { UserCategoryItem *categoryItem = 0; - IrcUserItem *userItem; for(int i = 0; i < childCount(); i++) { categoryItem = qobject_cast(child(i)); - if((userItem = qobject_cast(categoryItem->childById((quint64)ircUser)))) { - userItem->deleteLater(); - return; - } + categoryItem->removeChildById((quint64)ircUser); + if(categoryItem->childCount() == 0) + removeChild(i); } } void BufferItem::userModeChanged(IrcUser *ircUser) { + Q_ASSERT(_ircChannel); + + UserCategoryItem *categoryItem; + int categoryId = UserCategoryItem::categoryFromModes(_ircChannel->userModes(ircUser)); + if((categoryItem = qobject_cast(childById(qHash(categoryId)))) && categoryItem->childById((quint64)(ircUser))) + return; // already in the right category; + removeUserFromCategory(ircUser); addUserToCategory(ircUser); } @@ -220,7 +224,7 @@ NetworkItem::NetworkItem(const NetworkId &netid, AbstractTreeItem *parent) QVariant NetworkItem::data(int column, int role) const { switch(role) { case NetworkModel::NetworkIdRole: - return _networkId; + return qVariantFromValue(_networkId); case NetworkModel::ItemTypeRole: return NetworkModel::NetworkItemType; case NetworkModel::ItemActiveRole: @@ -231,7 +235,7 @@ QVariant NetworkItem::data(int column, int role) const { } quint64 NetworkItem::id() const { - return _networkId; + return _networkId.toInt(); } bool NetworkItem::isActive() const { @@ -319,8 +323,6 @@ UserCategoryItem::UserCategoryItem(int category, AbstractTreeItem *parent) : PropertyMapItem(QStringList() << "categoryId", parent), _category(category) { - connect(this, SIGNAL(childDestroyed(int)), - this, SLOT(checkNoChilds())); } QString UserCategoryItem::categoryId() { @@ -330,11 +332,6 @@ QString UserCategoryItem::categoryId() { return QString("Users"); } -void UserCategoryItem::checkNoChilds() { - if(childCount() == 0) - deleteLater(); -} - quint64 UserCategoryItem::id() const { return qHash(_category); } @@ -365,7 +362,7 @@ IrcUserItem::IrcUserItem(IrcUser *ircUser, AbstractTreeItem *parent) this, SLOT(setNick(QString))); } -QString IrcUserItem::nickName() { +QString IrcUserItem::nickName() const { return _ircUser->nick(); } @@ -377,12 +374,20 @@ quint64 IrcUserItem::id() const { return (quint64)_ircUser; } +QVariant IrcUserItem::data(int column, int role) const { + if(role != Qt::ToolTipRole) + return PropertyMapItem::data(column, role); + + return "

" + nickName() + "
" + _ircUser->hostmask() + "

"; +} + void IrcUserItem::setNick(QString newNick) { Q_UNUSED(newNick); emit dataChanged(0); } void IrcUserItem::ircUserDestroyed() { - deleteLater(); + parent()->removeChildById(id()); + // deleteLater(); } /***************************************** @@ -413,11 +418,11 @@ Buffer *NetworkModel::getBufferByIndex(const QModelIndex &index) const { // experimental stuff :) QModelIndex NetworkModel::networkIndex(NetworkId networkId) { - return indexById(networkId); + return indexById(networkId.toInt()); } NetworkItem *NetworkModel::existsNetworkItem(NetworkId networkId) { - return qobject_cast(rootItem->childById(networkId)); + return qobject_cast(rootItem->childById(networkId.toInt())); } NetworkItem *NetworkModel::networkItem(NetworkId networkId) { @@ -436,7 +441,7 @@ QModelIndex NetworkModel::bufferIndex(BufferId bufferId) { AbstractTreeItem *netItem, *bufferItem; for(int i = 0; i < rootItem->childCount(); i++) { netItem = rootItem->child(i); - if((bufferItem = netItem->childById(bufferId))) { + if((bufferItem = netItem->childById(bufferId.toInt()))) { return indexById(bufferItem->id(), networkIndex(netItem->id())); } } @@ -502,8 +507,8 @@ QMimeData *NetworkModel::mimeData(const QModelIndexList &indexes) const { QStringList bufferlist; QString netid, uid, bufferid; foreach(QModelIndex index, indexes) { - netid = QString::number(index.data(NetworkIdRole).value()); - uid = QString::number(index.data(BufferIdRole).value()); + netid = QString::number(index.data(NetworkIdRole).value().toInt()); + uid = QString::number(index.data(BufferIdRole).value().toInt()); bufferid = QString("%1:%2").arg(netid).arg(uid); if(!bufferlist.contains(bufferid)) bufferlist << bufferid; @@ -527,24 +532,24 @@ bool NetworkModel::dropMimeData(const QMimeData *data, Qt::DropAction action, in if(targetType != BufferItem::QueryType) return false; - QList< QPair > bufferList = mimeDataToBufferList(data); + QList< QPair > bufferList = mimeDataToBufferList(data); // exactly one buffer has to be dropped if(bufferList.count() != 1) return false; - uint netId = bufferList.first().first; - uint bufferId = bufferList.first().second; + NetworkId netId = bufferList.first().first; + BufferId bufferId = bufferList.first().second; // no self merges (would kill us) if(bufferId == parent.data(BufferIdRole).value()) return false; - Q_ASSERT(rootItem->childById(netId)); - Q_ASSERT(rootItem->childById(netId)->childById(bufferId)); + Q_ASSERT(rootItem->childById(netId.toInt())); + Q_ASSERT(rootItem->childById(netId.toInt())->childById(bufferId.toInt())); // source must be a query too - BufferItem::Type sourceType = (BufferItem::Type)rootItem->childById(netId)->childById(bufferId)->data(0, BufferTypeRole).toInt(); + BufferItem::Type sourceType = (BufferItem::Type)rootItem->childById(netId.toInt())->childById(bufferId.toInt())->data(0, BufferTypeRole).toInt(); if(sourceType != BufferItem::QueryType) return false;