X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Ftreemodel.h;h=e4b5ca3a4a94156141c03ea16f9520de146e6d8f;hp=6dd6ed8b6a99445239fe3e4e95110a54a146ba03;hb=ff7c0776d68d9749b07f54a3e26c342dfb12f081;hpb=a33e42aee121185f479667b2104a15fc2033762e diff --git a/src/client/treemodel.h b/src/client/treemodel.h index 6dd6ed8b..e4b5ca3a 100644 --- a/src/client/treemodel.h +++ b/src/client/treemodel.h @@ -18,13 +18,12 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#ifndef _TREEMODEL_H_ -#define _TREEMODEL_H_ +#ifndef TREEMODEL_H +#define TREEMODEL_H #include #include #include -#include #include #include // needed for debug @@ -34,25 +33,26 @@ *****************************************/ class AbstractTreeItem : public QObject { Q_OBJECT - Q_PROPERTY(quint64 id READ id) 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); bool removeChild(int row); - bool removeChildById(const quint64 &id); + inline bool removeChild(AbstractTreeItem *child) { return removeChild(child->row()); } void removeAllChilds(); - virtual quint64 id() const; - bool reParent(AbstractTreeItem *newParent); AbstractTreeItem *child(int row) const; - AbstractTreeItem *childById(const quint64 &id) const; int childCount(int column = 0) const; @@ -61,11 +61,13 @@ public: virtual QVariant data(int column, int role) const = 0; virtual bool setData(int column, const QVariant &value, int role) = 0; - virtual Qt::ItemFlags flags() const; - virtual void setFlags(Qt::ItemFlags); + 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; - AbstractTreeItem *parent() const; + inline AbstractTreeItem *parent() const { return qobject_cast(QObject::parent()); } void dumpChildList(); @@ -77,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); } }; @@ -150,7 +159,6 @@ public: QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; - QModelIndex indexById(quint64 id, const QModelIndex &parent = QModelIndex()) const; QModelIndex indexByItem(AbstractTreeItem *item) const; QModelIndex parent(const QModelIndex &index) const;