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::String *node);
29 virtual void visit(Trace::Enum *e);
30 virtual void visit(Trace::Bitmask *bitmask);
31 virtual void visit(Trace::Struct *str);
32 virtual void visit(Trace::Array *array);
33 virtual void visit(Trace::Blob *blob);
34 virtual void visit(Trace::Pointer *ptr);
36 QVariant variant() const
41 TraceLoader *m_loader;
45 class ApiTraceEnumSignature
48 ApiTraceEnumSignature(const QString &name = QString(),
49 const QVariant &val=QVariant())\
54 QVariant value() const { return m_value; }
55 QString name() const { return m_name; }
64 ApiEnum(ApiTraceEnumSignature *sig=0);
66 QString toString() const;
68 QVariant value() const;
71 ApiTraceEnumSignature *m_sig;
73 Q_DECLARE_METATYPE(ApiEnum);
78 ApiPointer(unsigned long long val=0);
80 QString toString() const;
82 unsigned long long value() const;
85 unsigned long long m_value;
87 Q_DECLARE_METATYPE(ApiPointer);
92 typedef QList<QPair<QString, unsigned long long> > Signature;
94 ApiBitmask(const Trace::Bitmask *bitmask = 0);
96 QString toString() const;
98 unsigned long long value() const;
99 Signature signature() const;
102 void init(const Trace::Bitmask *bitmask);
105 unsigned long long m_value;
107 Q_DECLARE_METATYPE(ApiBitmask);
114 QStringList memberNames;
117 ApiStruct(const Trace::Struct *s = 0);
119 QString toString() const;
120 Signature signature() const;
121 QList<QVariant> values() const;
124 void init(const Trace::Struct *bitmask);
127 QList<QVariant> m_members;
129 Q_DECLARE_METATYPE(ApiStruct);
134 ApiArray(const Trace::Array *arr = 0);
135 ApiArray(const QVector<QVariant> &vals);
137 QString toString() const;
139 QVector<QVariant> values() const;
141 void init(const Trace::Array *arr);
143 QVector<QVariant> m_array;
145 Q_DECLARE_METATYPE(ApiArray);
148 QString apiVariantToString(const QVariant &variant, bool multiLine = false);
152 class ApiTraceState {
155 explicit ApiTraceState(const QVariantMap &parseJson);
157 bool isEmpty() const;
158 const QVariantMap & parameters() const;
159 const QMap<QString, QString> & shaderSources() const;
160 const QVariantMap & uniforms() const;
161 const QList<ApiTexture> & textures() const;
162 const QList<ApiFramebuffer> & framebuffers() const;
165 QVariantMap m_parameters;
166 QMap<QString, QString> m_shaderSources;
167 QVariantMap m_uniforms;
168 QList<ApiTexture> m_textures;
169 QList<ApiFramebuffer> m_framebuffers;
171 Q_DECLARE_METATYPE(ApiTraceState);
173 class ApiTraceCallSignature
176 ApiTraceCallSignature(const QString &name,
177 const QStringList &argNames);
178 ~ApiTraceCallSignature();
184 QStringList argNames() const
189 QUrl helpUrl() const;
190 void setHelpUrl(const QUrl &url);
194 QStringList m_argNames;
208 ApiTraceEvent(Type t);
209 virtual ~ApiTraceEvent();
211 Type type() const { return (Type)m_type; }
213 virtual QStaticText staticText() const = 0;
214 virtual int numChildren() const = 0;
216 QVariantMap stateParameters() const;
217 ApiTraceState *state() const;
218 void setState(ApiTraceState *state);
219 bool hasState() const
221 return m_state && !m_state->isEmpty();
226 mutable bool m_hasBinaryData;
227 mutable int m_binaryDataIndex:8;
228 ApiTraceState *m_state;
230 mutable QStaticText *m_staticText;
232 Q_DECLARE_METATYPE(ApiTraceEvent*);
234 class ApiTraceCall : public ApiTraceEvent
237 ApiTraceCall(ApiTraceFrame *parentFrame, TraceLoader *loader,
238 const Trace::Call *tcall);
242 QString name() const;
243 QStringList argNames() const;
244 QVector<QVariant> arguments() const;
245 QVariant returnValue() const;
246 QUrl helpUrl() const;
247 void setHelpUrl(const QUrl &url);
248 ApiTraceFrame *parentFrame()const;
249 void setParentFrame(ApiTraceFrame *frame);
251 bool hasError() const;
252 QString error() const;
253 void setError(const QString &msg);
255 QVector<QVariant> originalValues() const;
258 void setEditedValues(const QVector<QVariant> &lst);
259 QVector<QVariant> editedValues() const;
262 bool contains(const QString &str,
263 Qt::CaseSensitivity sensitivity) const;
265 ApiTrace *parentTrace() const;
267 QString toHtml() const;
268 QString searchText() const;
269 QStaticText staticText() const;
270 int numChildren() const;
271 bool hasBinaryData() const;
272 int binaryDataIndex() const;
275 ApiTraceCallSignature *m_signature;
276 QVector<QVariant> m_argValues;
277 QVariant m_returnValue;
278 ApiTraceFrame *m_parentFrame;
280 QVector<QVariant> m_editedValues;
284 mutable QString m_richText;
285 mutable QString m_searchText;
287 Q_DECLARE_METATYPE(ApiTraceCall*);
289 class ApiTraceFrame : public ApiTraceEvent
292 ApiTraceFrame(ApiTrace *parent=0);
295 bool isEmpty() const;
297 void setParentTrace(ApiTrace *parent);
298 ApiTrace *parentTrace() const;
300 void setNumChildren(int num);
301 int numChildren() const;
302 int numChildrenToLoad() const;
303 QStaticText staticText() const;
305 int callIndex(ApiTraceCall *call) const;
306 ApiTraceCall *call(int idx) const;
307 void addCall(ApiTraceCall *call);
308 QVector<ApiTraceCall*> calls() const;
309 void setCalls(const QVector<ApiTraceCall*> &calls,
310 quint64 binaryDataSize);
312 ApiTraceCall *findNextCall(ApiTraceCall *from,
314 Qt::CaseSensitivity sensitivity) const;
316 ApiTraceCall *findPrevCall(ApiTraceCall *from,
318 Qt::CaseSensitivity sensitivity) const;
320 int binaryDataSize() const;
323 void setLoaded(bool l);
325 ApiTrace *m_parentTrace;
326 quint64 m_binaryDataSize;
327 QVector<ApiTraceCall*> m_calls;
329 unsigned m_callsToLoad;
331 Q_DECLARE_METATYPE(ApiTraceFrame*);