X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Ftreemodel.h;h=e585c0b0ea1ae1b3d2c3bd7685a38b4ab79f2796;hp=6f2575c08f86e637fb626fb1977f29784eb2f868;hb=46d75f41de7c1aaee605c096da28d4b0d8abf138;hpb=4604f6d6f0daa7980e36753b2a417ab709d9ce6a diff --git a/src/client/treemodel.h b/src/client/treemodel.h index 6f2575c0..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 * @@ -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,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