Mercurial > projects > qtd
annotate d2/qt/core/QMetaObject.d @ 364:a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
author | Max Samukha <maxter@maxter.com> |
---|---|
date | Fri, 11 Jun 2010 12:16:09 +0300 |
parents | 9784459f0750 |
children | 958e8b9a89bd |
rev | line source |
---|---|
253 | 1 module qt.core.QMetaObject; |
2 | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
3 import |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
4 qt.QGlobal, |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
5 qt.core.QObject, |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
6 qtd.QtdObject, |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
7 std.algorithm, |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
8 qtd.meta.Runtime, |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
9 qtd.meta.Compiletime, |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
10 qtd.Marshal, |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
11 qtd.MOC, |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
12 std.string, |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
13 std.typetuple, |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
14 std.c.stdlib; |
288 | 15 |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
16 class QMetaArgument : MetaBase |
288 | 17 { |
18 } | |
19 | |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
20 class QMetaMethod : MetaBase |
288 | 21 { |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
22 alias typeof(this) This; |
288 | 23 |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
24 // QMetaArgument[] arguments; |
288 | 25 string signature; |
26 int indexOfMethod; | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
27 |
288 | 28 this(string signature_, int indexOfMethod_) |
29 { | |
30 signature = signature_; | |
31 indexOfMethod = indexOfMethod_; | |
32 } | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
33 |
322
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
34 string args() const |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
35 { |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
36 int openBracket = indexOf(signature, '('); |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
37 if(signature.length - openBracket - 2 > 0) |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
38 return signature[openBracket + 1 .. $-1]; |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
39 else |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
40 return ""; |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
41 } |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
42 |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
322
diff
changeset
|
43 string name() const |
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
322
diff
changeset
|
44 { |
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
322
diff
changeset
|
45 int openBracket = indexOf(signature, '('); |
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
322
diff
changeset
|
46 return signature[0..openBracket]; |
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
322
diff
changeset
|
47 } |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
48 |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
49 // mixin(Derived) or typeof(Derived) would help a lot here |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
50 static create(alias method, M : This)(uint index) |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
51 { |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
52 alias ParameterTypeTuple!method Args; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
53 return new M(.signature!(Args)(methodName!(method)), index); |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
54 } |
288 | 55 } |
56 | |
57 class QMetaSignal : QMetaMethod | |
58 { | |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
59 alias typeof(this) This; |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
60 |
288 | 61 this(string signature_, int indexOfMethod_) |
62 { | |
63 super(signature_, indexOfMethod_); | |
64 } | |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
65 |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
66 static This create(alias method)(uint index) |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
67 { |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
68 return typeof(super).create!(method, This)(index); |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
69 } |
288 | 70 } |
71 | |
72 class QMetaSlot : QMetaMethod | |
73 { | |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
74 alias typeof(this) This; |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
75 |
288 | 76 this(string signature_, int indexOfMethod_) |
77 { | |
78 super(signature_, indexOfMethod_); | |
79 } | |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
80 |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
81 static This create(alias method)(uint index) |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
82 { |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
83 return typeof(super).create!(method, This)(index); |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
84 } |
288 | 85 } |
86 | |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
87 /** |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
88 Base class for QtD meta-classes. |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
89 */ |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
90 abstract class QtdMetaClass : MetaClass |
288 | 91 { |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
92 private: |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
93 void* nativeId_; |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
94 |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
95 this() {} |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
96 |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
97 public: |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
98 |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
99 /** |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
100 */ |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
101 @property |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
102 void* nativeId() |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
103 { |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
104 return nativeId_; |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
105 } |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
106 |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
107 /* internal */ void construct(T)() |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
108 { |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
109 super.construct!T(); |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
110 nativeId_ = T.qtd_nativeMetaObject; |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
111 } |
288 | 112 } |
113 | |
114 struct QMetaObjectNative | |
115 { | |
116 QMetaObjectNative *superdata; | |
117 immutable(char) *stringdata; | |
118 const(uint) *data; | |
119 void *extradata; | |
120 } | |
121 | |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
322
diff
changeset
|
122 class QMetaException : Exception { this(string msg) { super(msg); } } |
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
322
diff
changeset
|
123 |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
124 final class QMetaObject : QtdMetaClass |
253 | 125 { |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
126 alias typeof(this) This; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
127 |
288 | 128 enum Call |
129 { | |
130 InvokeMetaMethod, | |
131 ReadProperty, | |
132 WriteProperty, | |
133 ResetProperty, | |
134 QueryPropertyDesignable, | |
135 QueryPropertyScriptable, | |
136 QueryPropertyStored, | |
137 QueryPropertyEditable, | |
138 QueryPropertyUser, | |
139 CreateInstance | |
140 } | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
141 |
253 | 142 private |
143 { | |
288 | 144 QMetaMethod[] _methods; |
253 | 145 QObject function(void* nativeId) _createWrapper; |
146 } | |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
147 |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
148 void construct(T : QObject)() |
253 | 149 { |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
150 super.construct!T(); |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
151 |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
152 static if (isQtType!T) |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
153 { |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
154 static if (is(T.ConcreteType)) |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
155 alias T.ConcreteType Concrete; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
156 else |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
157 alias T Concrete; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
158 |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
159 _createWrapper = function QObject(void* nativeId) { |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
160 auto obj = new Concrete(nativeId, cast(QtdObjectFlags)(QtdObjectFlags.nativeOwnership | QtdObjectFlags.dynamicEntity)); |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
161 T.__createEntity(nativeId, cast(void*)obj); |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
162 return obj; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
163 }; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
164 |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
165 T._populateMetaInfo; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
166 } |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
167 |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
168 // create run time meta-objects for user-defined signals and slots |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
169 else static if (is(typeof(T.methods))) |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
170 { |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
171 alias BaseClassesTuple!(T)[0] Base; |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
172 int index = Base.staticMetaObject().methodCount(); |
253 | 173 |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
174 static if (T.signals.length) |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
175 { |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
176 foreach (signal; T.signals) |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
177 { |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
178 addMethod(QMetaSignal.create!signal(index)); |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
179 index++; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
180 } |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
181 } |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
182 |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
183 static if (T.slots.length) |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
184 { |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
185 foreach (slot; T.slots) |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
186 { |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
187 addMethod(QMetaSlot.create!slot(index)); |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
188 index++; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
189 } |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
190 } |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
191 } |
253 | 192 } |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
193 |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
194 /* internal */ alias createImpl!This create; |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
195 |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
196 /** |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
197 */ |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
198 @property |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
199 override This base() |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
200 { |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
201 return super.base; |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
202 } |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
203 |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
204 /** |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
205 */ |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
206 @property |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
207 override This firstDerived() |
253 | 208 { |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
209 return super.firstDerived; |
253 | 210 } |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
211 |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
212 /** |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
213 */ |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
214 @property |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
215 override This next() |
253 | 216 { |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
217 return super.next; |
253 | 218 } |
219 | |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
220 /** |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
221 */ |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
222 @property |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
223 override QMetaObjectNative* nativeId() |
253 | 224 { |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
225 return cast(QMetaObjectNative*)super.nativeId; |
253 | 226 } |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
227 |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
228 @property |
288 | 229 const (QMetaMethod[]) methods() |
230 { | |
231 return _methods; | |
232 } | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
233 |
288 | 234 void addMethod(QMetaMethod method_) |
235 { | |
236 _methods ~= method_; | |
237 } | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
238 |
322
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
239 QMetaMethod lookUpMethod(string slot) |
288 | 240 { |
241 foreach (method; _methods) | |
242 if (method.signature == slot) | |
322
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
243 return method; |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
244 if (base) |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
245 return base.lookUpMethod(slot); |
288 | 246 else |
322
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
247 return null; |
288 | 248 } |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
249 |
322
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
250 QMetaSignal lookUpSignal(string signal) |
288 | 251 { |
252 foreach (method; _methods) | |
253 if (method.signature == signal && cast(QMetaSignal)method) | |
322
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
254 return cast(QMetaSignal)method; |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
255 if (base) |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
256 return base.lookUpSignal(signal); |
288 | 257 else |
322
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
258 return null; |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
259 } |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
260 |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
261 QMetaMethod[] lookUpMethodOverloads(string methodName) |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
262 { |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
263 typeof(return) result; |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
264 foreach (method; _methods) |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
322
diff
changeset
|
265 if (method.name == methodName) |
322
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
266 result ~= method; |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
267 if (base) |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
268 result ~= base.lookUpMethodOverloads(methodName); |
322
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
269 return result; |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
270 } |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
271 |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
272 QMetaSignal[] lookUpSignalOverloads(string signalName) |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
273 { |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
274 typeof(return) result; |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
275 foreach (method; _methods) |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
322
diff
changeset
|
276 if (method.name == signalName && cast(QMetaSignal)method) |
322
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
277 result ~= cast(QMetaSignal)method; |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
278 if (base) |
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
279 result ~= base.lookUpSignalOverloads(signalName); |
322
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
280 return result; |
288 | 281 } |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
282 |
253 | 283 private QMetaObject lookupDerived(void*[] moIds) |
284 { | |
285 assert (moIds.length >= 1); | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
286 |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
287 for (auto mo = firstDerived; mo !is null; mo = mo.next) |
253 | 288 { |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
289 if (mo.nativeId == moIds[0]) |
253 | 290 { |
291 if (moIds.length == 1) // exact match found | |
292 return mo; | |
293 else // look deeper | |
294 return mo.lookupDerived(moIds[1..$]); | |
295 } | |
296 } | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
297 |
253 | 298 // no initialized wrapper that matches the native object. |
299 // use the base class wrapper | |
300 return this; | |
301 } | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
302 |
253 | 303 QObject getObject(void* nativeObjId) |
304 { | |
305 QObject result; | |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
306 |
253 | 307 if (nativeObjId) |
308 { | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
309 result = cast(QObject)qtd_get_d_qobject(nativeObjId); |
253 | 310 if (!result) |
311 { | |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
312 auto nId = nativeId; |
253 | 313 auto moId = qtd_QObject_metaObject(nativeObjId); |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
314 if (nId == moId) |
253 | 315 result = _createWrapper(nativeObjId); |
316 else | |
317 { | |
318 // get native metaobjects for the entire derivation lattice | |
319 // up to, but not including, the current metaobject. | |
320 size_t moCount = 1; | |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
321 |
253 | 322 for (void* tmp = moId;;) |
323 { | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
324 tmp = qtd_QMetaObject_superClass(tmp); |
253 | 325 assert(tmp); |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
326 if (tmp == nId) |
253 | 327 break; |
328 moCount++; | |
329 } | |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
330 |
253 | 331 void*[] moIds = (cast(void**)alloca(moCount * (void*).sizeof))[0..moCount]; |
332 | |
333 moIds[--moCount] = moId; | |
334 while (moCount > 0) | |
335 moIds[--moCount] = moId = qtd_QMetaObject_superClass(moId); | |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
336 |
253 | 337 result = lookupDerived(moIds)._createWrapper(nativeObjId); |
288 | 338 } |
253 | 339 } |
340 } | |
341 | |
342 return result; | |
343 } | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
344 |
288 | 345 static void activate(QObject sender, QMetaObject m, int local_signal_index, void **argv) |
346 { | |
347 qtd_QMetaObject_activate_3(sender.__nativeId, m.nativeId, local_signal_index, argv); | |
348 } | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
349 |
288 | 350 static void activate(QObject sender, QMetaObject m, int from_local_signal_index, int to_local_signal_index, void **argv) |
351 { | |
352 qtd_QMetaObject_activate_4(sender.__nativeId, m.nativeId, from_local_signal_index, to_local_signal_index, argv); | |
353 } | |
354 | |
355 static bool connect(const QObject sender, int signal_index, | |
356 const QObject receiver, int method_index, | |
357 int type = 0, int *types = null) | |
358 { | |
359 return qtd_QMetaObject_connect(sender.__nativeId, signal_index, receiver.__nativeId, method_index, type, types); | |
360 } | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
361 |
288 | 362 int indexOfMethod_Cpp(string method) |
363 { | |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
364 return qtd_QMetaObject_indexOfMethod(nativeId, toStringz(method)); |
288 | 365 } |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
366 |
288 | 367 int methodCount() |
368 { | |
364
a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
369 return qtd_QMetaObject_methodCount(nativeId); |
288 | 370 } |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
371 |
337 | 372 static void connectImpl(QObject sender, string signalString, QObject receiver, string methodString, int type) |
322
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
373 { |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
374 QMetaSignal[] signals; |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
375 QMetaMethod[] methods; |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
376 QMetaSignal signal; |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
377 QMetaMethod method; |
288 | 378 |
322
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
379 if(indexOf(signalString, '(') > 0) |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
380 signal = sender.metaObject.lookUpSignal(signalString); |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
381 else |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
382 signals = sender.metaObject.lookUpSignalOverloads(signalString); // parameters not specified. Looking for a match |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
383 |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
384 if(indexOf(methodString, '(') > 0) |
322
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
385 method = receiver.metaObject.lookUpMethod(methodString); |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
386 else |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
387 methods = receiver.metaObject.lookUpMethodOverloads(methodString); // parameters not specified. Looking for a match |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
388 |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
389 if(!signal && !method) |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
390 { |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
322
diff
changeset
|
391 Top: |
322
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
392 foreach(sig; signals) |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
393 foreach(meth; methods) |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
394 if(startsWith(sig.args, meth.args)) |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
395 { |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
396 signal = sig; |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
397 method = meth; |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
322
diff
changeset
|
398 break Top; |
322
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
399 } |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
400 } |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
401 else if (!signal) |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
402 { |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
403 foreach(sig; signals) |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
404 if(startsWith(sig.args, method.args)) |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
405 { |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
406 signal = sig; |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
407 break; |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
408 } |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
409 } |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
410 else if (!method) |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
411 { |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
412 foreach(meth; methods) |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
413 if(startsWith(signal.args, meth.args)) |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
414 { |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
415 method = meth; |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
416 break; |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
417 } |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
418 } |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
419 |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
322
diff
changeset
|
420 bool success = false; |
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
322
diff
changeset
|
421 |
322
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
422 if(!signal && !method) |
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
423 { |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
322
diff
changeset
|
424 success = false; |
322
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
425 } |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
322
diff
changeset
|
426 else |
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
322
diff
changeset
|
427 { |
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
322
diff
changeset
|
428 int signalIndex = signal.indexOfMethod; |
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
322
diff
changeset
|
429 int methodIndex = method.indexOfMethod; |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
430 |
337 | 431 success = QMetaObject.connect(sender, signalIndex, receiver, methodIndex, type); |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
322
diff
changeset
|
432 } |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
433 |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
322
diff
changeset
|
434 if(!success) |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
435 throw new QMetaException("QMetaObject: Signal " ~ signalString ~ " cannot be connected to slot " ~ methodString); |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
436 } |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
437 } |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
438 |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
439 /** |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
440 */ |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
441 mixin template Q_CLASSINFO(string name, string value) |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
442 { |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
443 mixin InnerAttribute!("Q_CLASSINFO", AttributeOptions.allowMultiple, name, value); |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
444 } |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
445 |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
446 version (QtdUnittest) |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
447 { |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
448 unittest |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
449 { |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
450 static class Test : QObject |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
451 { |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
452 mixin Q_CLASSINFO!("author", "Sabrina Schweinsteiger"); |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
453 mixin Q_CLASSINFO!("url", "http://doc.moosesoft.co.uk/1.0/"); |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
454 |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
455 mixin Q_OBJECT; |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
350
diff
changeset
|
456 } |
322
7c2cf27391c4
A slight change of the connect syntax. More sofisticated signals/slots lookup. Some fixes in examples.
eldar_ins@eldar-laptop
parents:
288
diff
changeset
|
457 } |
253 | 458 } |
459 | |
288 | 460 extern(C) void qtd_QMetaObject_activate_3(void* sender, void* m, int local_signal_index, void **argv); |
461 extern(C) void qtd_QMetaObject_activate_4(void *sender, void* m, int from_local_signal_index, int to_local_signal_index, void **argv); | |
462 extern(C) bool qtd_QMetaObject_connect(const void* sender, int signal_index, | |
463 const void* receiver, int method_index, | |
464 int type, int *types); | |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
465 |
288 | 466 extern(C) int qtd_QMetaObject_indexOfMethod(void *nativeId, const(char) *method); |
467 extern(C) int qtd_QMetaObject_methodCount(void *nativeId); | |
468 | |
337 | 469 extern(C) void* qtd_QMetaObject_superClass(void* nativeId); |