X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Ftreemodel.h;h=e585c0b0ea1ae1b3d2c3bd7685a38b4ab79f2796;hp=8a5e3ac9be272ac9f5c57743a2284beaae942636;hb=46d75f41de7c1aaee605c096da28d4b0d8abf138;hpb=fe9ec46e2b6394b7735a73da5c438b10ba7e5e82 diff --git a/src/client/treemodel.h b/src/client/treemodel.h index 8a5e3ac9..e585c0b0 100644 --- a/src/client/treemodel.h +++ b/src/client/treemodel.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * + * Copyright (C) 2005-09 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -35,8 +35,13 @@ class AbstractTreeItem : public QObject { Q_OBJECT public: + enum TreeItemFlag { + NoTreeItemFlag = 0x00, + DeleteOnLastChildRemoved = 0x01 + }; + Q_DECLARE_FLAGS(TreeItemFlags, TreeItemFlag) + AbstractTreeItem(AbstractTreeItem *parent = 0); - virtual ~AbstractTreeItem(); bool newChild(AbstractTreeItem *child); bool newChilds(const QList &items); @@ -59,6 +64,8 @@ public: virtual inline Qt::ItemFlags flags() const { return _flags; } virtual inline void setFlags(Qt::ItemFlags flags) { _flags = flags; } + inline AbstractTreeItem::TreeItemFlags treeItemFlags() const { return _treeItemFlags; } + inline void setTreeItemFlags(AbstractTreeItem::TreeItemFlags flags) { _treeItemFlags = flags; } int row() const; inline AbstractTreeItem *parent() const { return qobject_cast(QObject::parent()); } @@ -72,10 +79,17 @@ signals: void beginRemoveChilds(int firstRow, int lastRow); void endRemoveChilds(); - + +protected: + void customEvent(QEvent *event); + private: QList _childItems; Qt::ItemFlags _flags; + TreeItemFlags _treeItemFlags; + + void removeChildLater(AbstractTreeItem *child); + inline void checkForDeletion() { if(treeItemFlags() & DeleteOnLastChildRemoved && childCount() == 0) parent()->removeChildLater(this); } };