X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Ftreemodel.cpp;h=d22b602a8f0868f312e422876f46374899831dc4;hp=52439afec80409d604007c56ee7231bb915fb731;hb=e9772bbd46ac2006b3f283bfc9f06b013d174ae3;hpb=ef0e65458bf4e1cbc01399fe0e025a5b4fd327dc diff --git a/src/client/treemodel.cpp b/src/client/treemodel.cpp index 52439afe..d22b602a 100644 --- a/src/client/treemodel.cpp +++ b/src/client/treemodel.cpp @@ -18,7 +18,6 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include "global.h" #include "treemodel.h" /***************************************** @@ -26,19 +25,22 @@ *****************************************/ TreeItem::TreeItem(const QList &data, TreeItem *parent) : QObject(parent), - parentItem(parent), itemData(data), - _flags(Qt::ItemIsSelectable | Qt::ItemIsEnabled) + _parentItem(parent), + _flags(Qt::ItemIsSelectable | Qt::ItemIsEnabled) { } -TreeItem::TreeItem(TreeItem *parent) { - itemData = QList(); - parentItem = parent; +TreeItem::TreeItem(TreeItem *parent) + : QObject(parent), + itemData(QList()), + _parentItem(parent), + _flags(Qt::ItemIsSelectable | Qt::ItemIsEnabled) +{ } TreeItem::~TreeItem() { - qDeleteAll(childItems); + qDeleteAll(_childItems); } uint TreeItem::id() const { @@ -46,45 +48,47 @@ uint TreeItem::id() const { } void TreeItem::appendChild(TreeItem *item) { - childItems.append(item); - childHash[item->id()] = item; + _childItems.append(item); + _childHash[item->id()] = item; + connect(item, SIGNAL(destroyed()), + this, SLOT(childDestroyed())); } void TreeItem::removeChild(int row) { - if(row >= childItems.size()) + if(row >= _childItems.size()) return; - TreeItem *treeitem = childItems.value(row); - childItems.removeAt(row); - childHash.remove(childHash.key(treeitem)); + TreeItem *treeitem = _childItems.value(row); + _childItems.removeAt(row); + _childHash.remove(_childHash.key(treeitem)); } TreeItem *TreeItem::child(int row) const { - if(row < childItems.size()) - return childItems.value(row); + if(row < _childItems.size()) + return _childItems.value(row); else return 0; } TreeItem *TreeItem::childById(const uint &id) const { - if(childHash.contains(id)) - return childHash.value(id); + if(_childHash.contains(id)) + return _childHash.value(id); else return 0; } int TreeItem::childCount() const { - return childItems.count(); + return _childItems.count(); } int TreeItem::row() const { - if(parentItem) - return parentItem->childItems.indexOf(const_cast(this)); + if(_parentItem) + return _parentItem->_childItems.indexOf(const_cast(this)); else return 0; } TreeItem *TreeItem::parent() { - return parentItem; + return _parentItem; } int TreeItem::columnCount() const { @@ -99,7 +103,6 @@ QVariant TreeItem::data(int column, int role) const { } Qt::ItemFlags TreeItem::flags() const { - // some sane defaults return _flags; } @@ -107,6 +110,12 @@ void TreeItem::setFlags(Qt::ItemFlags flags) { _flags = flags; } +void TreeItem::childDestroyed() { + TreeItem *item = static_cast(sender()); + removeChild(item->row()); +} + + /***************************************** * TreeModel @@ -159,7 +168,7 @@ QModelIndex TreeModel::parent(const QModelIndex &index) const { return QModelIndex(); TreeItem *childItem = static_cast(index.internalPointer()); - TreeItem *parentItem = childItem->parent(); + TreeItem *parentItem = static_cast(childItem->parent()); if(parentItem == rootItem) return QModelIndex(); @@ -169,9 +178,6 @@ QModelIndex TreeModel::parent(const QModelIndex &index) const { int TreeModel::rowCount(const QModelIndex &parent) const { TreeItem *parentItem; - if(parent.column() > 0) - return 0; - if(!parent.isValid()) parentItem = rootItem; else