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);
36 virtual void visit(trace::Repr *ptr);
38 QVariant variant() const
43 TraceLoader *m_loader;
55 class ApiTraceEnumSignature
58 ApiTraceEnumSignature(const trace::EnumSig *sig);
60 QString name(signed long long value) const;
63 typedef QList<QPair<QString, signed long long> > ValueList;
70 ApiEnum(ApiTraceEnumSignature *sig=0, signed long long value = 0);
72 QString toString() const;
74 QVariant value() const;
77 ApiTraceEnumSignature *m_sig;
78 signed long long m_value;
80 Q_DECLARE_METATYPE(ApiEnum);
85 ApiPointer(unsigned long long val=0);
87 QString toString() const;
89 unsigned long long value() const;
92 unsigned long long m_value;
94 Q_DECLARE_METATYPE(ApiPointer);
99 typedef QList<QPair<QString, unsigned long long> > Signature;
101 ApiBitmask(const trace::Bitmask *bitmask = 0);
103 QString toString() const;
105 unsigned long long value() const;
106 Signature signature() const;
109 void init(const trace::Bitmask *bitmask);
112 unsigned long long m_value;
114 Q_DECLARE_METATYPE(ApiBitmask);
121 QStringList memberNames;
124 ApiStruct(const trace::Struct *s = 0);
126 QString toString(bool multiLine = false) const;
127 Signature signature() const;
128 QList<QVariant> values() const;
131 void init(const trace::Struct *bitmask);
134 QList<QVariant> m_members;
136 Q_DECLARE_METATYPE(ApiStruct);
141 ApiArray(const trace::Array *arr = 0);
142 ApiArray(const QVector<QVariant> &vals);
144 QString toString(bool multiLine = false) const;
146 QVector<QVariant> values() const;
148 void init(const trace::Array *arr);
150 QVector<QVariant> m_array;
152 Q_DECLARE_METATYPE(ApiArray);
155 QString apiVariantToString(const QVariant &variant, bool multiLine = false);
159 class ApiTraceState {
162 explicit ApiTraceState(const QVariantMap &parseJson);
164 bool isEmpty() const;
165 const QVariantMap & parameters() const;
166 const QMap<QString, QString> & shaderSources() const;
167 const QVariantMap & uniforms() const;
168 const QList<ApiTexture> & textures() const;
169 const QList<ApiFramebuffer> & framebuffers() const;
171 ApiFramebuffer colorBuffer() const;
173 QVariantMap m_parameters;
174 QMap<QString, QString> m_shaderSources;
175 QVariantMap m_uniforms;
176 QList<ApiTexture> m_textures;
177 QList<ApiFramebuffer> m_framebuffers;
179 Q_DECLARE_METATYPE(ApiTraceState);
181 class ApiTraceCallSignature
184 ApiTraceCallSignature(const QString &name,
185 const QStringList &argNames);
186 ~ApiTraceCallSignature();
192 QStringList argNames() const
197 QUrl helpUrl() const;
198 void setHelpUrl(const QUrl &url);
202 QStringList m_argNames;
216 ApiTraceEvent(Type t);
217 virtual ~ApiTraceEvent();
219 Type type() const { return (Type)m_type; }
221 virtual QStaticText staticText() const = 0;
222 virtual int numChildren() const = 0;
224 QVariantMap stateParameters() const;
225 ApiTraceState *state() const;
226 void setState(ApiTraceState *state);
227 bool hasState() const
229 return m_state && !m_state->isEmpty();
234 mutable bool m_hasBinaryData;
235 mutable int m_binaryDataIndex:8;
236 ApiTraceState *m_state;
238 mutable QStaticText *m_staticText;
240 Q_DECLARE_METATYPE(ApiTraceEvent*);
242 class ApiTraceCall : public ApiTraceEvent
245 ApiTraceCall(ApiTraceFrame *parentFrame, TraceLoader *loader,
246 const trace::Call *tcall);
250 QString name() const;
251 QStringList argNames() const;
252 QVector<QVariant> arguments() const;
253 QVariant returnValue() const;
254 trace::CallFlags flags() const;
255 QUrl helpUrl() const;
256 void setHelpUrl(const QUrl &url);
257 ApiTraceFrame *parentFrame()const;
258 void setParentFrame(ApiTraceFrame *frame);
260 bool hasError() const;
261 QString error() const;
262 void setError(const QString &msg);
264 QVector<QVariant> originalValues() const;
267 void setEditedValues(const QVector<QVariant> &lst);
268 QVector<QVariant> editedValues() const;
271 bool contains(const QString &str,
272 Qt::CaseSensitivity sensitivity) const;
274 ApiTrace *parentTrace() const;
276 QString toHtml() const;
277 QString searchText() const;
278 QStaticText staticText() const;
279 int numChildren() const;
280 bool hasBinaryData() const;
281 int binaryDataIndex() const;
283 QString backtrace() const;
284 void setBacktrace(QString backtrace);
287 ApiTraceCallSignature *m_signature;
288 QVector<QVariant> m_argValues;
289 QVariant m_returnValue;
290 trace::CallFlags m_flags;
291 ApiTraceFrame *m_parentFrame;
293 QVector<QVariant> m_editedValues;
299 mutable QString m_richText;
300 mutable QString m_searchText;
302 Q_DECLARE_METATYPE(ApiTraceCall*);
304 class ApiTraceFrame : public ApiTraceEvent
307 ApiTraceFrame(ApiTrace *parent=0);
311 bool isEmpty() const;
313 void setParentTrace(ApiTrace *parent);
314 ApiTrace *parentTrace() const;
316 void setNumChildren(int num);
317 int numChildren() const;
318 int numChildrenToLoad() const;
319 QStaticText staticText() const;
321 int callIndex(ApiTraceCall *call) const;
322 ApiTraceCall *call(int idx) const;
323 ApiTraceCall *callWithIndex(int index) const;
324 void addCall(ApiTraceCall *call);
325 QVector<ApiTraceCall*> calls() const;
326 void setCalls(const QVector<ApiTraceCall*> &calls,
327 quint64 binaryDataSize);
329 ApiTraceCall *findNextCall(ApiTraceCall *from,
331 Qt::CaseSensitivity sensitivity) const;
333 ApiTraceCall *findPrevCall(ApiTraceCall *from,
335 Qt::CaseSensitivity sensitivity) const;
337 int binaryDataSize() const;
339 bool isLoaded() const;
340 void setLoaded(bool l);
342 void setLastCallIndex(unsigned index);
343 unsigned lastCallIndex() const;
345 void setThumbnail(const QImage & thumbnail);
346 const QImage & thumbnail() const;
349 ApiTrace *m_parentTrace;
350 quint64 m_binaryDataSize;
351 QVector<ApiTraceCall*> m_calls;
353 unsigned m_callsToLoad;
354 unsigned m_lastCallIndex;
357 Q_DECLARE_METATYPE(ApiTraceFrame*);