X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Ftreemodel.h;h=e4b5ca3a4a94156141c03ea16f9520de146e6d8f;hp=2ce2befeebb99954622c6fb1b4aa673b0041b0c7;hb=ff7c0776d68d9749b07f54a3e26c342dfb12f081;hpb=53e1a67785c97daa8d7ef0ea7694ac3a230a1a2e diff --git a/src/client/treemodel.h b/src/client/treemodel.h index 2ce2befe..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,62 +33,63 @@ *****************************************/ 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(int column, AbstractTreeItem *child); bool newChild(AbstractTreeItem *child); - - bool removeChild(int column, int row); - bool removeChild(int row); + bool newChilds(const QList &items); - bool removeChildById(int column, const quint64 &id); - bool removeChildById(const quint64 &id); - + bool removeChild(int row); + inline bool removeChild(AbstractTreeItem *child) { return removeChild(child->row()); } void removeAllChilds(); - virtual quint64 id() const; - - AbstractTreeItem *child(int column, int row) const; + bool reParent(AbstractTreeItem *newParent); + AbstractTreeItem *child(int row) const; - - AbstractTreeItem *childById(int column, const quint64 &id) const; - AbstractTreeItem *childById(const quint64 &id) const; - int childCount(int column) 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; } - int column() const; + 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(); - + signals: void dataChanged(int column = -1); - void beginAppendChilds(int column, int firstRow, int lastRow); + void beginAppendChilds(int firstRow, int lastRow); void endAppendChilds(); - void beginRemoveChilds(int column, int firstRow, int lastRow); + void beginRemoveChilds(int firstRow, int lastRow); void endRemoveChilds(); - + +protected: + void customEvent(QEvent *event); + private: - QHash > _childItems; + QList _childItems; Qt::ItemFlags _flags; + TreeItemFlags _treeItemFlags; - int defaultColumn() const; + void removeChildLater(AbstractTreeItem *child); + inline void checkForDeletion() { if(treeItemFlags() & DeleteOnLastChildRemoved && childCount() == 0) parent()->removeChildLater(this); } }; @@ -144,6 +144,11 @@ class TreeModel : public QAbstractItemModel { Q_OBJECT public: + enum myRoles { + SortRole = Qt::UserRole, + UserRole + }; + TreeModel(const QList &, QObject *parent = 0); virtual ~TreeModel(); @@ -154,8 +159,7 @@ 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, int column = 0) const; + QModelIndex indexByItem(AbstractTreeItem *item) const; QModelIndex parent(const QModelIndex &index) const; @@ -167,10 +171,10 @@ public: private slots: void itemDataChanged(int column = -1); - void beginAppendChilds(int column, int firstRow, int lastRow); + void beginAppendChilds(int firstRow, int lastRow); void endAppendChilds(); - void beginRemoveChilds(int column, int firstRow, int lastRow); + void beginRemoveChilds(int firstRow, int lastRow); void endRemoveChilds(); protected: @@ -194,9 +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); - -private: - QHash > _childLists; + void debug_dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight); }; #endif