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