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");
     }
 }