Line # Revision Author
1 1 moose #ifndef SciQWorkspaceModel_H_GUARD
2 #define SciQWorkspaceModel_H_GUARD
3
4 #include <QAbstractItemModel>
5 #include <QString>
6 class SciQWorkspaceItem
7 {
8 public:
9 SciQWorkspaceItem(QString s, SciQWorkspaceItem *p = 0) : name(s), parent(p) { if(parent) parent->children.append(this); }
10 ~SciQWorkspaceItem() { if(children.count()) for(int i = 0; i < children.count(); ++i) delete children[i]; }
11
12 SciQWorkspaceItem *getParent() { return parent; }
13 int childCount() { return children.count(); }
14 SciQWorkspaceItem *child(int i) { return children.at(i); }
15 int row() { int r = 0; if(parent) { r = parent->children.indexOf(this); r = r > -1 ? r : 0; } return r; }
16 QString getName() { return name; }
17 private:
18 QString name;
19 SciQWorkspaceItem *parent;
20 QList<SciQWorkspaceItem *> children;
21 };
22
23 class SciQWorkspaceModel : public QAbstractItemModel {
24 Q_OBJECT
25
26 public:
27 SciQWorkspaceModel(SciQWorkspaceItem *, QObject *parent = 0);
28 ~SciQWorkspaceModel();
29
30 QVariant data(const QModelIndex &index, int role) const;
31 Qt::ItemFlags flags(const QModelIndex &index) const;
32 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
33 QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
34 QModelIndex parent(const QModelIndex &index) const;
35 int rowCount(const QModelIndex &parent = QModelIndex()) const;
36 int columnCount(const QModelIndex&) const;
37 // bool hasChildren ( const QModelIndex & parent = QModelIndex() ) const;
38
39 private:
40 SciQWorkspaceItem *root;
41 };
42
43 #endif /* SciQWorkspaceModel_H_GUARD */