void BufferItem::addUserToCategory(IrcUser *ircUser) {
Q_ASSERT(_ircChannel);
-
+
UserCategoryItem *categoryItem;
int categoryId = UserCategoryItem::categoryFromModes(_ircChannel->userModes(ircUser));
if(!(categoryItem = qobject_cast<UserCategoryItem *>(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<UserCategoryItem *>(child(i));
- if((userItem = qobject_cast<IrcUserItem *>(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<UserCategoryItem *>(childById(qHash(categoryId)))))
+ if((categoryItem = qobject_cast<UserCategoryItem *>(childById(qHash(categoryId)))) && categoryItem->childById((quint64)(ircUser)))
return; // already in the right category;
removeUserFromCategory(ircUser);
: PropertyMapItem(QStringList() << "categoryId", parent),
_category(category)
{
- connect(this, SIGNAL(childRemoved(int)),
- this, SLOT(checkNoChilds()));
}
QString UserCategoryItem::categoryId() {
return QString("Users");
}
-void UserCategoryItem::checkNoChilds() {
- if(childCount() == 0)
- deleteLater();
-}
-
quint64 UserCategoryItem::id() const {
return qHash(_category);
}
emit dataChanged(0);
}
void IrcUserItem::ircUserDestroyed() {
- deleteLater();
+ parent()->removeChildById(id());
+ // deleteLater();
}
/*****************************************