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);
}
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);
}
}
: 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();
}
/*****************************************
static int categoryFromModes(const QString &modes);
-private slots:
- void checkNoChilds();
-
private:
int _category;
removeChild(defaultColumn(), row);
}
+void AbstractTreeItem::removeChildById(int column, const quint64 &id) {
+ if(!_childHash[column].contains(id))
+ return;
+
+ AbstractTreeItem *treeItem = _childHash[column][id];
+ int row = _childItems[column].indexOf(treeItem);
+ Q_ASSERT(row >= 0);
+ removeChild(column, row);
+}
+
+void AbstractTreeItem::removeChildById(const quint64 &id) {
+ removeChildById(defaultColumn(), id);
+}
+
void AbstractTreeItem::removeAllChilds() {
if(childCount() == 0)
return;
emit beginRemoveChilds(0, childCount() - 1);
AbstractTreeItem *child;
- foreach(int key, _childItems.keys()) {
- QList<AbstractTreeItem *>::iterator iter = _childItems[key].begin();
- while(iter != _childItems[key].end()) {
+ foreach(int column, _childItems.keys()) {
+ QList<AbstractTreeItem *>::iterator iter = _childItems[column].begin();
+ while(iter != _childItems[column].end()) {
child = *iter;
- iter = _childItems[key].erase(iter);
+ _childHash[column].remove(_childHash[column].key(child));
+ iter = _childItems[column].erase(iter);
disconnect(child, 0, this, 0);
child->removeAllChilds();
child->deleteLater();
connect(child, SIGNAL(newChild(AbstractTreeItem *)),
this, SLOT(newChild(AbstractTreeItem *)));
-// connect(child, SIGNAL(childRemoved(int)),
-// this, SLOT(childRemoved(int)));
-
connect(child, SIGNAL(beginRemoveChilds(int, int)),
this, SLOT(beginRemoveChilds(int, int)));
endRemoveRows();
}
-void TreeModel::childRemoved(int row) {
- QModelIndex parent = indexByItem(static_cast<AbstractTreeItem *>(sender()));
- beginRemoveRows(parent, row, row);
- endRemoveRows();
-}
-
-void TreeModel::childsRemoved(int firstRow, int lastRow) {
- QModelIndex parent = indexByItem(static_cast<AbstractTreeItem *>(sender()));
- beginRemoveRows(parent, firstRow, lastRow);
- endRemoveRows();
-
-}
-
bool TreeModel::removeRow(int row, const QModelIndex &parent) {
if(row > rowCount(parent))
return false;
void removeChild(int column, int row);
void removeChild(int row);
+
+ void removeChildById(int column, const quint64 &id);
+ void removeChildById(const quint64 &id);
+
void removeAllChilds();
virtual quint64 id() const;
signals:
void dataChanged(int column = -1);
void newChild(AbstractTreeItem *);
- void childRemoved(int row);
- void childsRemoved(int firstRow, int lastRow);
void beginRemoveChilds(int firstRow, int lastRow);
void endRemoveChilds();
void beginRemoveChilds(int firstRow, int lastRow);
void endRemoveChilds();
- void childRemoved(int row);
- void childsRemoved(int firstRow, int lastRow);
-
protected:
void appendChild(AbstractTreeItem *parent, AbstractTreeItem *child);
void SignalProxy::handleInitData(QIODevice *sender, const QVariantList ¶ms) {
Q_UNUSED(sender)
if(params.count() != 3) {
- qWarning() << "SignalProxy::handleInitRequest() received initRequest with invalid param Count:"
+ qWarning() << "SignalProxy::handleInitData() received initData with invalid param Count:"
<< params;
return;
}
QVariantMap propertyMap(params[2].toMap());
if(!_syncSlave.contains(className)) {
- qWarning() << "SignalProxy::handleInitRequest() received initRequest for unregistered Class:"
+ qWarning() << "SignalProxy::handleInitData() received initData for unregistered Class:"
<< className;
return;
}
if(!_syncSlave[className].contains(objectName)) {
- qWarning() << "SignalProxy::handleInitRequest() received initRequest for unregistered Object:"
+ qWarning() << "SignalProxy::handleInitData() received initData for unregistered Object:"
<< className << objectName;
return;
}
quasselVersion = "0.2.0-pre";
quasselDate = "2008-01-20";
- quasselBuild = 362;
+ quasselBuild = 363;
//! Minimum client build number the core needs
clientBuildNeeded = 358;