initial import
src/qstring.lisp
Sun Apr 5 19:56:16 CEST 2009 Tobias Rautenkranz <tobias@rautenkranz.ch>
* initial import
--- old-qt.core/src/qstring.lisp 1970-01-01 01:00:00.000000000 +0100
+++ new-qt.core/src/qstring.lisp 2014-11-11 13:37:27.000000000 +0100
@@ -0,0 +1,59 @@
+(in-package :qt)
+
+(defcfun qt-smoke-string-to-qstring :pointer
+ (data :string)
+ (length :int))
+
+(defcfun qt-smoke-free-qstring :void
+ (string :pointer))
+
+(defcfun qt-smoke-qstring-to-byte-array :pointer
+ (qstring :pointer))
+
+(define-foreign-type qstring ()
+ ()
+ (:actual-type :pointer))
+
+(defun setup-type-map ()
+ (smoke::add-type "QString" 'qstring)
+ (smoke::add-type "const QString&" 'qstring))
+
+(eval-when (:load-toplevel :execute)
+ (setup-type-map))
+
+;;; make sure, that you have configured slime corretly.
+;;; e.g.
+;;; (string #\U9999) crashed slime for me. Adding
+;;; (set-language-environment "UTF-8")
+;;; (setq slime-net-coding-system 'utf-8-unix)
+;;; to .emacs helps.
+(eval-when (:compile-toplevel :load-toplevel :execute)
+ (text-codec.set-codec-for-cstrings
+ (text-codec.codec-for-name (string *default-foreign-encoding*)))
+ (text-codec.set-codec-for-locale
+ (text-codec.codec-for-name (string *default-foreign-encoding*))))
+
+
+(define-parse-method qstring ()
+ (make-instance 'qstring))
+
+(defmethod translate-to-foreign (string (type qstring))
+ (with-foreign-string ((data length) string :null-terminated-p nil)
+ (qt-smoke-string-to-qstring data length)))
+
+(let ((method (smoke::make-smoke-method (find-class 'byte-array)
+ "data")))
+ (defmethod cxx:data ((array byte-array) &rest args)
+ (declare (ignore args))
+ (values ;; Discarge second return value (length of string)
+ (foreign-string-to-lisp (smoke::pointer-call method
+ (smoke::pointer array))
+ :count (cxx:size array)))))
+
+(defmethod translate-from-foreign (string (type qstring))
+ (cxx:data (make-instance 'byte-array
+ :pointer (qt-smoke-qstring-to-byte-array string))))
+
+(defmethod free-translated-object (pointer (type qstring) param)
+ (declare (ignore param))
+ (qt-smoke-free-qstring pointer))