]> git.cworth.org Git - apitrace/blob - gui/apitrace.h
Make state lookups with on-demand loading work.
[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     static bool isCallAFrameMarker(const ApiTraceCall *call,
24                                    FrameMarker marker);
25 public:
26     ApiTrace();
27     ~ApiTrace();
28
29     bool isEmpty() const;
30
31     QString fileName() const;
32
33     FrameMarker frameMarker() const;
34
35     ApiTraceState defaultState() const;
36
37     QVector<ApiTraceCall*> calls() const;
38     ApiTraceCall *callWithIndex(int idx) const;
39     int numCalls() const;
40
41     QList<ApiTraceFrame*> frames() const;
42     ApiTraceFrame *frameAt(int idx) const;
43     int numFrames() const;
44     int numCallsInFrame(int idx) const;
45
46     void callEdited(ApiTraceCall *call);
47     void callReverted(ApiTraceCall *call);
48     void callError(ApiTraceCall *call);
49
50     bool edited() const;
51     bool needsSaving() const;
52
53     bool isSaving() const;
54
55     bool hasErrors() const;
56
57 public slots:
58     void setFileName(const QString &name);
59     void setFrameMarker(FrameMarker marker);
60     void save();
61     void loadFrame(ApiTraceFrame *frame);
62
63 signals:
64     void loadTrace(const QString &name);
65     void requestFrame(ApiTraceFrame *frame);
66     void startedLoadingTrace();
67     void loaded(int percent);
68     void finishedLoadingTrace();
69     void invalidated();
70     void framesInvalidated();
71     void changed(ApiTraceCall *call);
72     void startedSaving();
73     void saved();
74
75     void beginAddingFrames(int oldCount, int numAdded);
76     void endAddingFrames();
77     void callsAdded(int oldCount, int numAdded);
78     void beginLoadingFrame(ApiTraceFrame *frame, int numAdded);
79     void endLoadingFrame(ApiTraceFrame *frame);
80
81 private slots:
82     void addFrames(const QList<ApiTraceFrame*> &frames);
83     void slotSaved();
84     void finishedParsing();
85     void frameLoadFinished(ApiTraceFrame *frame);
86
87 private:
88     void detectFrames();
89 private:
90     QString m_fileName;
91     QString m_tempFileName;
92
93     QList<ApiTraceFrame*> m_frames;
94     QVector<ApiTraceCall*> m_calls;
95
96     FrameMarker m_frameMarker;
97
98     TraceLoader *m_loader;
99     QThread     *m_loaderThread;
100     SaverThread  *m_saver;
101
102     QSet<ApiTraceCall*> m_editedCalls;
103
104     bool m_needsSaving;
105
106     QSet<ApiTraceCall*> m_errors;
107 };
108
109 #endif