annotate qt/qtd/MetaMarshall.d @ 292:19498f420252 signals

more QList goodness
author eldar
date Tue, 10 Nov 2009 19:29:42 +0000
parents f9559a957be9
children 8627891e4556
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
288
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
1 module qt.qtd.MetaMarshall;
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
2
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
3 import std.traits;
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
4
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
5 template isQObjectType(T) // is a QObject type that belongs to the library
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
6 {
292
19498f420252 more QList goodness
eldar
parents: 288
diff changeset
7 enum isQObjectType = is(T.__isQObjectType);
288
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
8 }
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
9
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
10 template isObjectType(T) // is a QObject type that belongs to the library
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
11 {
292
19498f420252 more QList goodness
eldar
parents: 288
diff changeset
12 enum isObjectType = is(T.__isObjectType);
288
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
13 }
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
14
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
15 template isValueType(T) // is a QObject type that belongs to the library
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
16 {
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
17 enum isQObjectType = is(typeof(mixin("T." ~ "__isValueType")));
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
18 }
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
19
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
20 template isNativeType(T) // type that doesn't require conversion i.e. is the same in C++ and D
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
21 {
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
22 enum isNativeType = isNumeric!T || is(T == bool);
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
23 }
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
24
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
25 // converts an argumnent from C++ to D in qt_metacall
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
26 string metaCallArgument(T)(string ptr)
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
27 {
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
28 static if (isQObjectType!T)
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
29 return T.stringof ~ ".__getObject(*cast(void**)(" ~ ptr ~ "))";
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
30 else static if (isNativeType!T)
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
31 return "*(cast(" ~ T.stringof ~ "*)" ~ ptr ~ ")";
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
32 else
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
33 return "*(cast(" ~ T.stringof ~ "*)" ~ ptr ~ ")";
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
34 //res = T.stringof;
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
35 }
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
36
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
37 // converts a D argument type to C++ for registering in Qt meta system
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
38 string qtDeclArg(T)()
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
39 {
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
40 static if (isQObjectType!T)
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
41 return T.stringof ~ "*";
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
42 else static if (isNativeType!T)
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
43 return T.stringof;
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
44 else
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
45 return T.stringof;
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
46 }
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
47
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
48 // converts an argument from D to C++ in a signal emitter
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
49 string convertSignalArgument(T)(string arg)
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
50 {
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
51 static if (isQObjectType!T)
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
52 return arg ~ ".__nativeId";
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
53 else static if (isNativeType!T)
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
54 return arg;
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
55 else
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
56 return arg;
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
57 }