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