]> git.cworth.org Git - apitrace/blob - gui/apitrace.h
Merge remote-tracking branch 'origin/master' into on-demand-loading
[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     ApiTraceCallSignature *signature(unsigned id);
37     void addSignature(unsigned id, ApiTraceCallSignature *signature);
38
39     ApiTraceEnumSignature *enumSignature(unsigned id);
40     void addEnumSignature(unsigned id, ApiTraceEnumSignature *signature);
41
42
43     QVector<ApiTraceCall*> calls() const;
44     ApiTraceCall *callAt(int idx) const;
45     ApiTraceCall *callWithIndex(int idx) const;
46     int numCalls() const;
47
48     QList<ApiTraceFrame*> frames() const;
49     ApiTraceFrame *frameAt(int idx) const;
50     int numFrames() const;
51     int numCallsInFrame(int idx) const;
52
53     void callEdited(ApiTraceCall *call);
54     void callReverted(ApiTraceCall *call);
55     void callError(ApiTraceCall *call);
56
57     bool edited() const;
58     bool needsSaving() const;
59
60     bool isSaving() const;
61
62     bool hasErrors() const;
63
64 public slots:
65     void setFileName(const QString &name);
66     void setFrameMarker(FrameMarker marker);
67     void save();
68
69 signals:
70     void startedLoadingTrace();
71     void finishedLoadingTrace();
72     void invalidated();
73     void framesInvalidated();
74     void changed(ApiTraceCall *call);
75     void startedSaving();
76     void saved();
77
78     void beginAddingFrames(int oldCount, int numAdded);
79     void endAddingFrames();
80     void callsAdded(int oldCount, int numAdded);
81
82 private slots:
83     void addFrames(const QList<ApiTraceFrame*> &frames);
84     void slotSaved();
85 private:
86     void detectFrames();
87 private:
88     QString m_fileName;
89     QString m_tempFileName;
90
91     QList<ApiTraceFrame*> m_frames;
92     QVector<ApiTraceCall*> m_calls;
93
94     FrameMarker m_frameMarker;
95
96     LoaderThread *m_loader;
97     SaverThread  *m_saver;
98
99     QSet<ApiTraceCall*> m_editedCalls;
100
101     bool m_needsSaving;
102
103     QSet<ApiTraceCall*> m_errors;
104     QVector<ApiTraceCallSignature*> m_signatures;
105     QVector<ApiTraceEnumSignature*> m_enumSignatures;
106 };
107
108 #endif