#include "signalproxy.h"
#include "network.h"
#include "ircchannel.h"
-#include "ircuser.h"
#include "buffersettings.h"
#include "util.h" // get rid of this (needed for isChannelName)
-
/*****************************************
* Fancy Buffer Items
*****************************************/
: PropertyMapItem(QStringList() << "bufferName" << "topic" << "nickCount", parent),
_bufferInfo(bufferInfo),
_bufferName(bufferInfo.bufferName()),
- _activity(Buffer::NoActivity)
+ _activity(Buffer::NoActivity),
+ _ircChannel(0)
{
Qt::ItemFlags flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled;
if(bufferType() == BufferInfo::QueryBuffer)
return qobject_cast<NetworkItem *>(parent())->isActive();
}
-bool BufferItem::setActivityLevel(Buffer::ActivityLevel level) {
- _activity = level;
- emit dataChanged();
- return true;
+void BufferItem::setActivityLevel(Buffer::ActivityLevel level) {
+ if(_activity != level) {
+ _activity = level;
+ emit dataChanged();
+ }
}
void BufferItem::updateActivityLevel(Buffer::ActivityLevel level) {
}
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:
- return setActivityLevel((Buffer::ActivityLevel)value.toInt());
+ setActivityLevel((Buffer::ActivityLevel)value.toInt());
+ return true;
default:
return PropertyMapItem::setData(column, value, role);
}
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 {
toolTip.append(tr("<b>Topic:</b> %1").arg(_topic));
}
}
+ if(_ircChannel) {
+ QString channelMode = _ircChannel->channelModeString(); // channelModeString is compiled on the fly -> thus cache the result
+ if(!channelMode.isEmpty())
+ toolTip.append(tr("<b>Mode:</b> %1").arg(channelMode));
+ }
} else {
toolTip.append(tr("Not active <br /> Double-click to join"));
}
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: