X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Ftreemodel.h;h=e4b5ca3a4a94156141c03ea16f9520de146e6d8f;hp=599956e2709d293d8c804a11a7997ad61e49619c;hb=ff7c0776d68d9749b07f54a3e26c342dfb12f081;hpb=9850247cc7533d35d71d202e32d9734197bb6f08 diff --git a/src/client/treemodel.h b/src/client/treemodel.h index 599956e2..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,36 +33,41 @@ *****************************************/ 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() const; + int childCount(int column = 0) const; virtual int columnCount() const = 0; 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(); @@ -75,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); } }; @@ -148,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; @@ -188,6 +198,7 @@ private slots: void debug_rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end); void debug_rowsInserted(const QModelIndex &parent, int start, int end); void debug_rowsRemoved(const QModelIndex &parent, int start, int end); + void debug_dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight); }; #endif