+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 column, _childItems.keys()) {
+ QList<AbstractTreeItem *>::iterator iter = _childItems[column].begin();
+ while(iter != _childItems[column].end()) {
+ child = *iter;
+ _childHash[column].remove(_childHash[column].key(child));
+ iter = _childItems[column].erase(iter);
+ disconnect(child, 0, this, 0);
+ child->removeAllChilds();
+ child->deleteLater();
+ }
+ }
+ emit endRemoveChilds();
+}
+