]> git.cworth.org Git - apitrace/blob - gui/apitrace.h
54fc1f2713786b4fb2a503b47cdb8d29c78f199f
[apitrace] / gui / apitrace.h
1 #ifndef APITRACE_H
2 #define APITRACE_H
3
4 #include "apitracecall.h"
5
6 #include <QObject>
7 #include <QSet>
8
9 class LoaderThread;
10 class SaverThread;
11
12 class ApiTrace : public QObject
13 {
14     Q_OBJECT
15 public:
16     enum FrameMarker {
17         FrameMarker_SwapBuffers,
18         FrameMarker_Flush,
19         FrameMarker_Finish,
20         FrameMarker_Clear
21     };
22     static bool isCallAFrameMarker(const ApiTraceCall *call,
23                                    FrameMarker marker);
24 public:
25     ApiTrace();
26     ~ApiTrace();
27
28     bool isEmpty() const;
29
30     QString fileName() const;
31
32     FrameMarker frameMarker() const;
33
34     ApiTraceState defaultState() const;
35
36     QList<ApiTraceCall*> calls() const;
37     ApiTraceCall *callAt(int idx) const;
38     ApiTraceCall *callWithIndex(int idx) const;
39     int numCalls() const;
40
41     QList<ApiTraceFrame*> frames() const;
42     ApiTraceFrame *frameAt(int idx) const;
43     int numFrames() const;
44     int numCallsInFrame(int idx) const;
45
46     void callEdited(ApiTraceCall *call);
47     void callReverted(ApiTraceCall *call);
48
49     bool edited() const;
50     bool needsSaving() const;
51
52 public slots:
53     void setFileName(const QString &name);
54     void setFrameMarker(FrameMarker marker);
55     void save();
56
57 signals:
58     void startedLoadingTrace();
59     void finishedLoadingTrace();
60     void invalidated();
61     void framesInvalidated();
62     void changed(ApiTraceCall *call);
63     void traceSaved();
64
65     void framesAdded(int oldCount, int numAdded);
66     void callsAdded(int oldCount, int numAdded);
67
68 private slots:
69     void addFrames(const QList<ApiTraceFrame*> &frames);
70 private:
71     void detectFrames();
72 private:
73     QString m_fileName;
74     QString m_tempFileName;
75
76     QList<ApiTraceFrame*> m_frames;
77     QList<ApiTraceCall*> m_calls;
78
79     FrameMarker m_frameMarker;
80
81     LoaderThread *m_loader;
82     SaverThread  *m_saver;
83
84     QSet<ApiTraceCall*> m_editedCalls;
85
86     bool m_needsSaving;
87 };
88
89 #endif