annotate d2/qt/core/QMetaObject.d @ 368:185df9220ea7

Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
author Max Samukha <maxter@maxter.com>
date Mon, 28 Jun 2010 21:29:32 +0300
parents f69341b40588
children 6e1857c521af
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
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 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
8 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
9 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
10 qtd.MOC,
366
da4235301224 Fixed VoidFunc. Updated to dmd.2.047.
Max Samukha <maxter@spambox.com>
parents: 365
diff changeset
11 qtd.String,
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
12 std.typetuple,
367
f69341b40588 Removed dependencies on qtd.Traits
Max Samukha <maxter@spambox.com>
parents: 366
diff changeset
13 std.traits,
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
14 std.c.stdlib;
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
15
366
da4235301224 Fixed VoidFunc. Updated to dmd.2.047.
Max Samukha <maxter@spambox.com>
parents: 365
diff changeset
16 import std.string : indexOf;
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
17 import std.algorithm : filter;
366
da4235301224 Fixed VoidFunc. Updated to dmd.2.047.
Max Samukha <maxter@spambox.com>
parents: 365
diff changeset
18
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
19 //TODO: remove
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
20 import std.stdio;
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
21
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
22 class QMetaArgument : MetaBase
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
23 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
24 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
25
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
26 class QMetaMethod : MetaBase
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
27 {
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
28 alias typeof(this) This;
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
29
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
30 // QMetaArgument[] arguments;
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
31 string signature;
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
32 int index;
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
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
34 this(string signature, int index)
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
35 {
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
36 this.signature = signature;
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
37 this.index = index;
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
38
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
39 int openBracket = indexOf(signature, '(');
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
40 name = signature[0..openBracket];
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
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
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
43 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
44 {
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
45 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
46 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
47 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
48 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
49 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
50 }
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
51
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
52 static M create(alias method, M : This)(uint index)
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
53 {
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
54 alias ParameterTypeTuple!method Args;
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
55 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
56 }
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
57 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
58
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
59 /**
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
60 */
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
61 class QMetaSignal : QMetaMethod
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
62 {
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
63 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
64
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
65 this(string signature, int indexOfMethod)
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
66 {
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
67 super(signature, indexOfMethod);
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
68 }
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
69
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
70 static This create(alias method)(uint index)
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
71 {
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
72 return typeof(super).create!(method, This)(index);
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
73 }
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
74 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
75
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
76 class QMetaSlot : QMetaMethod
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
77 {
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
78 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
79
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
80 this(string signature, int indexOfMethod)
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
81 {
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
82 super(signature, indexOfMethod);
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
83 }
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
84
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
85 static This create(alias method)(uint index)
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
86 {
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
87 return typeof(super).create!(method, This)(index);
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
88 }
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
89 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
90
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
91 /**
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
92 Base class for QtD meta-classes.
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
93 */
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
94 abstract class QtdMetaClass : MetaClass
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
95 {
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
96 private:
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
97 void* nativeId_;
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
98
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
99 public:
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
100
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
101 this() {}
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
102
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
103 /**
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
104 */
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
105 @property
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
106 void* nativeId()
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
107 {
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
108 return nativeId_;
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
109 }
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
110
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
111 void construct(T)()
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
112 {
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
113 super.construct!T();
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
114 nativeId_ = T.qtd_nativeStaticMetaObject();
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
115 }
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
116 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
117
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
118 struct QMetaObjectNative
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
119 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
120 QMetaObjectNative *superdata;
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
121 immutable(char) *stringdata;
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
122 const(uint) *data;
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
123 void *extradata;
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
124 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
125
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 322
diff changeset
126
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
127 /**
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
128 */
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
129 final class QMetaObject : QtdMetaClass
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
130 {
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
131 alias typeof(this) This;
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
132
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
133 private QObject function(void* nativeId) _createWrapper;
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
134
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
135 this() {}
365
958e8b9a89bd Changeset a084e2df3776 is broken. Backing out.
Max Samukha <maxter@spambox.com>
parents: 364
diff changeset
136
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
137 enum Call
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
138 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
139 InvokeMetaMethod,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
140 ReadProperty,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
141 WriteProperty,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
142 ResetProperty,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
143 QueryPropertyDesignable,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
144 QueryPropertyScriptable,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
145 QueryPropertyStored,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
146 QueryPropertyEditable,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
147 QueryPropertyUser,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
148 CreateInstance
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
149 }
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
150
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
151 alias createImpl!This create;
365
958e8b9a89bd Changeset a084e2df3776 is broken. Backing out.
Max Samukha <maxter@spambox.com>
parents: 364
diff changeset
152
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
153 void construct(T : QObject)()
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
154 {
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
155 super.construct!T();
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
156
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
157 static if (isQtType!T)
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 static if (is(T.ConcreteType))
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
160 alias T.ConcreteType Concrete;
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
161 else
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
162 alias T Concrete;
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 _createWrapper = function QObject(void* nativeId) {
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
165 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
166 T.__createEntity(nativeId, cast(void*)obj);
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
167 return obj;
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
168 };
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
169
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
170 T._populateMetaInfo(this);
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
171 }
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
172 // 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
173 else static if (is(typeof(T.methods)))
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
174 {
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
175 alias BaseClassesTuple!(T)[0] Base;
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
176 int index = meta!(Base).methodCount;
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
177
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
178 static if (T.signals.length)
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
179 {
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
180 foreach (signal; T.signals)
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 addMethod(QMetaSignal.create!signal(index));
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
183 index++;
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 }
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 static if (T.slots.length)
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
188 {
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
189 foreach (slot; T.slots)
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 addMethod(QMetaSlot.create!slot(index));
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
192 index++;
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
193 }
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
194 }
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
195 }
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
196 }
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
197
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
198 /**
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
199 */
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
200 @property
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
201 override This next()
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
202 {
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
203 return static_cast!This(super.next);
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
204 }
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
205
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
206 /**
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
207 */
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
208 @property
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
209 override This firstDerived()
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
210 {
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
211 return static_cast!This(super.firstDerived);
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
212 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
213
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
214 void addMethod(QMetaMethod method)
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
215 {
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
216 members_ ~= method;
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
217 }
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
218
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
219 /**
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
220 */
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
221 @property
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
222 override This base()
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
223 {
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
224 return super.base;
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
225 }
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
226
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
227 /**
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
228 */
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
229 @property
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
230 QMetaObjectNative* nativeId()
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
231 {
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
232 return cast(QMetaObjectNative*)super.nativeId;
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
233 }
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
234
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
235 M lookUpMethod(M : QMetaMethod = QMetaMethod)(string signature)
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
236 {
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
237 foreach (method; allMembers)
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
238 {
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
239 if (auto m = cast(M)method)
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
240 {
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
241 if (m.signature == signature)
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
242 return m;
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
243 }
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
244 }
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
245 return null;
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
246 }
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
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
248 // TODO: probably make this return a filtering range.
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
249 auto lookUpMethodOverloads(M : QMetaMethod = QMetaMethod)(string name)
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 {
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
251 M[] methods;
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
252 foreach (m; allMembers)
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
253 {
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
254 if (auto method = cast(M)m)
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
255 {
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
256 if (method.name == name)
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
257 methods ~= method;
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
258 }
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
259 }
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
260 return methods;
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
261 }
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
262
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
263 private QMetaObject lookUpDerived(void*[] moIds)
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
264 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
265 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
266
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
267 for (auto mo = firstDerived; mo !is null; mo = mo.next)
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
268 {
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
269 if (mo.nativeId == moIds[0])
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
270 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
271 if (moIds.length == 1) // exact match found
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
272 return mo;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
273 else // look deeper
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
274 return mo.lookUpDerived(moIds[1..$]);
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
275 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
276 }
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
277
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
278 // no initialized wrapper that matches the native object.
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
279 // use the base class wrapper
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
280 return this;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
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
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
283 QObject getObject(void* nativeObjId)
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
284 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
285 QObject result;
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
286
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
287 if (nativeObjId)
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
288 {
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
289 result = cast(QObject)qtd_get_d_qobject(nativeObjId);
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
290 if (!result)
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
291 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
292 auto moId = qtd_QObject_metaObject(nativeObjId);
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
293 auto nId = nativeId;
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
294 if (nId == moId)
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
295 result = _createWrapper(nativeObjId);
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
296 else
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
297 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
298 // get native metaobjects for the entire derivation lattice
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
299 // up to, but not including, the current metaobject.
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
300 size_t moCount = 1;
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
301
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
302 for (void* tmp = moId;;)
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
303 {
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
304 tmp = qtd_QMetaObject_superClass(tmp);
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
305 assert(tmp);
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
306 if (tmp == nId)
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
307 break;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
308 moCount++;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
309 }
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
310
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
311 void*[] moIds = (cast(void**)alloca(moCount * (void*).sizeof))[0..moCount];
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
312
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
313 moIds[--moCount] = moId;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
314 while (moCount > 0)
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
315 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
316
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
317 result = lookUpDerived(moIds)._createWrapper(nativeObjId);
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
318 }
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
319 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
320 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
321
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
322 return result;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
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
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
325 static void activate(QObject sender, QMetaObject m, int local_signal_index, void **argv)
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
326 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
327 qtd_QMetaObject_activate_3(sender.__nativeId, m.nativeId, local_signal_index, argv);
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
328 }
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
329
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
330 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
331 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
332 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
333 }
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
334
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
335 static bool connect(const QObject sender, int signal_index,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
336 const QObject receiver, int method_index,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
337 int type = 0, int *types = null)
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
338 {
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
339 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
340 }
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
341
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
342 int indexOfMethod_Cpp(string method)
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
343 {
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
344 return qtd_QMetaObject_indexOfMethod(nativeId, toStringz(method));
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
345 }
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
346
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
347 int methodCount()
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
348 {
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
349 return qtd_QMetaObject_methodCount(nativeId);
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
350 }
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
351
337
5896535a03cd moved enums back to classes
maxter <spambox@d-coding.com>
parents: 336
diff changeset
352 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
353 {
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
354 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
355 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
356 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
357 QMetaMethod method;
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
358
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
359 if(indexOf(signalString, '(') > 0)
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
360 signal = sender.metaObject.lookUpMethod!QMetaSignal(signalString);
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
361 else
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
362 signals = sender.metaObject.lookUpMethodOverloads!QMetaSignal(signalString); // parameters not specified. Looking for a match
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
363
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
364 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
365 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
366 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
367 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
368
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
369 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
370 {
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 322
diff changeset
371 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
372 foreach(sig; signals)
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
373 {
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
374 foreach(meth; methods)
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
375 {
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
376 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
377 {
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
378 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
379 method = meth;
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 322
diff changeset
380 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
381 }
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
382 }
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
383 }
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
384 }
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 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
386 {
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 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
388 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
389 {
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 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
391 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
392 }
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 }
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 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
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 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
397 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
398 {
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 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
400 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
401 }
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
402 }
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
403
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 322
diff changeset
404 bool success = false;
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 322
diff changeset
405
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
406 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
407 {
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 322
diff changeset
408 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
409 }
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 322
diff changeset
410 else
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 322
diff changeset
411 {
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
412 int signalIndex = signal.index;
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
413 int methodIndex = method.index;
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
414
337
5896535a03cd moved enums back to classes
maxter <spambox@d-coding.com>
parents: 336
diff changeset
415 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
416 }
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
417
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 322
diff changeset
418 if(!success)
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
419 {
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
420 throw new MetaException("QMetaObject: Failed to connect signal "
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
421 ~ sender.classinfo.name ~ "." ~ signalString ~ " to slot "
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
422 ~ receiver.classinfo.name ~ "." ~ methodString ~ ". Make sure the signal and slot exist and match.");
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
423 }
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
424 }
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
425 }
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
426
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
427 /**
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
428 */
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
429 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
430 {
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
431 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
432 }
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
433
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
434 /**
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
435 */
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
436 mixin template Q_PROPERTY(T, string params)
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
437 {
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
438 static assert(false, "not implemented");
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
439 }
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
440
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
441 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
442 {
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
443 // COMPILER BUG: cannot put this inside the unittest block as static class.
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
444 class QMetaObject_A : QObject
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
445 {
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
446 mixin Q_CLASSINFO!("author", "Sabrina Schweinsteiger");
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
447 mixin Q_CLASSINFO!("url", "http://doc.moosesoft.co.uk/1.0/");
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
448
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
449 static int slot1Called;
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
450
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
451 final
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
452 {
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
453 void signal_signal1();
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
454 void signal_signal2(int);
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
455 }
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
456
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
457
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
458 void slot_slot1()
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
459 {
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
460 slot1Called++;
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
461 }
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
462
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
463 mixin Q_OBJECT;
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
464 }
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
465
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
466 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
467 {
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
468 scope a = new QMetaObject_A;
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
469 QObject.connect(a, "signal1", a, "slot1");
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
470 a.signal1();
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
471 assert(QMetaObject_A.slot1Called == 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
472
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
473 QObject.connect(a, "signal2", a, "slot1");
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
474 a.signal2(42);
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
475 assert(QMetaObject_A.slot1Called == 2);
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
476 }
368
185df9220ea7 Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents: 367
diff changeset
477 }
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
478
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
479 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
480 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
481 extern(C) bool qtd_QMetaObject_connect(const void* sender, int signal_index,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
482 const void* receiver, int method_index,
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
483 int type, int *types);
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
484
288
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
485 extern(C) int qtd_QMetaObject_indexOfMethod(void *nativeId, const(char) *method);
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
486 extern(C) int qtd_QMetaObject_methodCount(void *nativeId);
f9559a957be9 new signals and slots implementation
eldar
parents: 253
diff changeset
487
337
5896535a03cd moved enums back to classes
maxter <spambox@d-coding.com>
parents: 336
diff changeset
488 extern(C) void* qtd_QMetaObject_superClass(void* nativeId);