#include "signalproxy.h"
#include "network.h"
#include "ircchannel.h"
-#include "ircuser.h"
#include "buffersettings.h"
}
bool BufferItem::setData(int column, const QVariant &value, int role) {
+ qDebug() << "BufferItem::setData(int column, const QVariant &value, int role):" << this << column << value << role;
switch(role) {
case NetworkModel::BufferActivityRole:
setActivityLevel((Buffer::ActivityLevel)value.toInt());
Q_ASSERT(_ircChannel);
QHash<UserCategoryItem *, QList<IrcUser *> > categories;
+
+ int categoryId = -1;
+ UserCategoryItem *categoryItem = 0;
+
foreach(IrcUser *ircUser, ircUsers) {
- UserCategoryItem *categoryItem;
- int categoryId = UserCategoryItem::categoryFromModes(_ircChannel->userModes(ircUser));
- if(!(categoryItem = qobject_cast<UserCategoryItem *>(childById(qHash(categoryId))))) {
+ categoryId = UserCategoryItem::categoryFromModes(_ircChannel->userModes(ircUser));
+ categoryItem = qobject_cast<UserCategoryItem *>(childById(qHash(categoryId)));
+ if(!categoryItem) {
categoryItem = new UserCategoryItem(categoryId, this);
categories[categoryItem] = QList<IrcUser *>();
newChild(categoryItem);
return;
}
- bool success = false;
UserCategoryItem *categoryItem = 0;
for(int i = 0; i < childCount(); i++) {
categoryItem = qobject_cast<UserCategoryItem *>(child(i));
- if((success = categoryItem->removeUser(ircUser))) {
+ if(categoryItem->removeUser(ircUser)) {
if(categoryItem->childCount() == 0)
removeChild(i);
break;
}
}
-
- if(!success) {
- qDebug() << "didn't find User:" << ircUser << qHash(ircUser);
- qDebug() << "==== Childlist for Item:" << this << id() << bufferName() << "====";
- for(int i = 0; i < childCount(); i++) {
- categoryItem = qobject_cast<UserCategoryItem *>(child(i));
- categoryItem->dumpChildList();
- }
- qDebug() << "==== End Of Childlist for Item:" << this << id() << bufferName() << "====";
- }
- Q_ASSERT(success);
}
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)))) && categoryItem->childById(qHash(ircUser)))
+ UserCategoryItem *categoryItem = qobject_cast<UserCategoryItem *>(childById(qHash(categoryId)));
+
+ if(categoryItem && categoryItem->childById(qHash(ircUser)))
return; // already in the right category;
-
- removeUserFromCategory(ircUser);
- addUserToCategory(ircUser);
+
+ // find the item that needs reparenting
+ IrcUserItem *ircUserItem = 0;
+ for(int i = 0; i < childCount(); i++) {
+ UserCategoryItem *categoryItem = qobject_cast<UserCategoryItem *>(child(i));
+ IrcUserItem *userItem = qobject_cast<IrcUserItem *>(categoryItem->childById(qHash(ircUser)));
+ if(userItem) {
+ ircUserItem = userItem;
+ break;
+ }
+ }
+
+ if(!ircUserItem) {
+ qWarning() << "BufferItem::userModeChanged(IrcUser *): unable to determine old category of" << ircUser;
+ return;
+ }
+ ircUserItem->reParent(categoryItem);
}
QString BufferItem::toolTip(int column) const {
return _lastSeen;
}
*/
+
/*****************************************
* Network Items
*****************************************/
: PropertyMapItem(QStringList() << "categoryName", parent),
_category(category)
{
-
}
// caching this makes no sense, since we display the user number dynamically
foreach(IrcUser *ircUser, ircUsers)
userItems << new IrcUserItem(ircUser, this);
newChilds(userItems);
+ emit dataChanged(0);
}
bool UserCategoryItem::removeUser(IrcUser *ircUser) {
- return removeChildById(qHash(ircUser));
+ bool success = removeChildById(qHash(ircUser));
+ if(success)
+ emit dataChanged(0);
+ return success;
}
int UserCategoryItem::categoryFromModes(const QString &modes) {
return false;
}
-IrcUser *IrcUserItem::ircUser() {
- return _ircUser;
-}
-
-quint64 IrcUserItem::id() const {
- return _id;
-}
-
QVariant IrcUserItem::data(int column, int role) const {
switch(role) {
case NetworkModel::ItemActiveRole: