]> git.cworth.org Git - apitrace/blob - gui/apitrace.h
Allow to turn off transparency on image viewer.
[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 TraceLoader;
10 class SaverThread;
11 class QThread;
12
13 class ApiTrace : public QObject
14 {
15     Q_OBJECT
16 public:
17     enum FrameMarker {
18         FrameMarker_SwapBuffers,
19         FrameMarker_Flush,
20         FrameMarker_Finish,
21         FrameMarker_Clear
22     };
23     enum SearchResult {
24         SearchResult_NotFound,
25         SearchResult_Found,
26         SearchResult_Wrapped
27     };
28     struct SearchRequest {
29         enum Direction {
30             Next,
31             Prev
32         };
33         SearchRequest()
34             : direction(Next)
35         {}
36         SearchRequest(Direction dir,
37                       ApiTraceFrame *f,
38                       ApiTraceCall *call,
39                       QString str,
40                       Qt::CaseSensitivity caseSens)
41             : direction(dir),
42               frame(f),
43               from(call),
44               text(str),
45               cs(caseSens)
46         {}
47         Direction direction;
48         ApiTraceFrame *frame;
49         ApiTraceCall *from;
50         QString text;
51         Qt::CaseSensitivity cs;
52     };
53
54     static bool isCallAFrameMarker(const ApiTraceCall *call,
55                                    FrameMarker marker);
56 public:
57     ApiTrace();
58     ~ApiTrace();
59
60     bool isEmpty() const;
61
62     QString fileName() const;
63
64     FrameMarker frameMarker() const;
65
66     ApiTraceState defaultState() const;
67
68     ApiTraceCall *callWithIndex(int idx) const;
69
70     QList<ApiTraceFrame*> frames() const;
71     ApiTraceFrame *frameAt(int idx) const;
72     int numFrames() const;
73     int numCallsInFrame(int idx) const;
74
75     void callEdited(ApiTraceCall *call);
76     void callReverted(ApiTraceCall *call);
77     void callError(ApiTraceCall *call);
78
79     bool edited() const;
80     bool needsSaving() const;
81
82     bool isSaving() const;
83
84     bool hasErrors() const;
85
86 public slots:
87     void setFileName(const QString &name);
88     void save();
89     void loadFrame(ApiTraceFrame *frame);
90     void findNext(ApiTraceFrame *frame,
91                   ApiTraceCall *call,
92                   const QString &str,
93                   Qt::CaseSensitivity sensitivity);
94     void findPrev(ApiTraceFrame *frame,
95                   ApiTraceCall *call,
96                   const QString &str,
97                   Qt::CaseSensitivity sensitivity);
98     void findFrameStart(ApiTraceFrame *frame);
99     void findFrameEnd(ApiTraceFrame *frame);
100     void findCallIndex(int index);
101     void setCallError(const ApiTraceError &error);
102
103
104 signals:
105     void loadTrace(const QString &name);
106     void requestFrame(ApiTraceFrame *frame);
107     void startedLoadingTrace();
108     void loaded(int percent);
109     void finishedLoadingTrace();
110     void invalidated();
111     void framesInvalidated();
112     void changed(ApiTraceCall *call);
113     void startedSaving();
114     void saved();
115     void findResult(const ApiTrace::SearchRequest &request,
116                     ApiTrace::SearchResult result,
117                     ApiTraceCall *call);
118
119     void beginAddingFrames(int oldCount, int numAdded);
120     void endAddingFrames();
121     void beginLoadingFrame(ApiTraceFrame *frame, int numAdded);
122     void endLoadingFrame(ApiTraceFrame *frame);
123     void foundFrameStart(ApiTraceFrame *frame);
124     void foundFrameEnd(ApiTraceFrame *frame);
125     void foundCallIndex(ApiTraceCall *call);
126
127 signals:
128     void loaderSearch(const ApiTrace::SearchRequest &request);
129     void loaderFindFrameStart(ApiTraceFrame *frame);
130     void loaderFindFrameEnd(ApiTraceFrame *frame);
131     void loaderFindCallIndex(int index);
132
133 private slots:
134     void addFrames(const QList<ApiTraceFrame*> &frames);
135     void slotSaved();
136     void finishedParsing();
137     void loaderFrameLoaded(ApiTraceFrame *frame,
138                            const QVector<ApiTraceCall*> &calls,
139                            quint64 binaryDataSize);
140     void loaderSearchResult(const ApiTrace::SearchRequest &request,
141                             ApiTrace::SearchResult result,
142                             ApiTraceCall *call);
143
144 private:
145     int callInFrame(int callIdx) const;
146     bool isFrameLoading(ApiTraceFrame *frame) const;
147 private:
148     QString m_fileName;
149     QString m_tempFileName;
150
151     QList<ApiTraceFrame*> m_frames;
152
153     FrameMarker m_frameMarker;
154
155     TraceLoader *m_loader;
156     QThread     *m_loaderThread;
157     SaverThread  *m_saver;
158
159     QSet<ApiTraceCall*> m_editedCalls;
160
161     bool m_needsSaving;
162
163     QSet<ApiTraceCall*> m_errors;
164     QList< QPair<ApiTraceFrame*, ApiTraceError> > m_queuedErrors;
165     QSet<ApiTraceFrame*> m_loadingFrames;
166 };
167
168 #endif