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