view qt/QObjectDefs.d @ 282:256ab6cb8e85

Signals look-up andNew syntax for connect. The old one will not work from now on. This will allow for the signals overload. Although changes are done for both D1 and D2 versions, D1 won't work because of compiler bugs. I am tired of waiting for fixes.
author eldar
date Fri, 16 Oct 2009 02:43:59 +0000
parents e78566595089
children
line wrap: on
line source

module qt.QObjectDefs;

//import qt.core.QGlobal;
//import qt.core.Qt;
import QGlobal;

const byte Q_MOC_OUTPUT_REVISION = 59;

template QT_TR_FUNCTIONS_NOUTF8()
{
	static QString tr(char[] s, char[] c = null)
	{ return staticMetaObject.tr(s, c); }
	static QString tr(char[] s, char[] c, int n)
	{ return staticMetaObject.tr(s, c, n); }
}

template QT_TR_FUNCTIONS_UTF8()
{
	static QString trUtf8(char[] s, char[] c = null)
	{ return staticMetaObject.trUtf8(s, c); }
	static QString trUtf8(char[] s, char[] c, int n)
	{ return staticMetaObject.trUtf8(s, c, n); }
}

template QT_TR_FUNCTIONS()
{
	mixin QT_TR_FUNCTIONS_NOUTF8;
	mixin QT_TR_FUNCTIONS_UTF8;
}

template Q_OBJECT_CHECK()
{
	void qt_check_for_QOBJECT_macro(T)(T _q_argument) const
	{ int i = qYouForgotTheQ_OBJECT_Macro(this, _q_argument); i = i; }
}

int qYouForgotTheQ_OBJECT_Macro(T)(T, T) { return 0; }

void qYouForgotTheQ_OBJECT_Macro(T1,T2)(T1, T2) {}

template Q_OBJECT()
{
	public mixin Q_OBJECT_CHECK;
	public static const QMetaObject staticMetaObject;
	public const QMetaObject *metaObject() const{}
	public void *qt_metacast(const char *){}
	public mixin QT_TR_FUNCTIONS;
	public int qt_metacall(QMetaObject.Call, int, void **){}
}

template Q_OBJECT_FAKE()
{
	mixin Q_OBJECT;
}

template Q_GADGET()
{
    public static const QMetaObject staticMetaObject;
}

char[] METHOD( char[] a ) { return "0"~a; }
char[] SLOT( char[] a ) { return "1"~a; }
char[] SIGNAL( char[] a ) { return "2"~a; }

version(QT3_SUPPORT) {
	const byte METHOD_CODE = 0;                        // member type codes
	const byte SLOT_CODE = 1;
	const byte SIGNAL_CODE = 2;
}

const byte QMETHOD_CODE = 0;                        // member type codes
const byte QSLOT_CODE = 1;
const byte QSIGNAL_CODE = 2;

QArgument!(T) Q_ARG(T)(char [] type, T data)
	{ return QArgument!(T)(type, data); }

QReturnArgument!(T) Q_RETURN_ARG(T)(char [] type, T data)
	{ return QReturnArgument!(T)(type, data); }

class QGenericArgument
{
public:
    this(char[] aName = null, const void *aData = null)
        { _data = aData; _name = aName; }
    void *data() const { return cast(void *)(_data); }
    char[] name() { return _name; }

private:
    const void *_data;
    char[] _name;
};

class QGenericReturnArgument : QGenericArgument
{
};

class QArgument(T) : QGenericArgument
{
public:
    this(char[] aName, T aData)
    { this(aName, cast(void *)aData); }
};

class QReturnArgument(T) : QGenericReturnArgument
{
public:
    this(char[] aName, T aData)
    { this(aName, cast(void *)aData); }
};

