+QString apiVariantToString(const QVariant &variant, bool multiLine = false);
+
+class ApiTraceFrame;
+
+class ApiTraceState {
+public:
+ ApiTraceState();
+ explicit ApiTraceState(const QVariantMap &parseJson);
+
+ bool isEmpty() const;
+ const QVariantMap & parameters() const;
+ const QMap<QString, QString> & shaderSources() const;
+ const QVariantMap & uniforms() const;
+ const QList<ApiTexture> & textures() const;
+ const QList<ApiFramebuffer> & framebuffers() const;
+
+ ApiFramebuffer colorBuffer() const;
+private:
+ QVariantMap m_parameters;
+ QMap<QString, QString> m_shaderSources;
+ QVariantMap m_uniforms;
+ QList<ApiTexture> m_textures;
+ QList<ApiFramebuffer> m_framebuffers;
+};
+Q_DECLARE_METATYPE(ApiTraceState);
+
+class ApiTraceCallSignature
+{
+public:
+ ApiTraceCallSignature(const QString &name,
+ const QStringList &argNames);
+ ~ApiTraceCallSignature();
+
+ QString name() const
+ {
+ return m_name;
+ }
+ QStringList argNames() const
+ {
+ return m_argNames;
+ }
+
+ QUrl helpUrl() const;
+ void setHelpUrl(const QUrl &url);
+
+private:
+ QString m_name;
+ QStringList m_argNames;
+ QUrl m_helpUrl;
+};
+
+class ApiTraceCall;
+
+class ApiTraceEvent
+{
+public:
+ enum Type {
+ None = 0,
+ Call = 1 << 0,
+ Frame = 1 << 1
+ };
+public:
+ ApiTraceEvent();
+ ApiTraceEvent(Type t);
+ virtual ~ApiTraceEvent();
+
+ Type type() const { return (Type)m_type; }
+
+ virtual QStaticText staticText() const = 0;
+ virtual int numChildren() const = 0;
+ virtual int callIndex(ApiTraceCall *call) const = 0;
+ virtual ApiTraceEvent *eventAtRow(int row) const = 0;
+
+ QVariantMap stateParameters() const;
+ ApiTraceState *state() const;
+ void setState(ApiTraceState *state);
+ bool hasState() const
+ {
+ return m_state && !m_state->isEmpty();
+ }
+
+protected:
+ int m_type : 4;
+ mutable bool m_hasBinaryData;
+ mutable int m_binaryDataIndex:8;
+ ApiTraceState *m_state;
+
+ mutable QStaticText *m_staticText;
+};
+Q_DECLARE_METATYPE(ApiTraceEvent*);
+
+class ApiTraceCall : public ApiTraceEvent
+{
+public:
+ ApiTraceCall(ApiTraceCall *parentCall, TraceLoader *loader,
+ const trace::Call *tcall);
+ ApiTraceCall(ApiTraceFrame *parentFrame, TraceLoader *loader,
+ const trace::Call *tcall);
+ ~ApiTraceCall();
+
+ int index() const;
+ QString name() const;
+ QStringList argNames() const;
+ QVector<QVariant> arguments() const;
+ QVariant returnValue() const;
+ trace::CallFlags flags() const;
+ QUrl helpUrl() const;
+ void setHelpUrl(const QUrl &url);
+ ApiTraceFrame *parentFrame()const;
+ void setParentFrame(ApiTraceFrame *frame);
+
+ int callIndex(ApiTraceCall *call) const;
+
+ ApiTraceEvent *parentEvent() const;
+ ApiTraceCall *parentCall() const;
+ QVector<ApiTraceCall*> children() const;
+ ApiTraceEvent *eventAtRow(int row) const;
+ void addChild(ApiTraceCall *call);
+ void finishedAddingChildren();
+
+ bool hasError() const;
+ QString error() const;
+ void setError(const QString &msg);
+
+ QVector<QVariant> originalValues() const;
+
+ bool edited() const;
+ void setEditedValues(const QVector<QVariant> &lst);
+ QVector<QVariant> editedValues() const;
+ void revert();
+
+ bool contains(const QString &str,
+ Qt::CaseSensitivity sensitivity) const;