[cells-gtk-cvs] CVS update: root/gtk-ffi/gtk-utilities.lisp
Peter Denno
pdenno at common-lisp.net
Sat Oct 8 14:50:27 UTC 2005
Update of /project/cells-gtk/cvsroot/root/gtk-ffi
In directory common-lisp.net:/tmp/cvs-serv16236/root/gtk-ffi
Modified Files:
gtk-utilities.lisp
Log Message:
SBCL porting.
Date: Sat Oct 8 16:50:26 2005
Author: pdenno
Index: root/gtk-ffi/gtk-utilities.lisp
diff -u root/gtk-ffi/gtk-utilities.lisp:1.14 root/gtk-ffi/gtk-utilities.lisp:1.15
--- root/gtk-ffi/gtk-utilities.lisp:1.14 Sun May 29 23:24:10 2005
+++ root/gtk-ffi/gtk-utilities.lisp Sat Oct 8 16:50:26 2005
@@ -193,7 +193,7 @@
column-no = num-columns. (See gtk-tree-store-set-kids)."
(with-foreign-object (item :pointer-void)
(gtk-tree-model-get model iter column-no item -1)
- #-(or lispworks cmu allegro) (cast item (as-gtk-type-name cell-type))
+ #-(or lispworks cmu sbcl allegro) (cast item (as-gtk-type-name cell-type))
#+allegro
(case cell-type
(:string (uffi:convert-from-cstring (uffi:deref-pointer item :cstring)))
@@ -205,7 +205,11 @@
#+cmu
(case cell-type
(:string (alien:cast (alien:deref item) c-call:c-string))
- (t (alien:deref item)))))
+ (t (alien:deref item)))
+ #+sbcl
+ (case cell-type
+ (:string (sb-alien:cast (sb-alien:deref item) sb-c-call:c-string))
+ (t (sb-alien:deref item)))))
(defun parse-cell-attrib (attribs)
(loop for (attrib val) on attribs by #'cddr collect
@@ -228,6 +232,19 @@
(:float single-float)
(:double double-float)))
+#+sbcl
+(sb-alien:def-alien-type all-types
+ (sb-alien:struct c-struct
+ (:string (* t))
+ (:icon (* t))
+ (:boolean boolean)
+ (:int integer)
+ (:long sb-c-call:long)
+ (:date single-float)
+ (:float single-float)
+ (:double double-float)))
+
+
#-cmu
(progn
(defun alloc-col-type-buffer (col-type)
@@ -358,6 +375,37 @@
(apply #'gtk-object-set-property cell-renderer property))))
(when (eql col-type :string)
(g-free (alien:slot struct :string))))))
+
+#+sbcl
+(defun gtk-tree-view-render-cell (col col-type cell-attrib-f)
+ #'(lambda (tree-column cell-renderer model iter data)
+ (sb-alien:with-alien ((struct all-types))
+ (gtk-tree-model-get model iter col
+ (sb-alien:addr (sb-alien:slot struct col-type))
+ -1)
+ (let ((item-value (if (or (eql col-type :string) (eql col-type :icon))
+ (get-gtk-string (sb-alien:slot struct col-type))
+ (sb-alien:slot struct col-type))))
+ (with-gtk-string (str (format nil "~a"
+ (if (eql col-type :date)
+ (multiple-value-bind (sec min hour day month year)
+ (decode-universal-time (truncate item-value))
+ (format nil "~2,'0D/~2,'0D/~D ~2,'0D:~2,'0D:~2,'0D"
+ day month year hour min sec))
+ item-value)))
+ (ukt:trc nil "gtv-render-cell (callback11)> rendering value"
+ col col-type item-value)
+ (apply #'gtk-object-set-property cell-renderer
+ (case col-type
+ (:boolean (list "active" 'boolean item-value))
+ (:icon (list "stock-id" 'c-string (string-downcase (format nil "gtk-~a" item-value))))
+ (t (list "text" 'c-pointer str)))))
+ (when cell-attrib-f
+ (loop for property in (parse-cell-attrib (funcall cell-attrib-f item-value)) do
+ (apply #'gtk-object-set-property cell-renderer property))))
+ (when (eql col-type :string)
+ (g-free (sb-alien:slot struct :string))))))
+
#+clisp
More information about the Cells-gtk-cvs
mailing list