4 #include "apisurface.h"
11 #include "trace_model.hpp"
17 class VariantVisitor : public trace::Visitor
20 VariantVisitor(TraceLoader *loader)
23 virtual void visit(trace::Null *);
24 virtual void visit(trace::Bool *node);
25 virtual void visit(trace::SInt *node);
26 virtual void visit(trace::UInt *node);
27 virtual void visit(trace::Float *node);
28 virtual void visit(trace::Double *node);
29 virtual void visit(trace::String *node);
30 virtual void visit(trace::Enum *e);
31 virtual void visit(trace::Bitmask *bitmask);
32 virtual void visit(trace::Struct *str);
33 virtual void visit(trace::Array *array);
34 virtual void visit(trace::Blob *blob);
35 virtual void visit(trace::Pointer *ptr);
37 QVariant variant() const
42 TraceLoader *m_loader;
54 class ApiTraceEnumSignature
57 ApiTraceEnumSignature(const trace::EnumSig *sig);
59 QString name(signed long long value) const;
62 typedef QList<QPair<QString, signed long long> > ValueList;
69 ApiEnum(ApiTraceEnumSignature *sig=0, signed long long value = 0);
71 QString toString() const;
73 QVariant value() const;
76 ApiTraceEnumSignature *m_sig;
77 signed long long m_value;
79 Q_DECLARE_METATYPE(ApiEnum);
84 ApiPointer(unsigned long long val=0);
86 QString toString() const;
88 unsigned long long value() const;
91 unsigned long long m_value;
93 Q_DECLARE_METATYPE(ApiPointer);
98 typedef QList<QPair<QString, unsigned long long> > Signature;
100 ApiBitmask(const trace::Bitmask *bitmask = 0);
102 QString toString() const;
104 unsigned long long value() const;
105 Signature signature() const;
108 void init(const trace::Bitmask *bitmask);
111 unsigned long long m_value;
113 Q_DECLARE_METATYPE(ApiBitmask);
120 QStringList memberNames;
123 ApiStruct(const trace::Struct *s = 0);
125 QString toString(bool multiLine = false) const;
126 Signature signature() const;
127 QList<QVariant> values() const;
130 void init(const trace::Struct *bitmask);
133 QList<QVariant> m_members;
135 Q_DECLARE_METATYPE(ApiStruct);
140 ApiArray(const trace::Array *arr = 0);
141 ApiArray(const QVector<QVariant> &vals);
143 QString toString(bool multiLine = false) const;
145 QVector<QVariant> values() const;
147 void init(const trace::Array *arr);
149 QVector<QVariant> m_array;
151 Q_DECLARE_METATYPE(ApiArray);
154 QString apiVariantToString(const QVariant &variant, bool multiLine = false);
158 class ApiTraceState {
161 explicit ApiTraceState(const QVariantMap &parseJson);
163 bool isEmpty() const;
164 const QVariantMap & parameters() const;
165 const QMap<QString, QString> & shaderSources() const;
166 const QVariantMap & uniforms() const;
167 const QList<ApiTexture> & textures() const;
168 const QList<ApiFramebuffer> & framebuffers() const;
170 ApiFramebuffer colorBuffer() const;
172 QVariantMap m_parameters;
173 QMap<QString, QString> m_shaderSources;
174 QVariantMap m_uniforms;
175 QList<ApiTexture> m_textures;
176 QList<ApiFramebuffer> m_framebuffers;
178 Q_DECLARE_METATYPE(ApiTraceState);
180 class ApiTraceCallSignature
183 ApiTraceCallSignature(const QString &name,
184 const QStringList &argNames);
185 ~ApiTraceCallSignature();
191 QStringList argNames() const
196 QUrl helpUrl() const;
197 void setHelpUrl(const QUrl &url);
201 QStringList m_argNames;
215 ApiTraceEvent(Type t);
216 virtual ~ApiTraceEvent();
218 Type type() const { return (Type)m_type; }
220 virtual QStaticText staticText() const = 0;
221 virtual int numChildren() const = 0;
223 QVariantMap stateParameters() const;
224 ApiTraceState *state() const;
225 void setState(ApiTraceState *state);
226 bool hasState() const
228 return m_state && !m_state->isEmpty();
233 mutable bool m_hasBinaryData;
234 mutable int m_binaryDataIndex:8;
235 ApiTraceState *m_state;
237 mutable QStaticText *m_staticText;
239 Q_DECLARE_METATYPE(ApiTraceEvent*);
241 class ApiTraceCall : public ApiTraceEvent
244 ApiTraceCall(ApiTraceFrame *parentFrame, TraceLoader *loader,
245 const trace::Call *tcall);
249 QString name() const;
250 QStringList argNames() const;
251 QVector<QVariant> arguments() const;
252 QVariant returnValue() const;
253 trace::CallFlags flags() const;
254 QUrl helpUrl() const;
255 void setHelpUrl(const QUrl &url);
256 ApiTraceFrame *parentFrame()const;
257 void setParentFrame(ApiTraceFrame *frame);
259 bool hasError() const;
260 QString error() const;
261 void setError(const QString &msg);
263 QVector<QVariant> originalValues() const;
266 void setEditedValues(const QVector<QVariant> &lst);
267 QVector<QVariant> editedValues() const;
270 bool contains(const QString &str,
271 Qt::CaseSensitivity sensitivity) const;
273 ApiTrace *parentTrace() const;
275 QString toHtml() const;
276 QString searchText() const;
277 QStaticText staticText() const;
278 int numChildren() const;
279 bool hasBinaryData() const;
280 int binaryDataIndex() const;
283 ApiTraceCallSignature *m_signature;
284 QVector<QVariant> m_argValues;
285 QVariant m_returnValue;
286 trace::CallFlags m_flags;
287 ApiTraceFrame *m_parentFrame;
289 QVector<QVariant> m_editedValues;
293 mutable QString m_richText;
294 mutable QString m_searchText;
296 Q_DECLARE_METATYPE(ApiTraceCall*);
298 class ApiTraceFrame : public ApiTraceEvent
301 ApiTraceFrame(ApiTrace *parent=0);
305 bool isEmpty() const;
307 void setParentTrace(ApiTrace *parent);
308 ApiTrace *parentTrace() const;
310 void setNumChildren(int num);
311 int numChildren() const;
312 int numChildrenToLoad() const;
313 QStaticText staticText() const;
315 int callIndex(ApiTraceCall *call) const;
316 ApiTraceCall *call(int idx) const;
317 ApiTraceCall *callWithIndex(int index) const;
318 void addCall(ApiTraceCall *call);
319 QVector<ApiTraceCall*> calls() const;
320 void setCalls(const QVector<ApiTraceCall*> &calls,
321 quint64 binaryDataSize);
323 ApiTraceCall *findNextCall(ApiTraceCall *from,
325 Qt::CaseSensitivity sensitivity) const;
327 ApiTraceCall *findPrevCall(ApiTraceCall *from,
329 Qt::CaseSensitivity sensitivity) const;
331 int binaryDataSize() const;
333 bool isLoaded() const;
334 void setLoaded(bool l);
336 void setLastCallIndex(unsigned index);
337 unsigned lastCallIndex() const;
339 void setThumbnail(const QImage & thumbnail);
340 const QImage & thumbnail() const;
343 ApiTrace *m_parentTrace;
344 quint64 m_binaryDataSize;
345 QVector<ApiTraceCall*> m_calls;
347 unsigned m_callsToLoad;
348 unsigned m_lastCallIndex;
351 Q_DECLARE_METATYPE(ApiTraceFrame*);