annotate qt/core/QMetaObject.d @ 288:f9559a957be9 signals

new signals and slots implementation
author eldar
date Sun, 08 Nov 2009 19:28:01 +0000
parents 073b9153ed8a
children 7c2cf27391c4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
1 module qt.core.QMetaObject;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
2
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
3 import qt.QGlobal;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
4 import qt.core.QObject;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
5 import qt.QtdObject;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
6
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
7 import std.algorithm;
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
8
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
9 class Meta
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
10 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
11 string name;
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
12 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
13
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
14 class MetaType : Meta
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
15 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
16 this()
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
17 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
18 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
19 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
20
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
21 class MetaVariable : Meta
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
22 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
23 MetaType type;
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
24 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
25
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
26 class MetaCallable : Meta { }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
27
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
28 class MetaMethod : Meta { }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
29
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
30 class QMetaArgument : MetaVariable { }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
31
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
32 class QMetaMethod : MetaMethod
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
33 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
34 // QMetaArgument[] arguments;
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
35 string signature;
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
36 int indexOfMethod;
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
37
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
38 this(string signature_, int indexOfMethod_)
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
39 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
40 signature = signature_;
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
41 indexOfMethod = indexOfMethod_;
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
42 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
43 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
44
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
45 class QMetaSignal : QMetaMethod
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
46 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
47 this(string signature_, int indexOfMethod_)
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
48 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
49 super(signature_, indexOfMethod_);
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
50 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
51 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
52
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
53 class QMetaSlot : QMetaMethod
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
54 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
55 this(string signature_, int indexOfMethod_)
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
56 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
57 super(signature_, indexOfMethod_);
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
58 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
59 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
60
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
61 class MetaObject : MetaType
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
62 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
63 MetaObject _base;
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
64 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
65
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
66 struct QMetaObjectNative
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
67 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
68 QMetaObjectNative *superdata;
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
69 immutable(char) *stringdata;
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
70 const(uint) *data;
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
71 void *extradata;
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
72 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
73
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
74 final class QMetaObject
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
75 {
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
76 enum Call
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
77 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
78 InvokeMetaMethod,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
79 ReadProperty,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
80 WriteProperty,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
81 ResetProperty,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
82 QueryPropertyDesignable,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
83 QueryPropertyScriptable,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
84 QueryPropertyStored,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
85 QueryPropertyEditable,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
86 QueryPropertyUser,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
87 CreateInstance
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
88 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
89
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
90 private
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
91 {
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
92 QMetaObjectNative* _nativeId;
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
93 QMetaObject _base; // super class
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
94 QMetaObject _firstDerived; // head of the linked list of derived classes
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
95 QMetaObject _next; // next sibling on this derivation level
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
96 QMetaMethod[] _methods;
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
97 ClassInfo _classInfo;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
98
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
99 QObject function(void* nativeId) _createWrapper;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
100 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
101
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
102 private void addDerived(QMetaObject mo)
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
103 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
104 mo._next = _firstDerived;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
105 _firstDerived = mo;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
106 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
107
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
108 // NOTE: construction is split between this non-templated constructor and 'construct' function below.
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
109 this(QMetaObjectNative* nativeId, QMetaObject base)
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
110 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
111 _nativeId = nativeId;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
112 if (base)
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
113 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
114 base.addDerived(this);
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
115 _base = base;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
116 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
117 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
118
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
119 // TODO: remove when D acquires templated constructors
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
120 void construct(T : QObject, Concrete = T)()
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
121 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
122 _classInfo = T.classinfo;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
123
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
124 _createWrapper = function QObject(void* nativeId) {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
125 // COMPILER BUG: cast is should not be needed
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
126 auto obj = new Concrete(nativeId, cast(QtdObjectFlags)(QtdObjectFlags.nativeOwnership | QtdObjectFlags.dynamicEntity));
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
127 // TODO: Probably this should be a virtual call from T's constructor
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
128 T.__createEntity(nativeId, cast(void*)obj);
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
129 return obj;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
130 };
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
131 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
132
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
133 /++
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
134 +/
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
135 QMetaObject base()
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
136 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
137 return _base;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
138 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
139
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
140 /++
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
141 +/
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
142 QMetaObjectNative* nativeId()
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
143 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
144 return _nativeId;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
145 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
146
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
147 /++
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
148 +/
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
149 ClassInfo classInfo()
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
150 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
151 return _classInfo;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
152 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
153
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
154 const (QMetaMethod[]) methods()
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
155 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
156 return _methods;
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
157 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
158
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
159 void addMethod(QMetaMethod method_)
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
160 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
161 _methods ~= method_;
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
162 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
163
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
164 int lookUpMethod(string slot)
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
165 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
166 foreach (method; _methods)
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
167 if (method.signature == slot)
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
168 return method.indexOfMethod;
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
169 if (_base)
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
170 return _base.lookUpMethod(slot);
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
171 else
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
172 return -1;
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
173 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
174
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
175 int lookUpSignal(string signal)
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
176 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
177 // auto signalBegin = signal[0..$-1];
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
178 foreach (method; _methods)
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
179 if (method.signature == signal && cast(QMetaSignal)method)
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
180 return method.indexOfMethod;
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
181 if (_base)
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
182 return _base.lookUpSignal(signal);
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
183 else
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
184 return -1;
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
185 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
186
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
187 private QMetaObject lookupDerived(void*[] moIds)
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
188 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
189 assert (moIds.length >= 1);
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
190
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
191 for (auto mo = _firstDerived; mo !is null; mo = mo._next)
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
192 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
193 if (mo._nativeId == moIds[0])
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
194 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
195 if (moIds.length == 1) // exact match found
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
196 return mo;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
197 else // look deeper
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
198 return mo.lookupDerived(moIds[1..$]);
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
199 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
200 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
201
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
202 // no initialized wrapper that matches the native object.
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
203 // use the base class wrapper
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
204 return this;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
205 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
206
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
207 QObject getObject(void* nativeObjId)
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
208 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
209 QObject result;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
210
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
211 if (nativeObjId)
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
212 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
213 result = cast(QObject)qtd_get_d_qobject(nativeObjId);
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
214 if (!result)
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
215 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
216 auto moId = qtd_QObject_metaObject(nativeObjId);
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
217 if (_nativeId == moId)
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
218 result = _createWrapper(nativeObjId);
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
219 else
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
220 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
221 // get native metaobjects for the entire derivation lattice
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
222 // up to, but not including, the current metaobject.
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
223 size_t moCount = 1;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
224
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
225 for (void* tmp = moId;;)
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
226 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
227 tmp = qtd_QMetaObject_superClass(tmp);
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
228 assert(tmp);
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
229 if (tmp == _nativeId)
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
230 break;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
231 moCount++;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
232 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
233
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
234 void*[] moIds = (cast(void**)alloca(moCount * (void*).sizeof))[0..moCount];
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
235
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
236 moIds[--moCount] = moId;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
237 while (moCount > 0)
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
238 moIds[--moCount] = moId = qtd_QMetaObject_superClass(moId);
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
239
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
240 result = lookupDerived(moIds)._createWrapper(nativeObjId);
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
241 }
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
242 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
243 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
244
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
245 return result;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
246 }
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
247
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
248 static void activate(QObject sender, QMetaObject m, int local_signal_index, void **argv)
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
249 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
250 qtd_QMetaObject_activate_3(sender.__nativeId, m.nativeId, local_signal_index, argv);
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
251 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
252
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
253 static void activate(QObject sender, QMetaObject m, int from_local_signal_index, int to_local_signal_index, void **argv)
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
254 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
255 qtd_QMetaObject_activate_4(sender.__nativeId, m.nativeId, from_local_signal_index, to_local_signal_index, argv);
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
256 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
257
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
258 static bool connect(const QObject sender, int signal_index,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
259 const QObject receiver, int method_index,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
260 int type = 0, int *types = null)
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
261 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
262 return qtd_QMetaObject_connect(sender.__nativeId, signal_index, receiver.__nativeId, method_index, type, types);
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
263 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
264
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
265 int indexOfMethod_Cpp(string method)
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
266 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
267 return qtd_QMetaObject_indexOfMethod(_nativeId, toStringz(method));
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
268 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
269
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
270 int methodCount()
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
271 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
272 return qtd_QMetaObject_methodCount(_nativeId);
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
273 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
274
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
275 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
276
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
277 extern(C) void qtd_QMetaObject_activate_3(void* sender, void* m, int local_signal_index, void **argv);
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
278 extern(C) void qtd_QMetaObject_activate_4(void *sender, void* m, int from_local_signal_index, int to_local_signal_index, void **argv);
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
279 extern(C) bool qtd_QMetaObject_connect(const void* sender, int signal_index,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
280 const void* receiver, int method_index,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
281 int type, int *types);
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
282
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
283 extern(C) int qtd_QMetaObject_indexOfMethod(void *nativeId, const(char) *method);
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
284 extern(C) int qtd_QMetaObject_methodCount(void *nativeId);
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
285
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
286 extern(C) void* qtd_QMetaObject_superClass(void* nativeId);