]> git.cworth.org Git - apitrace/blob - gui/apitracemodel.h
Make state lookups with on-demand loading work.
[apitrace] / gui / apitracemodel.h
1 #ifndef APITRACEMODEL_H
2 #define APITRACEMODEL_H
3
4
5 #include <QAbstractItemModel>
6 #include <QModelIndex>
7 #include <QSet>
8 #include <QVariant>
9
10 class ApiTrace;
11 class ApiTraceCall;
12 class ApiTraceEvent;
13 class ApiTraceFrame;
14
15 class ApiTraceModel : public QAbstractItemModel
16 {
17     Q_OBJECT
18 public:
19     enum Roles {
20         EventRole = Qt::UserRole + 1
21     };
22 public:
23     ApiTraceModel(QObject *parent = 0);
24     ~ApiTraceModel();
25
26     void setApiTrace(ApiTrace *trace);
27     const ApiTrace *apiTrace() const;
28     void stateSetOnEvent(ApiTraceEvent *event);
29
30     QModelIndex callIndex(int callNum) const;
31     QModelIndex indexForCall(ApiTraceCall *call) const;
32
33 public:
34     /* QAbstractItemModel { */
35     QVariant data(const QModelIndex &index, int role) const;
36     Qt::ItemFlags flags(const QModelIndex &index) const;
37     QVariant headerData(int section, Qt::Orientation orientation,
38                         int role = Qt::DisplayRole) const;
39     QModelIndex index(int row, int column,
40                       const QModelIndex &parent = QModelIndex()) const;
41     bool hasChildren(const QModelIndex &parent) const;
42     QModelIndex parent(const QModelIndex &index) const;
43     int rowCount(const QModelIndex &parent = QModelIndex()) const;
44     int columnCount(const QModelIndex &parent = QModelIndex()) const;
45
46     bool insertRows(int position, int rows,
47                     const QModelIndex &parent = QModelIndex());
48     bool removeRows(int position, int rows,
49                     const QModelIndex &parent = QModelIndex());
50     virtual bool canFetchMore(const QModelIndex & parent) const;
51     virtual void fetchMore(const QModelIndex &parent);
52     /* } QAbstractItemModel; */
53
54 private slots:
55     void invalidateFrames();
56     void beginAddingFrames(int oldCount, int numAdded);
57     void endAddingFrames();
58     void callChanged(ApiTraceCall *call);
59     void beginLoadingFrame(ApiTraceFrame *frame, int numAdded);
60     void endLoadingFrame(ApiTraceFrame *frame);
61
62 private:
63     ApiTraceEvent *item(const QModelIndex &index) const;
64
65 private:
66     ApiTrace *m_trace;
67     QSet<ApiTraceFrame*> m_loadingFrames;
68 };
69
70 #endif