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 QString &name = QString(),
58 const QVariant &val=QVariant())\
63 QVariant value() const { return m_value; }
64 QString name() const { return m_name; }
73 ApiEnum(ApiTraceEnumSignature *sig=0);
75 QString toString() const;
77 QVariant value() const;
80 ApiTraceEnumSignature *m_sig;
82 Q_DECLARE_METATYPE(ApiEnum);
87 ApiPointer(unsigned long long val=0);
89 QString toString() const;
91 unsigned long long value() const;
94 unsigned long long m_value;
96 Q_DECLARE_METATYPE(ApiPointer);
101 typedef QList<QPair<QString, unsigned long long> > Signature;
103 ApiBitmask(const trace::Bitmask *bitmask = 0);
105 QString toString() const;
107 unsigned long long value() const;
108 Signature signature() const;
111 void init(const trace::Bitmask *bitmask);
114 unsigned long long m_value;
116 Q_DECLARE_METATYPE(ApiBitmask);
123 QStringList memberNames;
126 ApiStruct(const trace::Struct *s = 0);
128 QString toString(bool multiLine = false) const;
129 Signature signature() const;
130 QList<QVariant> values() const;
133 void init(const trace::Struct *bitmask);
136 QList<QVariant> m_members;
138 Q_DECLARE_METATYPE(ApiStruct);
143 ApiArray(const trace::Array *arr = 0);
144 ApiArray(const QVector<QVariant> &vals);
146 QString toString(bool multiLine = false) const;
148 QVector<QVariant> values() const;
150 void init(const trace::Array *arr);
152 QVector<QVariant> m_array;
154 Q_DECLARE_METATYPE(ApiArray);
157 QString apiVariantToString(const QVariant &variant, bool multiLine = false);
161 class ApiTraceState {
164 explicit ApiTraceState(const QVariantMap &parseJson);
166 bool isEmpty() const;
167 const QVariantMap & parameters() const;
168 const QMap<QString, QString> & shaderSources() const;
169 const QVariantMap & uniforms() const;
170 const QList<ApiTexture> & textures() const;
171 const QList<ApiFramebuffer> & framebuffers() const;
173 ApiFramebuffer colorBuffer() const;
175 QVariantMap m_parameters;
176 QMap<QString, QString> m_shaderSources;
177 QVariantMap m_uniforms;
178 QList<ApiTexture> m_textures;
179 QList<ApiFramebuffer> m_framebuffers;
181 Q_DECLARE_METATYPE(ApiTraceState);
183 class ApiTraceCallSignature
186 ApiTraceCallSignature(const QString &name,
187 const QStringList &argNames);
188 ~ApiTraceCallSignature();
194 QStringList argNames() const
199 QUrl helpUrl() const;
200 void setHelpUrl(const QUrl &url);
204 QStringList m_argNames;
218 ApiTraceEvent(Type t);
219 virtual ~ApiTraceEvent();
221 Type type() const { return (Type)m_type; }
223 virtual QStaticText staticText() const = 0;
224 virtual int numChildren() const = 0;
226 QVariantMap stateParameters() const;
227 ApiTraceState *state() const;
228 void setState(ApiTraceState *state);
229 bool hasState() const
231 return m_state && !m_state->isEmpty();
236 mutable bool m_hasBinaryData;
237 mutable int m_binaryDataIndex:8;
238 ApiTraceState *m_state;
240 mutable QStaticText *m_staticText;
242 Q_DECLARE_METATYPE(ApiTraceEvent*);
244 class ApiTraceCall : public ApiTraceEvent
247 ApiTraceCall(ApiTraceFrame *parentFrame, TraceLoader *loader,
248 const trace::Call *tcall);
252 QString name() const;
253 QStringList argNames() const;
254 QVector<QVariant> arguments() const;
255 QVariant returnValue() const;
256 trace::CallFlags flags() const;
257 QUrl helpUrl() const;
258 void setHelpUrl(const QUrl &url);
259 ApiTraceFrame *parentFrame()const;
260 void setParentFrame(ApiTraceFrame *frame);
262 bool hasError() const;
263 QString error() const;
264 void setError(const QString &msg);
266 QVector<QVariant> originalValues() const;
269 void setEditedValues(const QVector<QVariant> &lst);
270 QVector<QVariant> editedValues() const;
273 bool contains(const QString &str,
274 Qt::CaseSensitivity sensitivity) const;
276 ApiTrace *parentTrace() const;
278 QString toHtml() const;
279 QString searchText() const;
280 QStaticText staticText() const;
281 int numChildren() const;
282 bool hasBinaryData() const;
283 int binaryDataIndex() const;
286 ApiTraceCallSignature *m_signature;
287 QVector<QVariant> m_argValues;
288 QVariant m_returnValue;
289 trace::CallFlags m_flags;
290 ApiTraceFrame *m_parentFrame;
292 QVector<QVariant> m_editedValues;
296 mutable QString m_richText;
297 mutable QString m_searchText;
299 Q_DECLARE_METATYPE(ApiTraceCall*);
301 class ApiTraceFrame : public ApiTraceEvent
304 ApiTraceFrame(ApiTrace *parent=0);
308 bool isEmpty() const;
310 void setParentTrace(ApiTrace *parent);
311 ApiTrace *parentTrace() const;
313 void setNumChildren(int num);
314 int numChildren() const;
315 int numChildrenToLoad() const;
316 QStaticText staticText() const;
318 int callIndex(ApiTraceCall *call) const;
319 ApiTraceCall *call(int idx) const;
320 ApiTraceCall *callWithIndex(int index) const;
321 void addCall(ApiTraceCall *call);
322 QVector<ApiTraceCall*> calls() const;
323 void setCalls(const QVector<ApiTraceCall*> &calls,
324 quint64 binaryDataSize);
326 ApiTraceCall *findNextCall(ApiTraceCall *from,
328 Qt::CaseSensitivity sensitivity) const;
330 ApiTraceCall *findPrevCall(ApiTraceCall *from,
332 Qt::CaseSensitivity sensitivity) const;
334 int binaryDataSize() const;
336 bool isLoaded() const;
337 void setLoaded(bool l);
339 void setLastCallIndex(unsigned index);
340 unsigned lastCallIndex() const;
342 ApiTrace *m_parentTrace;
343 quint64 m_binaryDataSize;
344 QVector<ApiTraceCall*> m_calls;
346 unsigned m_callsToLoad;
347 unsigned m_lastCallIndex;
349 Q_DECLARE_METATYPE(ApiTraceFrame*);