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