4 #include "apisurface.h"
11 #include "trace_model.hpp"
16 class VariantVisitor : public Trace::Visitor
19 virtual void visit(Trace::Null *);
20 virtual void visit(Trace::Bool *node);
21 virtual void visit(Trace::SInt *node);
22 virtual void visit(Trace::UInt *node);
23 virtual void visit(Trace::Float *node);
24 virtual void visit(Trace::String *node);
25 virtual void visit(Trace::Enum *e);
26 virtual void visit(Trace::Bitmask *bitmask);
27 virtual void visit(Trace::Struct *str);
28 virtual void visit(Trace::Array *array);
29 virtual void visit(Trace::Blob *blob);
30 virtual void visit(Trace::Pointer *ptr);
32 QVariant variant() const
43 ApiEnum(const QString &name = QString(), const QVariant &val=QVariant());
45 QString toString() const;
47 QVariant value() const;
53 Q_DECLARE_METATYPE(ApiEnum);
58 ApiPointer(unsigned long long val=0);
60 QString toString() const;
62 unsigned long long value() const;
65 unsigned long long m_value;
67 Q_DECLARE_METATYPE(ApiPointer);
72 typedef QList<QPair<QString, unsigned long long> > Signature;
74 ApiBitmask(const Trace::Bitmask *bitmask = 0);
76 QString toString() const;
78 unsigned long long value() const;
79 Signature signature() const;
82 void init(const Trace::Bitmask *bitmask);
85 unsigned long long m_value;
87 Q_DECLARE_METATYPE(ApiBitmask);
94 QStringList memberNames;
97 ApiStruct(const Trace::Struct *s = 0);
99 QString toString() const;
100 Signature signature() const;
101 QList<QVariant> values() const;
104 void init(const Trace::Struct *bitmask);
107 QList<QVariant> m_members;
109 Q_DECLARE_METATYPE(ApiStruct);
114 ApiArray(const Trace::Array *arr = 0);
115 ApiArray(const QList<QVariant> &vals);
117 QString toString() const;
119 QList<QVariant> values() const;
121 void init(const Trace::Array *arr);
123 QList<QVariant> m_array;
125 Q_DECLARE_METATYPE(ApiArray);
128 QString apiVariantToString(const QVariant &variant, bool multiLine = false);
132 class ApiTraceState {
135 explicit ApiTraceState(const QVariantMap &parseJson);
137 bool isEmpty() const;
138 const QVariantMap & parameters() const;
139 const QMap<QString, QString> & shaderSources() const;
140 const QVariantMap & uniforms() const;
141 const QList<ApiTexture> & textures() const;
142 const QList<ApiFramebuffer> & framebuffers() const;
145 QVariantMap m_parameters;
146 QMap<QString, QString> m_shaderSources;
147 QVariantMap m_uniforms;
148 QList<ApiTexture> m_textures;
149 QList<ApiFramebuffer> m_framebuffers;
151 Q_DECLARE_METATYPE(ApiTraceState);
153 class ApiTraceCallSignature
156 ApiTraceCallSignature(const QString &name,
157 const QStringList &argNames);
158 ~ApiTraceCallSignature();
164 QStringList argNames() const
169 QUrl helpUrl() const;
170 void setHelpUrl(const QUrl &url);
174 QStringList m_argNames;
188 ApiTraceEvent(Type t);
189 virtual ~ApiTraceEvent();
191 Type type() const { return (Type)m_type; }
193 virtual QStaticText staticText() const = 0;
194 virtual int numChildren() const = 0;
196 QVariantMap stateParameters() const;
197 ApiTraceState *state() const;
198 void setState(ApiTraceState *state);
199 bool hasState() const
201 return m_state && !m_state->isEmpty();
206 mutable bool m_hasBinaryData;
207 mutable int m_binaryDataIndex:8;
208 ApiTraceState *m_state;
210 mutable QStaticText *m_staticText;
212 Q_DECLARE_METATYPE(ApiTraceEvent*);
214 class ApiTraceCall : public ApiTraceEvent
217 ApiTraceCall(ApiTraceFrame *parentFrame, const Trace::Call *tcall);
221 QString name() const;
222 QStringList argNames() const;
223 QVariantList arguments() const;
224 QVariant returnValue() const;
225 QUrl helpUrl() const;
226 void setHelpUrl(const QUrl &url);
227 ApiTraceFrame *parentFrame()const;
228 void setParentFrame(ApiTraceFrame *frame);
230 bool hasError() const;
231 QString error() const;
232 void setError(const QString &msg);
234 QVariantList originalValues() const;
237 void setEditedValues(const QVariantList &lst);
238 QVariantList editedValues() const;
241 ApiTrace *parentTrace() const;
243 QString toHtml() const;
244 QString searchText() const;
245 QStaticText staticText() const;
246 int numChildren() const;
247 bool hasBinaryData() const;
248 int binaryDataIndex() const;
251 ApiTraceCallSignature *m_signature;
252 QVariantList m_argValues;
253 QVariant m_returnValue;
254 ApiTraceFrame *m_parentFrame;
256 QVariantList m_editedValues;
260 mutable QString m_richText;
261 mutable QString m_searchText;
263 Q_DECLARE_METATYPE(ApiTraceCall*);
265 class ApiTraceFrame : public ApiTraceEvent
268 ApiTraceFrame(ApiTrace *parent);
271 bool isEmpty() const;
273 ApiTrace *parentTrace() const;
275 int numChildren() const;
276 QStaticText staticText() const;
278 int callIndex(ApiTraceCall *call) const;
279 ApiTraceCall *call(int idx) const;
280 void addCall(ApiTraceCall *call);
281 QList<ApiTraceCall*> calls() const;
283 int binaryDataSize() const;
285 ApiTrace *m_parentTrace;
286 quint64 m_binaryDataSize;
287 QList<ApiTraceCall*> m_calls;
289 Q_DECLARE_METATYPE(ApiTraceFrame*);