blob: 36aaae7032bb5248e992f0fdfb5a3e8a9bbe930a [file] [log] [blame]
Jose Fonseca9653f952015-05-19 16:32:43 +01001#pragma once
Zack Rusin601e8372011-03-24 22:23:21 -04002
3
4#include <QAbstractItemModel>
5#include <QModelIndex>
Zack Rusin3176ebe2011-09-06 21:11:36 -04006#include <QSet>
Zack Rusin601e8372011-03-24 22:23:21 -04007#include <QVariant>
8
Zack Rusinf6667d12011-03-30 11:03:37 -04009class ApiTrace;
Zack Rusin601e8372011-03-24 22:23:21 -040010class ApiTraceCall;
Zack Rusinf6667d12011-03-30 11:03:37 -040011class ApiTraceEvent;
Zack Rusin3176ebe2011-09-06 21:11:36 -040012class ApiTraceFrame;
Zack Rusin601e8372011-03-24 22:23:21 -040013
14class ApiTraceModel : public QAbstractItemModel
15{
16 Q_OBJECT
Zack Rusin601e8372011-03-24 22:23:21 -040017public:
Zack Rusinc1acc7f2011-04-02 01:34:04 -040018 enum Roles {
19 EventRole = Qt::UserRole + 1
20 };
21public:
Zack Rusin601e8372011-03-24 22:23:21 -040022 ApiTraceModel(QObject *parent = 0);
23 ~ApiTraceModel();
24
Zack Rusinf6667d12011-03-30 11:03:37 -040025 void setApiTrace(ApiTrace *trace);
26 const ApiTrace *apiTrace() const;
Zack Rusinc1acc7f2011-04-02 01:34:04 -040027 void stateSetOnEvent(ApiTraceEvent *event);
Zack Rusinf6667d12011-03-30 11:03:37 -040028
Zack Rusinf54c4fc2011-04-12 23:39:13 -040029 QModelIndex indexForCall(ApiTraceCall *call) const;
Zack Rusinc52d18a2011-04-11 00:15:07 -040030
Zack Rusinf6667d12011-03-30 11:03:37 -040031public:
32 /* QAbstractItemModel { */
Jose Fonseca010f9962016-03-05 14:45:41 +000033 QVariant data(const QModelIndex &index, int role) const override;
34 Qt::ItemFlags flags(const QModelIndex &index) const override;
Zack Rusin601e8372011-03-24 22:23:21 -040035 QVariant headerData(int section, Qt::Orientation orientation,
Jose Fonseca010f9962016-03-05 14:45:41 +000036 int role = Qt::DisplayRole) const override;
Zack Rusin601e8372011-03-24 22:23:21 -040037 QModelIndex index(int row, int column,
Jose Fonseca010f9962016-03-05 14:45:41 +000038 const QModelIndex &parent = QModelIndex()) const override;
39 bool hasChildren(const QModelIndex &parent) const override;
40 QModelIndex parent(const QModelIndex &index) const override;
41 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
42 int columnCount(const QModelIndex &parent = QModelIndex()) const override;
Zack Rusin601e8372011-03-24 22:23:21 -040043
44 bool insertRows(int position, int rows,
Jose Fonseca010f9962016-03-05 14:45:41 +000045 const QModelIndex &parent = QModelIndex()) override;
Zack Rusin601e8372011-03-24 22:23:21 -040046 bool removeRows(int position, int rows,
Jose Fonseca010f9962016-03-05 14:45:41 +000047 const QModelIndex &parent = QModelIndex()) override;
48 virtual bool canFetchMore(const QModelIndex & parent) const override;
49 virtual void fetchMore(const QModelIndex &parent) override;
Zack Rusinf6667d12011-03-30 11:03:37 -040050 /* } QAbstractItemModel; */
Zack Rusin601e8372011-03-24 22:23:21 -040051
Zack Rusinf6667d12011-03-30 11:03:37 -040052private slots:
53 void invalidateFrames();
Zack Rusinb56e03d2011-04-20 23:58:52 -040054 void beginAddingFrames(int oldCount, int numAdded);
55 void endAddingFrames();
Dan McCabe10bd4242012-03-05 17:20:40 -080056 void changed(ApiTraceEvent *event);
Zack Rusin0ddd2502011-04-17 02:34:45 -040057 void callChanged(ApiTraceCall *call);
Dan McCabe10bd4242012-03-05 17:20:40 -080058 void frameChanged(ApiTraceFrame *frame);
Zack Rusinf682e192011-09-07 01:36:41 -040059 void beginLoadingFrame(ApiTraceFrame *frame, int numAdded);
60 void endLoadingFrame(ApiTraceFrame *frame);
Zack Rusin601e8372011-03-24 22:23:21 -040061
62private:
Zack Rusinf6667d12011-03-30 11:03:37 -040063 ApiTraceEvent *item(const QModelIndex &index) const;
64
65private:
66 ApiTrace *m_trace;
Zack Rusin3176ebe2011-09-06 21:11:36 -040067 QSet<ApiTraceFrame*> m_loadingFrames;
Zack Rusin601e8372011-03-24 22:23:21 -040068};