4 #include "apisurface.h"
11 #include "trace_model.hpp"
16 class VariantVisitor : public Trace::Visitor
19 VariantVisitor(ApiTrace *trace)
22 virtual void visit(Trace::Null *);
23 virtual void visit(Trace::Bool *node);
24 virtual void visit(Trace::SInt *node);
25 virtual void visit(Trace::UInt *node);
26 virtual void visit(Trace::Float *node);
27 virtual void visit(Trace::String *node);
28 virtual void visit(Trace::Enum *e);
29 virtual void visit(Trace::Bitmask *bitmask);
30 virtual void visit(Trace::Struct *str);
31 virtual void visit(Trace::Array *array);
32 virtual void visit(Trace::Blob *blob);
33 virtual void visit(Trace::Pointer *ptr);
35 QVariant variant() const
44 class ApiTraceEnumSignature
47 ApiTraceEnumSignature(const QString &name = QString(),
48 const QVariant &val=QVariant())\
53 QVariant value() const { return m_value; }
54 QString name() const { return m_name; }
63 ApiEnum(ApiTraceEnumSignature *sig=0);
65 QString toString() const;
67 QVariant value() const;
70 ApiTraceEnumSignature *m_sig;
72 Q_DECLARE_METATYPE(ApiEnum);
77 ApiPointer(unsigned long long val=0);
79 QString toString() const;
81 unsigned long long value() const;
84 unsigned long long m_value;
86 Q_DECLARE_METATYPE(ApiPointer);
91 typedef QList<QPair<QString, unsigned long long> > Signature;
93 ApiBitmask(const Trace::Bitmask *bitmask = 0);
95 QString toString() const;
97 unsigned long long value() const;
98 Signature signature() const;
101 void init(const Trace::Bitmask *bitmask);
104 unsigned long long m_value;
106 Q_DECLARE_METATYPE(ApiBitmask);
113 QStringList memberNames;
116 ApiStruct(const Trace::Struct *s = 0);
118 QString toString() const;
119 Signature signature() const;
120 QList<QVariant> values() const;
123 void init(const Trace::Struct *bitmask);
126 QList<QVariant> m_members;
128 Q_DECLARE_METATYPE(ApiStruct);
133 ApiArray(const Trace::Array *arr = 0);
134 ApiArray(const QVector<QVariant> &vals);
136 QString toString() const;
138 QVector<QVariant> values() const;
140 void init(const Trace::Array *arr);
142 QVector<QVariant> m_array;
144 Q_DECLARE_METATYPE(ApiArray);
147 QString apiVariantToString(const QVariant &variant, bool multiLine = false);
151 class ApiTraceState {
154 explicit ApiTraceState(const QVariantMap &parseJson);
156 bool isEmpty() const;
157 const QVariantMap & parameters() const;
158 const QMap<QString, QString> & shaderSources() const;
159 const QVariantMap & uniforms() const;
160 const QList<ApiTexture> & textures() const;
161 const QList<ApiFramebuffer> & framebuffers() const;
164 QVariantMap m_parameters;
165 QMap<QString, QString> m_shaderSources;
166 QVariantMap m_uniforms;
167 QList<ApiTexture> m_textures;
168 QList<ApiFramebuffer> m_framebuffers;
170 Q_DECLARE_METATYPE(ApiTraceState);
172 class ApiTraceCallSignature
175 ApiTraceCallSignature(const QString &name,
176 const QStringList &argNames);
177 ~ApiTraceCallSignature();
183 QStringList argNames() const
188 QUrl helpUrl() const;
189 void setHelpUrl(const QUrl &url);
193 QStringList m_argNames;
207 ApiTraceEvent(Type t);
208 virtual ~ApiTraceEvent();
210 Type type() const { return (Type)m_type; }
212 virtual QStaticText staticText() const = 0;
213 virtual int numChildren() const = 0;
215 QVariantMap stateParameters() const;
216 ApiTraceState *state() const;
217 void setState(ApiTraceState *state);
218 bool hasState() const
220 return m_state && !m_state->isEmpty();
225 mutable bool m_hasBinaryData;
226 mutable int m_binaryDataIndex:8;
227 ApiTraceState *m_state;
229 mutable QStaticText *m_staticText;
231 Q_DECLARE_METATYPE(ApiTraceEvent*);
233 class ApiTraceCall : public ApiTraceEvent
236 ApiTraceCall(ApiTraceFrame *parentFrame, const Trace::Call *tcall);
240 QString name() const;
241 QStringList argNames() const;
242 QVector<QVariant> arguments() const;
243 QVariant returnValue() const;
244 QUrl helpUrl() const;
245 void setHelpUrl(const QUrl &url);
246 ApiTraceFrame *parentFrame()const;
247 void setParentFrame(ApiTraceFrame *frame);
249 bool hasError() const;
250 QString error() const;
251 void setError(const QString &msg);
253 QVector<QVariant> originalValues() const;
256 void setEditedValues(const QVector<QVariant> &lst);
257 QVector<QVariant> editedValues() const;
260 ApiTrace *parentTrace() const;
262 QString toHtml() const;
263 QString searchText() const;
264 QStaticText staticText() const;
265 int numChildren() const;
266 bool hasBinaryData() const;
267 int binaryDataIndex() const;
270 ApiTraceCallSignature *m_signature;
271 QVector<QVariant> m_argValues;
272 QVariant m_returnValue;
273 ApiTraceFrame *m_parentFrame;
275 QVector<QVariant> m_editedValues;
279 mutable QString m_richText;
280 mutable QString m_searchText;
282 Q_DECLARE_METATYPE(ApiTraceCall*);
284 class ApiTraceFrame : public ApiTraceEvent
287 ApiTraceFrame(ApiTrace *parent);
290 bool isEmpty() const;
292 ApiTrace *parentTrace() const;
294 int numChildren() const;
295 QStaticText staticText() const;
297 int callIndex(ApiTraceCall *call) const;
298 ApiTraceCall *call(int idx) const;
299 void addCall(ApiTraceCall *call);
300 QVector<ApiTraceCall*> calls() const;
301 void setCalls(const QVector<ApiTraceCall*> &calls,
302 quint64 binaryDataSize);
304 int binaryDataSize() const;
306 ApiTrace *m_parentTrace;
307 quint64 m_binaryDataSize;
308 QVector<ApiTraceCall*> m_calls;
310 Q_DECLARE_METATYPE(ApiTraceFrame*);