int categoryId = UserCategoryItem::categoryFromModes(_ircChannel->userModes(ircUser));
if(!(categoryItem = qobject_cast<UserCategoryItem *>(childById(qHash(categoryId))))) {
categoryItem = new UserCategoryItem(categoryId, this);
- emit newChild(categoryItem);
+ newChild(categoryItem);
}
categoryItem->addUser(ircUser);
+
+ int totalusers = 0;
+ for(int i = 0; i < childCount(); i++) {
+ totalusers += child(i)->childCount();
+ }
}
void BufferItem::part(IrcUser *ircUser) {
- if(!ircUser)
+ if(!ircUser) {
+ qWarning() << bufferName() << "BufferItem::part(): unknown User" << ircUser;
return;
+ }
removeUserFromCategory(ircUser);
emit dataChanged(2);
void BufferItem::removeUserFromCategory(IrcUser *ircUser) {
Q_ASSERT(_ircChannel);
+ bool success = false;
UserCategoryItem *categoryItem = 0;
for(int i = 0; i < childCount(); i++) {
categoryItem = qobject_cast<UserCategoryItem *>(child(i));
- categoryItem->removeChildById((quint64)ircUser);
- if(categoryItem->childCount() == 0)
- removeChild(i);
+ if(success = categoryItem->removeChildById((quint64)ircUser)) {
+ if(categoryItem->childCount() == 0)
+ removeChild(i);
+ break;
+ }
+ }
+ Q_ASSERT(success);
+
+ int totalusers = 0;
+ for(int i = 0; i < childCount(); i++) {
+ totalusers += child(i)->childCount();
}
}
}
void UserCategoryItem::addUser(IrcUser *ircUser) {
- emit newChild(new IrcUserItem(ircUser, this));
+ newChild(new IrcUserItem(ircUser, this));
}
int UserCategoryItem::categoryFromModes(const QString &modes) {
}
return categories.count();
}
+
+QVariant UserCategoryItem::data(int column, int role) const {
+ switch(role) {
+ case NetworkModel::ItemTypeRole:
+ return NetworkModel::UserCategoryItemType;
+ case NetworkModel::BufferIdRole:
+ return parent()->data(column, role);
+ case NetworkModel::NetworkIdRole:
+ return parent()->data(column, role);
+ case NetworkModel::BufferInfoRole:
+ return parent()->data(column, role);
+ default:
+ return PropertyMapItem::data(column, role);
+ }
+}
+
/*****************************************
* Irc User Items
}
QVariant IrcUserItem::data(int column, int role) const {
- if(role != Qt::ToolTipRole)
+ switch(role) {
+ case NetworkModel::ItemTypeRole:
+ return NetworkModel::IrcUserItemType;
+ case NetworkModel::BufferIdRole:
+ return parent()->data(column, role);
+ case NetworkModel::NetworkIdRole:
+ return parent()->data(column, role);
+ case NetworkModel::BufferInfoRole:
+ return parent()->data(column, role);
+ default:
return PropertyMapItem::data(column, role);
+ }
+}
+QString IrcUserItem::toolTip(int column) const {
+ Q_UNUSED(column);
return "<p><b>" + nickName() + "</b><br />" + _ircUser->hostmask() + "</p>";
}
if(netItem == 0) {
netItem = new NetworkItem(networkId, rootItem);
- appendChild(rootItem, netItem);
+ rootItem->newChild(netItem);
}
Q_ASSERT(netItem);
if(bufItem == 0) {
NetworkItem *netItem = networkItem(bufferInfo.networkId());
bufItem = new BufferItem(bufferInfo, netItem);
- appendChild(netItem, bufItem);
+ netItem->newChild(bufItem);
}
Q_ASSERT(bufItem);