]> git.cworth.org Git - apitrace/blob - gui/apitracecall.h
Add code to interpret and display binary vertex data.
[apitrace] / gui / apitracecall.h
1 #ifndef APITRACECALL_H
2 #define APITRACECALL_H
3
4 #include <QStaticText>
5 #include <QStringList>
6 #include <QVariant>
7
8 #include "trace_model.hpp"
9
10
11 class VariantVisitor : public Trace::Visitor
12 {
13 public:
14     virtual void visit(Trace::Null *);
15     virtual void visit(Trace::Bool *node);
16     virtual void visit(Trace::SInt *node);
17     virtual void visit(Trace::UInt *node);
18     virtual void visit(Trace::Float *node);
19     virtual void visit(Trace::String *node);
20     virtual void visit(Trace::Enum *e);
21     virtual void visit(Trace::Bitmask *bitmask);
22     virtual void visit(Trace::Struct *str);
23     virtual void visit(Trace::Array *array);
24     virtual void visit(Trace::Blob *blob);
25     virtual void visit(Trace::Pointer *ptr);
26
27     QVariant variant() const
28     {
29         return m_variant;
30     }
31 private:
32     QVariant m_variant;
33 };
34
35
36 class ApiPointer
37 {
38 public:
39     ApiPointer(int val=0);
40
41     QString toString() const;
42 private:
43     int m_value;
44 };
45 Q_DECLARE_METATYPE(ApiPointer);
46
47 class ApiBitmask
48 {
49 public:
50     typedef QList<QPair<QString, unsigned long long> > Signature;
51
52     ApiBitmask(const Trace::Bitmask *bitmask = 0);
53
54     QString toString() const;
55
56 private:
57     void init(const Trace::Bitmask *bitmask);
58 private:
59     Signature m_sig;
60     unsigned long long m_value;
61 };
62 Q_DECLARE_METATYPE(ApiBitmask);
63
64 class ApiStruct
65 {
66 public:
67     struct Signature {
68         QString name;
69         QStringList memberNames;
70     };
71
72     ApiStruct(const Trace::Struct *s = 0);
73
74     QString toString() const;
75
76 private:
77     void init(const Trace::Struct *bitmask);
78 private:
79     Signature m_sig;
80     QList<QVariant> m_members;
81 };
82 Q_DECLARE_METATYPE(ApiStruct);
83
84 class ApiArray
85 {
86 public:
87     ApiArray(const Trace::Array *arr = 0);
88
89     QString toString() const;
90
91 private:
92     void init(const Trace::Array *arr);
93 private:
94     QList<QVariant> m_array;
95 };
96 Q_DECLARE_METATYPE(ApiArray);
97
98
99 QString apiVariantToString(const QVariant &variant);
100
101 class ApiTraceFrame;
102
103 class ApiTraceEvent
104 {
105 public:
106     enum Type {
107         None,
108         Call,
109         Frame
110     };
111 public:
112     ApiTraceEvent();
113     ApiTraceEvent(Type t);
114
115     Type type() const { return m_type; }
116
117     virtual QStaticText staticText() const = 0;
118     virtual int numChildren() const = 0;
119
120     QVariantMap state() const;
121     void setState(const QVariantMap &state);
122
123 protected:
124     Type m_type;
125     QVariantMap m_state;
126 };
127 Q_DECLARE_METATYPE(ApiTraceEvent*);
128
129 class ApiTraceCall : public ApiTraceEvent
130 {
131 public:
132     ApiTraceCall();
133     ~ApiTraceCall();
134
135     int index;
136     QString name;
137     QStringList argNames;
138     QVariantList argValues;
139     QVariant returnValue;
140     ApiTraceFrame *parentFrame;
141
142     QString toHtml() const;
143     QString filterText() const;
144     QStaticText staticText() const;
145     int numChildren() const;
146     bool hasBinaryData() const;
147     int binaryDataIndex() const;
148 private:
149     mutable QString m_richText;
150     mutable QString m_filterText;
151     mutable QStaticText m_staticText;
152     mutable bool m_hasBinaryData;
153     mutable int m_binaryDataIndex;
154 };
155 Q_DECLARE_METATYPE(ApiTraceCall*);
156
157 class ApiTraceFrame : public ApiTraceEvent
158 {
159 public:
160     ApiTraceFrame();
161     int number;
162     QList<ApiTraceCall*> calls;
163
164     int numChildren() const;
165     QStaticText staticText() const;
166 private:
167     mutable QStaticText m_staticText;
168 };
169 Q_DECLARE_METATYPE(ApiTraceFrame*);
170
171
172 #endif