]> git.cworth.org Git - apitrace/blob - gui/apitracemodel.h
Use skiplist-based FastCallSet within trace::CallSet
[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 indexForCall(ApiTraceCall *call) const;
31
32 public:
33     /* QAbstractItemModel { */
34     QVariant data(const QModelIndex &index, int role) const;
35     Qt::ItemFlags flags(const QModelIndex &index) const;
36     QVariant headerData(int section, Qt::Orientation orientation,
37                         int role = Qt::DisplayRole) const;
38     QModelIndex index(int row, int column,
39                       const QModelIndex &parent = QModelIndex()) const;
40     bool hasChildren(const QModelIndex &parent) const;
41     QModelIndex parent(const QModelIndex &index) const;
42     int rowCount(const QModelIndex &parent = QModelIndex()) const;
43     int columnCount(const QModelIndex &parent = QModelIndex()) const;
44
45     bool insertRows(int position, int rows,
46                     const QModelIndex &parent = QModelIndex());
47     bool removeRows(int position, int rows,
48                     const QModelIndex &parent = QModelIndex());
49     virtual bool canFetchMore(const QModelIndex & parent) const;
50     virtual void fetchMore(const QModelIndex &parent);
51     /* } QAbstractItemModel; */
52
53 private slots:
54     void invalidateFrames();
55     void beginAddingFrames(int oldCount, int numAdded);
56     void endAddingFrames();
57     void changed(ApiTraceEvent *event);
58     void callChanged(ApiTraceCall *call);
59     void frameChanged(ApiTraceFrame *frame);
60     void beginLoadingFrame(ApiTraceFrame *frame, int numAdded);
61     void endLoadingFrame(ApiTraceFrame *frame);
62
63 private:
64     ApiTraceEvent *item(const QModelIndex &index) const;
65
66 private:
67     ApiTrace *m_trace;
68     QSet<ApiTraceFrame*> m_loadingFrames;
69 };
70
71 #endif