X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Ftreemodel.cpp;h=929622d6af3eb92ec81e5b6dfcce91027c217037;hp=2983e5ff4c3afde3675b9ce92c217ae23b070dc5;hb=7df7429c009d2bea4c516e87f1ec4c956c722e09;hpb=c4507cf512b6fd04e5c75a7ac00b9c2888fb646f diff --git a/src/client/treemodel.cpp b/src/client/treemodel.cpp index 2983e5ff..929622d6 100644 --- a/src/client/treemodel.cpp +++ b/src/client/treemodel.cpp @@ -86,15 +86,33 @@ void AbstractTreeItem::removeChild(int row) { 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::iterator iter = _childItems[key].begin(); - while(iter != _childItems[key].end()) { + foreach(int column, _childItems.keys()) { + QList::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(); @@ -427,9 +445,6 @@ void TreeModel::appendChild(AbstractTreeItem *parent, AbstractTreeItem *child) { 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))); @@ -450,19 +465,6 @@ void TreeModel::endRemoveChilds() { endRemoveRows(); } -void TreeModel::childRemoved(int row) { - QModelIndex parent = indexByItem(static_cast(sender())); - beginRemoveRows(parent, row, row); - endRemoveRows(); -} - -void TreeModel::childsRemoved(int firstRow, int lastRow) { - QModelIndex parent = indexByItem(static_cast(sender())); - beginRemoveRows(parent, firstRow, lastRow); - endRemoveRows(); - -} - bool TreeModel::removeRow(int row, const QModelIndex &parent) { if(row > rowCount(parent)) return false;