Mercurial > projects > qtd
diff qt/core/QMetaObject.d @ 323:7a3c43424dca signals
make all examples compile with new signals/slots
author | eldar_ins@eldar-laptop |
---|---|
date | Mon, 28 Dec 2009 16:28:55 +0500 |
parents | 7c2cf27391c4 |
children | 24ebea513d66 |
line wrap: on
line diff
--- a/qt/core/QMetaObject.d Sun Dec 27 21:13:38 2009 +0500 +++ b/qt/core/QMetaObject.d Mon Dec 28 16:28:55 2009 +0500 @@ -51,6 +51,12 @@ else return ""; } + + string name() const + { + int openBracket = indexOf(signature, '('); + return signature[0..openBracket]; + } } class QMetaSignal : QMetaMethod @@ -82,6 +88,8 @@ void *extradata; } +class QMetaException : Exception { this(string msg) { super(msg); } } + final class QMetaObject { enum Call @@ -198,7 +206,7 @@ { typeof(return) result; foreach (method; _methods) - if (startsWith(method.signature, methodName)) + if (method.name == methodName) result ~= method; if (_base) result ~= _base.lookUpMethodOverloads(methodName); @@ -209,7 +217,7 @@ { typeof(return) result; foreach (method; _methods) - if (startsWith(method.signature, signalName) && cast(QMetaSignal)method) + if (method.name == signalName && cast(QMetaSignal)method) result ~= cast(QMetaSignal)method; if (_base) result ~= _base.lookUpSignalOverloads(signalName); @@ -304,14 +312,13 @@ return qtd_QMetaObject_methodCount(_nativeId); } - static bool connectImpl(QObject sender, string signalString, QObject receiver, string methodString) + static void connectImpl(QObject sender, string signalString, QObject receiver, string methodString) { QMetaSignal[] signals; QMetaMethod[] methods; QMetaSignal signal; QMetaMethod method; - if(indexOf(signalString, '(') > 0) signal = sender.metaObject.lookUpSignal(signalString); else @@ -324,13 +331,14 @@ if(!signal && !method) { + Top: foreach(sig; signals) foreach(meth; methods) if(startsWith(sig.args, meth.args)) { signal = sig; method = meth; - goto doConnect; + break Top; } } else if (!signal) @@ -352,15 +360,21 @@ } } -doConnect: + bool success = false; + if(!signal && !method) { - writeln(stderr, "QMetaObject: Signal and slots cannot be found"); - return false; + success = false; } - int signalIndex = signal.indexOfMethod; - int methodIndex = method.indexOfMethod; - return QMetaObject.connect(sender, signalIndex, receiver, methodIndex); + else + { + int signalIndex = signal.indexOfMethod; + int methodIndex = method.indexOfMethod; + success = QMetaObject.connect(sender, signalIndex, receiver, methodIndex); + } + + if(!success) + throw new QMetaException("QMetaObject: Signal " ~ signalString ~ " and slot " ~ methodString ~ " cannot be found"); } }