]> git.cworth.org Git - apitrace/blob - gui/apitracecall.h
Introduce ApiEnum.
[apitrace] / gui / apitracecall.h
1 #ifndef APITRACECALL_H
2 #define APITRACECALL_H
3
4 #include "apisurface.h"
5
6 #include <QStaticText>
7 #include <QStringList>
8 #include <QUrl>
9 #include <QVariant>
10
11 #include "trace_model.hpp"
12
13
14 class ApiTrace;
15
16 class VariantVisitor : public Trace::Visitor
17 {
18 public:
19     virtual void visit(Trace::Null *);
20     virtual void visit(Trace::Bool *node);
21     virtual void visit(Trace::SInt *node);
22     virtual void visit(Trace::UInt *node);
23     virtual void visit(Trace::Float *node);
24     virtual void visit(Trace::String *node);
25     virtual void visit(Trace::Enum *e);
26     virtual void visit(Trace::Bitmask *bitmask);
27     virtual void visit(Trace::Struct *str);
28     virtual void visit(Trace::Array *array);
29     virtual void visit(Trace::Blob *blob);
30     virtual void visit(Trace::Pointer *ptr);
31
32     QVariant variant() const
33     {
34         return m_variant;
35     }
36 private:
37     QVariant m_variant;
38 };
39
40 class ApiEnum
41 {
42 public:
43     ApiEnum(const QString &name = QString(), const QVariant &val=QVariant());
44
45     QString toString() const;
46
47     QVariant value() const;
48     QString name() const;
49 private:
50     QString m_name;
51     QVariant m_value;
52 };
53 Q_DECLARE_METATYPE(ApiEnum);
54
55 class ApiPointer
56 {
57 public:
58     ApiPointer(int val=0);
59
60     QString toString() const;
61 private:
62     int m_value;
63 };
64 Q_DECLARE_METATYPE(ApiPointer);
65
66 class ApiBitmask
67 {
68 public:
69     typedef QList<QPair<QString, unsigned long long> > Signature;
70
71     ApiBitmask(const Trace::Bitmask *bitmask = 0);
72
73     QString toString() const;
74
75 private:
76     void init(const Trace::Bitmask *bitmask);
77 private:
78     Signature m_sig;
79     unsigned long long m_value;
80 };
81 Q_DECLARE_METATYPE(ApiBitmask);
82
83 class ApiStruct
84 {
85 public:
86     struct Signature {
87         QString name;
88         QStringList memberNames;
89     };
90
91     ApiStruct(const Trace::Struct *s = 0);
92
93     QString toString() const;
94
95 private:
96     void init(const Trace::Struct *bitmask);
97 private:
98     Signature m_sig;
99     QList<QVariant> m_members;
100 };
101 Q_DECLARE_METATYPE(ApiStruct);
102
103 class ApiArray
104 {
105 public:
106     ApiArray(const Trace::Array *arr = 0);
107     ApiArray(const QList<QVariant> &vals);
108
109     QString toString() const;
110
111     QList<QVariant> values() const;
112 private:
113     void init(const Trace::Array *arr);
114 private:
115     QList<QVariant> m_array;
116 };
117 Q_DECLARE_METATYPE(ApiArray);
118
119
120 QString apiVariantToString(const QVariant &variant);
121
122 class ApiTraceFrame;
123
124 class ApiTraceState {
125 public:
126     ApiTraceState();
127     explicit ApiTraceState(const QVariantMap &parseJson);
128
129     bool isEmpty() const;
130     QVariantMap parameters() const;
131     QMap<QString, QString> shaderSources() const;
132     QList<ApiTexture> textures() const;
133     QList<ApiFramebuffer> framebuffers() const;
134
135 private:
136     QVariantMap m_parameters;
137     QMap<QString, QString> m_shaderSources;
138     QList<ApiTexture> m_textures;
139     QList<ApiFramebuffer> m_framebuffers;
140 };
141 Q_DECLARE_METATYPE(ApiTraceState);
142
143 class ApiTraceEvent
144 {
145 public:
146     enum Type {
147         None,
148         Call,
149         Frame
150     };
151 public:
152     ApiTraceEvent();
153     ApiTraceEvent(Type t);
154     virtual ~ApiTraceEvent();
155
156     Type type() const { return m_type; }
157
158     virtual QStaticText staticText() const = 0;
159     virtual int numChildren() const = 0;
160
161     QVariantMap stateParameters() const;
162     ApiTraceState state() const;
163     void setState(const ApiTraceState &state);
164
165 protected:
166     Type m_type;
167     ApiTraceState m_state;
168
169     mutable QStaticText *m_staticText;
170 };
171 Q_DECLARE_METATYPE(ApiTraceEvent*);
172
173 class ApiTraceCall : public ApiTraceEvent
174 {
175 public:
176     ApiTraceCall();
177     ApiTraceCall(const Trace::Call *tcall);
178     ~ApiTraceCall();
179
180     int index() const;
181     QString name() const;
182     QStringList argNames() const;
183     QVariantList arguments() const;
184     QVariant returnValue() const;
185     QUrl helpUrl() const;
186     void setHelpUrl(const QUrl &url);
187     ApiTraceFrame *parentFrame()const;
188     void setParentFrame(ApiTraceFrame *frame);
189
190     QVariantList originalValues() const;
191
192     bool edited() const;
193     void setEditedValues(const QVariantList &lst);
194     QVariantList editedValues() const;
195     void revert();
196
197     QString toHtml() const;
198     QString filterText() const;
199     QStaticText staticText() const;
200     int numChildren() const;
201     bool hasBinaryData() const;
202     int binaryDataIndex() const;
203 private:
204     int m_index;
205     QString m_name;
206     QStringList m_argNames;
207     QVariantList m_argValues;
208     QVariant m_returnValue;
209     ApiTraceFrame *m_parentFrame;
210     QUrl m_helpUrl;
211
212     QVariantList m_editedValues;
213
214     mutable QString m_richText;
215     mutable QString m_filterText;
216     mutable bool m_hasBinaryData;
217     mutable int m_binaryDataIndex;
218 };
219 Q_DECLARE_METATYPE(ApiTraceCall*);
220
221 class ApiTraceFrame : public ApiTraceEvent
222 {
223 public:
224     ApiTraceFrame();
225     int number;
226     QList<ApiTraceCall*> calls;
227
228     ApiTrace *parentTrace() const;
229     void setParentTrace(ApiTrace *trace);
230
231     int numChildren() const;
232     QStaticText staticText() const;
233 private:
234     ApiTrace *m_parentTrace;
235 };
236 Q_DECLARE_METATYPE(ApiTraceFrame*);
237
238
239 #endif