]> git.cworth.org Git - apitrace/blob - gui/apitracecall.h
Various part now propagate the values.
[apitrace] / gui / apitracecall.h
1 #ifndef APITRACECALL_H
2 #define APITRACECALL_H
3
4 #include "apisurface.h"
5
6 #include <QStaticText>
7 #include <QStringList>
8 #include <QUrl>
9 #include <QVariant>
10
11 #include "trace_model.hpp"
12
13
14 class ApiTrace;
15
16 class VariantVisitor : public Trace::Visitor
17 {
18 public:
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);
31
32     QVariant variant() const
33     {
34         return m_variant;
35     }
36 private:
37     QVariant m_variant;
38 };
39
40
41 class ApiPointer
42 {
43 public:
44     ApiPointer(int val=0);
45
46     QString toString() const;
47 private:
48     int m_value;
49 };
50 Q_DECLARE_METATYPE(ApiPointer);
51
52 class ApiBitmask
53 {
54 public:
55     typedef QList<QPair<QString, unsigned long long> > Signature;
56
57     ApiBitmask(const Trace::Bitmask *bitmask = 0);
58
59     QString toString() const;
60
61 private:
62     void init(const Trace::Bitmask *bitmask);
63 private:
64     Signature m_sig;
65     unsigned long long m_value;
66 };
67 Q_DECLARE_METATYPE(ApiBitmask);
68
69 class ApiStruct
70 {
71 public:
72     struct Signature {
73         QString name;
74         QStringList memberNames;
75     };
76
77     ApiStruct(const Trace::Struct *s = 0);
78
79     QString toString() const;
80
81 private:
82     void init(const Trace::Struct *bitmask);
83 private:
84     Signature m_sig;
85     QList<QVariant> m_members;
86 };
87 Q_DECLARE_METATYPE(ApiStruct);
88
89 class ApiArray
90 {
91 public:
92     ApiArray(const Trace::Array *arr = 0);
93     ApiArray(const QList<QVariant> &vals);
94
95     QString toString() const;
96
97     QList<QVariant> values() const;
98 private:
99     void init(const Trace::Array *arr);
100 private:
101     QList<QVariant> m_array;
102 };
103 Q_DECLARE_METATYPE(ApiArray);
104
105
106 QString apiVariantToString(const QVariant &variant);
107
108 class ApiTraceFrame;
109
110 class ApiTraceState {
111 public:
112     ApiTraceState();
113     explicit ApiTraceState(const QVariantMap &parseJson);
114
115     bool isEmpty() const;
116     QVariantMap parameters() const;
117     QMap<QString, QString> shaderSources() const;
118     QList<ApiTexture> textures() const;
119     QList<ApiFramebuffer> framebuffers() const;
120
121 private:
122     QVariantMap m_parameters;
123     QMap<QString, QString> m_shaderSources;
124     QList<ApiTexture> m_textures;
125     QList<ApiFramebuffer> m_framebuffers;
126 };
127 Q_DECLARE_METATYPE(ApiTraceState);
128
129 class ApiTraceEvent
130 {
131 public:
132     enum Type {
133         None,
134         Call,
135         Frame
136     };
137 public:
138     ApiTraceEvent();
139     ApiTraceEvent(Type t);
140     virtual ~ApiTraceEvent();
141
142     Type type() const { return m_type; }
143
144     virtual QStaticText staticText() const = 0;
145     virtual int numChildren() const = 0;
146
147     QVariantMap stateParameters() const;
148     ApiTraceState state() const;
149     void setState(const ApiTraceState &state);
150
151 protected:
152     Type m_type;
153     ApiTraceState m_state;
154
155     mutable QStaticText *m_staticText;
156 };
157 Q_DECLARE_METATYPE(ApiTraceEvent*);
158
159 class ApiTraceCall : public ApiTraceEvent
160 {
161 public:
162     ApiTraceCall();
163     ApiTraceCall(const Trace::Call *tcall);
164     ~ApiTraceCall();
165
166     int index() const;
167     QString name() const;
168     QStringList argNames() const;
169     QVariantList arguments() const;
170     QVariant returnValue() const;
171     QUrl helpUrl() const;
172     void setHelpUrl(const QUrl &url);
173     ApiTraceFrame *parentFrame()const;
174     void setParentFrame(ApiTraceFrame *frame);
175
176     QVariantList originalValues() const;
177
178     bool edited() const;
179     void setEditedValues(const QVariantList &lst);
180     QVariantList editedValues() const;
181     void revert();
182
183     QString toHtml() const;
184     QString filterText() const;
185     QStaticText staticText() const;
186     int numChildren() const;
187     bool hasBinaryData() const;
188     int binaryDataIndex() const;
189 private:
190     int m_index;
191     QString m_name;
192     QStringList m_argNames;
193     QVariantList m_argValues;
194     QVariant m_returnValue;
195     ApiTraceFrame *m_parentFrame;
196     QUrl m_helpUrl;
197
198     QVariantList m_editedValues;
199
200     mutable QString m_richText;
201     mutable QString m_filterText;
202     mutable bool m_hasBinaryData;
203     mutable int m_binaryDataIndex;
204 };
205 Q_DECLARE_METATYPE(ApiTraceCall*);
206
207 class ApiTraceFrame : public ApiTraceEvent
208 {
209 public:
210     ApiTraceFrame();
211     int number;
212     QList<ApiTraceCall*> calls;
213
214     ApiTrace *parentTrace() const;
215     void setParentTrace(ApiTrace *trace);
216
217     int numChildren() const;
218     QStaticText staticText() const;
219 private:
220     ApiTrace *m_parentTrace;
221 };
222 Q_DECLARE_METATYPE(ApiTraceFrame*);
223
224
225 #endif