]> git.cworth.org Git - apitrace/blob - gui/traceloader.h
Encapsulate on parser state in structure.
[apitrace] / gui / traceloader.h
1 #ifndef TRACELOADER_H
2 #define TRACELOADER_H
3
4
5 #include "apitrace.h"
6 #include "trace_file.hpp"
7 #include "trace_parser.hpp"
8
9 #include <QObject>
10 #include <QList>
11 #include <QMap>
12
13 class TraceLoader : public QObject
14 {
15     Q_OBJECT
16 public:
17     TraceLoader(QObject *parent=0);
18     ~TraceLoader();
19
20
21     ApiTraceCallSignature *signature(unsigned id);
22     void addSignature(unsigned id, ApiTraceCallSignature *signature);
23
24     ApiTraceEnumSignature *enumSignature(unsigned id);
25     void addEnumSignature(unsigned id, ApiTraceEnumSignature *signature);
26
27 public slots:
28     void loadTrace(const QString &filename);
29     void loadFrame(ApiTraceFrame *frame);
30     void setFrameMarker(ApiTrace::FrameMarker marker);
31
32 signals:
33     void startedParsing();
34     void parsed(int percent);
35     void finishedParsing();
36
37     void framesLoaded(const QList<ApiTraceFrame*> &frames);
38     void frameLoaded(ApiTraceFrame *frame);
39
40 private:
41     struct FrameBookmark {
42         FrameBookmark()
43             : numberOfCalls(0)
44         {}
45         FrameBookmark(const Trace::ParseBookmark &s)
46             : start(s),
47               numberOfCalls(0)
48         {}
49
50         Trace::ParseBookmark start;
51         int numberOfCalls;
52     };
53     bool isCallAFrameMarker(const Trace::Call *call) const;
54     int numberOfFrames() const;
55     int numberOfCallsInFrame(int frameIdx) const;
56
57     void loadHelpFile();
58     void scanTrace();
59     void parseTrace();
60
61 private:
62     Trace::Parser m_parser;
63     QString m_fileName;
64     ApiTrace::FrameMarker m_frameMarker;
65
66     typedef QMap<int, FrameBookmark> FrameBookmarks;
67     FrameBookmarks m_frameBookmarks;
68
69     QHash<QString, QUrl> m_helpHash;
70
71     QVector<ApiTraceCallSignature*> m_signatures;
72     QVector<ApiTraceEnumSignature*> m_enumSignatures;
73 };
74
75 #endif