]> git.cworth.org Git - apitrace/blob - gui/apitrace.h
Fix size comparisons in traceloader.cpp.
[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     void bindThumbnailsToFrames(const QList<QImage> &thumbnails);
104
105 signals:
106     void loadTrace(const QString &name);
107     void requestFrame(ApiTraceFrame *frame);
108     void startedLoadingTrace();
109     void loaded(int percent);
110     void finishedLoadingTrace();
111     void invalidated();
112     void framesInvalidated();
113     void changed(ApiTraceEvent *event);
114     void startedSaving();
115     void saved();
116     void findResult(const ApiTrace::SearchRequest &request,
117                     ApiTrace::SearchResult result,
118                     ApiTraceCall *call);
119
120     void beginAddingFrames(int oldCount, int numAdded);
121     void endAddingFrames();
122     void beginLoadingFrame(ApiTraceFrame *frame, int numAdded);
123     void endLoadingFrame(ApiTraceFrame *frame);
124     void foundFrameStart(ApiTraceFrame *frame);
125     void foundFrameEnd(ApiTraceFrame *frame);
126     void foundCallIndex(ApiTraceCall *call);
127
128 signals:
129     void loaderSearch(const ApiTrace::SearchRequest &request);
130     void loaderFindFrameStart(ApiTraceFrame *frame);
131     void loaderFindFrameEnd(ApiTraceFrame *frame);
132     void loaderFindCallIndex(int index);
133
134 private slots:
135     void addFrames(const QList<ApiTraceFrame*> &frames);
136     void slotSaved();
137     void finishedParsing();
138     void loaderFrameLoaded(ApiTraceFrame *frame,
139                            const QVector<ApiTraceCall*> &calls,
140                            quint64 binaryDataSize);
141     void loaderSearchResult(const ApiTrace::SearchRequest &request,
142                             ApiTrace::SearchResult result,
143                             ApiTraceCall *call);
144
145 private:
146     int callInFrame(int callIdx) const;
147     bool isFrameLoading(ApiTraceFrame *frame) const;
148 private:
149     QString m_fileName;
150     QString m_tempFileName;
151
152     QList<ApiTraceFrame*> m_frames;
153
154     FrameMarker m_frameMarker;
155
156     TraceLoader *m_loader;
157     QThread     *m_loaderThread;
158     SaverThread  *m_saver;
159
160     QSet<ApiTraceCall*> m_editedCalls;
161
162     bool m_needsSaving;
163
164     QSet<ApiTraceCall*> m_errors;
165     QList< QPair<ApiTraceFrame*, ApiTraceError> > m_queuedErrors;
166     QSet<ApiTraceFrame*> m_loadingFrames;
167 };
168
169 #endif