dotherside/D/dsignal.d

49 lines
1022 B
D
Raw Normal View History

2014-08-30 18:46:34 +02:00
import dotherside;
import dobject;
import dothersideinterface;
import std.stdio;
import std.conv;
import std.string;
2014-07-19 18:26:08 +02:00
public class ISignal
{
}
public class DSignal(Args...) : ISignal
{
2014-08-30 18:46:34 +02:00
public this(DObject dObject, string name)
{
this.dObject = dObject;
this.name = name;
foreach(i, arg; Args)
_parameterMetaTypes[i] = GetMetaType!arg();
}
void opCall(Args args)
{
QVariant[] temp = new QVariant[args.length];
void*[] temp2 = new void*[args.length];
foreach(i, arg; args)
{
auto variant = new QVariant(arg);
temp[i] = variant;
temp2[i] = variant.rawData();
}
dos_qobject_signal_emit(this.dObject.data, this.name.toStringz(), cast(int)temp2.length, temp2.ptr);
}
public int[] GetParameterMetaTypes()
{
return _parameterMetaTypes;
}
private DObject dObject;
private string name;
private int[] _parameterMetaTypes = new int[Args.length];
2014-07-19 18:26:08 +02:00
};
2014-08-30 18:46:34 +02:00
public DSignal!(Args) CreateDSignal(Args...)(DObject dObject, string name)
2014-07-19 18:26:08 +02:00
{
2014-08-30 18:46:34 +02:00
return new DSignal!(Args)(dObject, name);
2014-07-19 18:26:08 +02:00
}