#ifndef SciQWorkspaceModel_H_GUARD #define SciQWorkspaceModel_H_GUARD #include #include class SciQWorkspaceItem { public: SciQWorkspaceItem(QString s, SciQWorkspaceItem *p = 0) : name(s), parent(p) { if(parent) parent->children.append(this); } ~SciQWorkspaceItem() { if(children.count()) for(int i = 0; i < children.count(); ++i) delete children[i]; } SciQWorkspaceItem *getParent() { return parent; } int childCount() { return children.count(); } SciQWorkspaceItem *child(int i) { return children.at(i); } int row() { int r = 0; if(parent) { r = parent->children.indexOf(this); r = r > -1 ? r : 0; } return r; } QString getName() { return name; } private: QString name; SciQWorkspaceItem *parent; QList children; }; class SciQWorkspaceModel : public QAbstractItemModel { Q_OBJECT public: SciQWorkspaceModel(SciQWorkspaceItem *, QObject *parent = 0); ~SciQWorkspaceModel(); QVariant data(const QModelIndex &index, int role) const; Qt::ItemFlags flags(const QModelIndex &index) const; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; QModelIndex parent(const QModelIndex &index) const; int rowCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex&) const; // bool hasChildren ( const QModelIndex & parent = QModelIndex() ) const; private: SciQWorkspaceItem *root; }; #endif /* SciQWorkspaceModel_H_GUARD */