Normalize signal and slot names at compile time.
src/signal-slot/connect.lisp
Thu Jun 4 12:58:29 CEST 2009 Tobias Rautenkranz <tobias@rautenkranz.ch>
* Normalize signal and slot names at compile time.
--- old-qt.gui/src/signal-slot/connect.lisp 2014-10-30 07:47:57.000000000 +0100
+++ new-qt.gui/src/signal-slot/connect.lisp 2014-10-30 07:47:57.000000000 +0100
@@ -50,7 +50,7 @@
(defclass qt-signal-slot-name ()
((name :initarg :name
- :reader name)))
+ :reader name)))
(defclass qt-signal (qt-signal-slot-name)
((sender :initarg :sender
@@ -66,10 +66,28 @@
"Returns the slot of RECEIVER with NAME."
(make-instance 'qt-slot :receiver receiver :name name))
+(define-compiler-macro get-slot (&whole form receiver name)
+ "Normalize the slot name."
+ (if (stringp name)
+ (let ((normalized-name (cxx:data (meta-object.normalized-signature name))))
+ (if (string= name normalized-name) ;; Avoid loop
+ form
+ `(get-slot ,receiver ,normalized-name)))
+ form))
+
(defun get-signal (sender name)
"Returns the signal NAME of SENDER."
(make-instance 'qt-signal :sender sender :name name))
-
+
+(define-compiler-macro get-signal (&whole form sender name)
+ "Normalize the signal name."
+ (if (stringp name)
+ (let ((normalized-name (cxx:data (meta-object.normalized-signature name))))
+ (if (string= name normalized-name) ;; Avoid loop
+ form
+ `(get-signal ,sender ,normalized-name)))
+ form))
+
(defmethod connect ((qt-signal qt-signal) (qt-slot qt-slot) &optional type)
(unless (object.connect (qsender qt-signal) (qsignal (name qt-signal))
(receiver qt-slot) (qslot (name qt-slot))