}
quint64 BufferItem::id() const {
- return bufferInfo().uid();
+ return bufferInfo().uid().toInt();
}
bool BufferItem::isStatusBuffer() 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:
void BufferItem::ircChannelDestroyed() {
emit dataChanged();
- for(int i = 0; i < childCount(); i++) {
- emit childDestroyed(i);
- removeChild(i);
- }
+ removeAllChilds();
}
QString BufferItem::bufferName() const {
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)))) && categoryItem->childById((quint64)(ircUser)))
+ return; // already in the right category;
+
removeUserFromCategory(ircUser);
addUserToCategory(ircUser);
}
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:
}
quint64 NetworkItem::id() const {
- return _networkId;
+ return _networkId.toInt();
}
bool NetworkItem::isActive() const {
: PropertyMapItem(QStringList() << "categoryId", parent),
_category(category)
{
- connect(this, SIGNAL(childDestroyed(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();
}
/*****************************************
// experimental stuff :)
QModelIndex NetworkModel::networkIndex(NetworkId networkId) {
- return indexById(networkId);
+ return indexById(networkId.toInt());
}
NetworkItem *NetworkModel::existsNetworkItem(NetworkId networkId) {
- return qobject_cast<NetworkItem *>(rootItem->childById(networkId));
+ return qobject_cast<NetworkItem *>(rootItem->childById(networkId.toInt()));
}
NetworkItem *NetworkModel::networkItem(NetworkId networkId) {
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()));
}
}
QStringList bufferlist;
QString netid, uid, bufferid;
foreach(QModelIndex index, indexes) {
- netid = QString::number(index.data(NetworkIdRole).value<NetworkId>());
- uid = QString::number(index.data(BufferIdRole).value<BufferId>());
+ netid = QString::number(index.data(NetworkIdRole).value<NetworkId>().toInt());
+ uid = QString::number(index.data(BufferIdRole).value<BufferId>().toInt());
bufferid = QString("%1:%2").arg(netid).arg(uid);
if(!bufferlist.contains(bufferid))
bufferlist << bufferid;
if(targetType != BufferItem::QueryType)
return false;
- QList< QPair<uint, uint> > bufferList = mimeDataToBufferList(data);
+ QList< QPair<NetworkId, BufferId> > 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<BufferId>())
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;