/* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ #ifndef SMTREEMODEL_H #define SMTREEMODEL_H #include #include #include #include class SmTreeItem; class SmTreeModel : public QAbstractItemModel { Q_OBJECT public: explicit SmTreeModel(const QStringList &headers, QObject *parent = 0); virtual ~SmTreeModel(); // counts virtual int rowCount(const QModelIndex &parent) const; virtual int columnCount(const QModelIndex &parent) const; // index, parent and flags virtual QModelIndex index(int row, int column, const QModelIndex &parent) const; virtual QModelIndex parent(const QModelIndex &child) const; virtual Qt::ItemFlags flags(const QModelIndex &index) const; // headers + data virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const; virtual const QHash headerData() const; virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role); virtual QVariant data(const QModelIndex &index, int role) const; virtual bool setData(const QModelIndex &index, const QVariant &value, int role); virtual QModelIndex find(const QVariant &value, int column = 0, const QModelIndex &pIdx = QModelIndex()) const; virtual QModelIndex findRecursive(const QVariant &value, int column, const QModelIndex &start) const; virtual bool matchRecursive(const QModelIndex &pIdx, const QRegExp ®ex, int column = 0) const; virtual bool checkParents(const SmTreeItem *item, const QRegExp ®ex, int column) const; // root + parent item bool setRoot(SmTreeItem *rootItem); SmTreeItem *root() const { return mRootItem; } QModelIndex rootIndex() const; SmTreeItem *parentItem(const QModelIndex &child) const; void reparent(const QModelIndex &idx, const QModelIndex &newParent, bool sorted = false); // row manipulation virtual bool insertRows(int row, int count, const QModelIndex &pIdx); virtual bool removeRows(int row, int count, const QModelIndex &pIdx); bool addRow(const QList &data, const QModelIndex &pIdx, bool sorted = false); bool appendRow(const QList &data, const QModelIndex &pIdx); //misc void setDecorationIcon(const QIcon &icon) { mDecorationIcon = icon; } const QIcon decorationIcon() const { return mDecorationIcon; } protected: SmTreeItem *itemAt(const QModelIndex &index) const; private: QStringList mHeaders; SmTreeItem *mRootItem; QHash mHeaderData; QIcon mDecorationIcon; }; #endif