Support ownership transfer to non smoke wrapped QObjects & cleanup C++ to Lisp translation.
src/list.lisp
Sun Aug 2 13:15:21 CEST 2009 Tobias Rautenkranz <tobias@rautenkranz.ch>
* Support ownership transfer to non smoke wrapped QObjects & cleanup C++ to Lisp translation.
--- old-qt.gui/src/list.lisp 2014-10-30 07:44:36.000000000 +0100
+++ new-qt.gui/src/list.lisp 2014-10-30 07:44:36.000000000 +0100
@@ -21,22 +21,12 @@
"Appends NEW-ELEMENT to LIST."
(list :pointer)
(new-element :pointer))
- (define-foreign-type ,list-type ()
- ()
- (:actual-type :pointer))
- (define-parse-method ,list-type ()
- (make-instance ',list-type))
- (eval-when (:load-toplevel :execute)
- ,@(loop for type-name in (ensure-list type-name) collect
- `(smoke::add-type ,(format nil "const QList<~A>&" type-name)
- ',list-type))
- ,@(loop for type-name in (ensure-list type-name) collect
- `(smoke::add-type ,(format nil "QList<~A>" type-name) ',list-type)))
+ ;; To Lisp
,@(loop for type-name in (ensure-list type-name) collect
- `(defmethod translate-from-foreign (list (type ,list-type))
+ `(defun ,(symbolicate 'from- type-name) (list-pointer)
(let ((vector (make-array (,(symbolicate 'qt-smoke-list-
type '-size)
- list))))
+ list-pointer))))
(dotimes (index (length vector) vector)
(setf (aref vector index)
;; FIXME the returned object is not wrapped by Smoke
@@ -44,23 +34,27 @@
(smoke::object-to-lisp
(,(symbolicate 'qt-smoke-list-
type '-at)
- list index)
- (smoke::make-smoke-type *smoke-module* ,type-name)))))))
- (defmethod free-translated-object (pointer (type ,list-type) param)
- (declare (ignore param))
- (,(symbolicate 'qt-smoke-free-list- type)
- pointer))
+ list-pointer index)
+ (smoke::make-smoke-type *smoke-module*
+ ,type-name)))))))
+ ,@(loop for type-name in (ensure-list type-name) collect
+ `(define-to-lisp-translation
+ (,(format nil "const QList<~A>&" type-name)
+ ,(format nil "QList<~A>" type-name))
+ ,(symbolicate 'from- type-name)
+ ,(symbolicate 'qt-smoke-free-list- type)))
+ ;; From Lisp
(defun ,(symbolicate 'coerce- list-type) (list)
(let ((qlist (,(symbolicate 'qt-smoke-make-list- type))))
(loop for element in list do
(,(symbolicate 'qt-smoke-list- type '-append)
qlist (pointer (make-instance ',type :args (list element)))))
- (smoke::make-cleanup-pointer
+ (make-cleanup-pointer
qlist
(function ,(symbolicate 'qt-smoke-free-list- type)))))
,@(loop for type-name in (ensure-list type-name) collect
`(define-from-lisp-translation (,(format nil "const QList<~A>&" type-name)
- ,(format nil "QLIst<~A>" type-name))
+ ,(format nil "QList<~A>" type-name))
list ;; FIXME allow sequence and define element type
,(symbolicate 'coerce- list-type))))))