//TODO(katrina) enable this when all the classes it uses are available
/*struct QMetaObject
{
    char[] className() const;
    const QMetaObject *superClass() const;

    //TODO(katrina) enable QObject cast(QObject obj) const;

    // ### Qt 4: Merge overloads
    QString tr(const char *s, const char *c) const;
    QString trUtf8(const char *s, const char *c) const;
    QString tr(const char *s, const char *c, int n) const;
    QString trUtf8(const char *s, const char *c, int n) const;

    int methodOffset() const;
    int enumeratorOffset() const;
    int propertyOffset() const;
    int classInfoOffset() const;

    int methodCount() const;
    int enumeratorCount() const;
    int propertyCount() const;
    int classInfoCount() const;

    int indexOfMethod(const char *method) const;
    int indexOfSignal(const char *signal) const;
    int indexOfSlot(const char *slot) const;
    int indexOfEnumerator(const char *name) const;
    int indexOfProperty(const char *name) const;
    int indexOfClassInfo(const char *name) const;

    QMetaMethod method(int index) const;
    QMetaEnum enumerator(int index) const;
    QMetaProperty property(int index) const;
    QMetaClassInfo classInfo(int index) const;
    QMetaProperty userProperty() const;

    static bool checkConnectArgs(const char *signal, const char *method);
    static QByteArray normalizedSignature(const char *method);
    static QByteArray normalizedType(const char *type);

    // internal index-based connect
    static bool connect(const QObject *sender, int signal_index,
                        const QObject *receiver, int method_index,
                        int type = 0, int *types = 0);
    // internal index-based disconnect
    static bool disconnect(const QObject *sender, int signal_index,
                           const QObject *receiver, int method_index);
    // internal slot-name based connect
    static void connectSlotsByName(QObject *o);

    // internal index-based signal activation
    static void activate(QObject *sender, int signal_index, void **argv);
    static void activate(QObject *sender, int from_signal_index, int to_signal_index, void **argv);
    static void activate(QObject *sender, const QMetaObject *, int local_signal_index, void **argv);
    static void activate(QObject *sender, const QMetaObject *, int from_local_signal_index, int to_local_signal_index, void **argv);
    // internal guarded pointers
    static void addGuard(QObject **ptr);
    static void removeGuard(QObject **ptr);
    static void changeGuard(QObject **ptr, QObject *o);

    static bool invokeMethod(QObject *obj, const char *member,
                             qt.core.Qt.ConnectionType,
                             QGenericReturnArgument ret,
                             QGenericArgument val0 = QGenericArgument(0),
                             QGenericArgument val1 = QGenericArgument(),
                             QGenericArgument val2 = QGenericArgument(),
                             QGenericArgument val3 = QGenericArgument(),
                             QGenericArgument val4 = QGenericArgument(),
                             QGenericArgument val5 = QGenericArgument(),
                             QGenericArgument val6 = QGenericArgument(),
                             QGenericArgument val7 = QGenericArgument(),
                             QGenericArgument val8 = QGenericArgument(),
                             QGenericArgument val9 = QGenericArgument());

    static bool invokeMethod(QObject *obj, const char *member,
                             QGenericReturnArgument ret,
                             QGenericArgument val0 = QGenericArgument(0),
                             QGenericArgument val1 = QGenericArgument(),
                             QGenericArgument val2 = QGenericArgument(),
                             QGenericArgument val3 = QGenericArgument(),
                             QGenericArgument val4 = QGenericArgument(),
                             QGenericArgument val5 = QGenericArgument(),
                             QGenericArgument val6 = QGenericArgument(),
                             QGenericArgument val7 = QGenericArgument(),
                             QGenericArgument val8 = QGenericArgument(),
                             QGenericArgument val9 = QGenericArgument())
    {
        return invokeMethod(obj, member, qt.core.Qt.AutoConnection, ret, val0, val1, val2, val3,
                val4, val5, val6, val7, val8, val9);
    }

    static bool invokeMethod(QObject *obj, const char *member,
                             qt.core.Qt.ConnectionType type,
                             QGenericArgument val0 = QGenericArgument(0),
                             QGenericArgument val1 = QGenericArgument(),
                             QGenericArgument val2 = QGenericArgument(),
                             QGenericArgument val3 = QGenericArgument(),
                             QGenericArgument val4 = QGenericArgument(),
                             QGenericArgument val5 = QGenericArgument(),
                             QGenericArgument val6 = QGenericArgument(),
                             QGenericArgument val7 = QGenericArgument(),
                             QGenericArgument val8 = QGenericArgument(),
                             QGenericArgument val9 = QGenericArgument())
    {
        return invokeMethod(obj, member, type, QGenericReturnArgument(), val0, val1, val2,
                                 val3, val4, val5, val6, val7, val8, val9);
    }


    static bool invokeMethod(QObject *obj, const char *member,
                             QGenericArgument val0 = QGenericArgument(0),
                             QGenericArgument val1 = QGenericArgument(),
                             QGenericArgument val2 = QGenericArgument(),
                             QGenericArgument val3 = QGenericArgument(),
                             QGenericArgument val4 = QGenericArgument(),
                             QGenericArgument val5 = QGenericArgument(),
                             QGenericArgument val6 = QGenericArgument(),
                             QGenericArgument val7 = QGenericArgument(),
                             QGenericArgument val8 = QGenericArgument(),
                             QGenericArgument val9 = QGenericArgument())
    {
        return invokeMethod(obj, member, qt.core.Qt.AutoConnection, QGenericReturnArgument(), val0,
                val1, val2, val3, val4, val5, val6, val7, val8, val9);
    }

    enum Call {
        InvokeMetaMethod,
        ReadProperty,
        WriteProperty,
        ResetProperty,
        QueryPropertyDesignable,
        QueryPropertyScriptable,
        QueryPropertyStored,
        QueryPropertyEditable,
        QueryPropertyUser
    };

version(QT3_SUPPORT) {
    const char *superClassName() const;
}

    struct d_struct{ // private data
        const QMetaObject *superdata;
        const char *stringdata;
        const uint *data;
        const QMetaObject **extradata;
    };
    d_struct d;
};
*/