X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=subtest.lisp;h=4978b8a22693774504ef8a2033bddffc546838c5;hb=a6508485aa298480a387a9760b032a7b15898ac4;hp=8cc4828afa5d1117c7b9827884c249a24ae1b501;hpb=a6ac47ec408696617771709ba5ce915167ab388d;p=cl-gtk2.git diff --git a/subtest.lisp b/subtest.lisp index 8cc4828..4978b8a 100644 --- a/subtest.lisp +++ b/subtest.lisp @@ -7,20 +7,21 @@ (user-data-2 :pointer) (user-data-3 :pointer)) -(defun tree-iter-stamp (i) (cffi:foreign-slot-value (gobject::pointer i) 'tree-iter 'stamp)) +(defun tree-iter-get-stamp (i) (cffi:foreign-slot-value (gobject::pointer i) 'tree-iter 'stamp)) (defun tree-iter-set-stamp (value i) (setf (cffi:foreign-slot-value (gobject::pointer i) 'tree-iter 'stamp) value)) -(defun tree-iter-user-data (i) (cffi:pointer-address (cffi:foreign-slot-value (gobject::pointer i) 'tree-iter 'user-data))) +(defun tree-iter-get-user-data (i) (cffi:pointer-address (cffi:foreign-slot-value (gobject::pointer i) 'tree-iter 'user-data))) (defun tree-iter-set-user-data (value i) (setf (cffi:foreign-slot-value (gobject::pointer i) 'tree-iter 'user-data) (cffi:make-pointer value))) (defun tree-iter-alloc () (glib::g-malloc (cffi:foreign-type-size 'tree-iter))) (defun tree-iter-free (v) (glib::g-free v)) -(gobject::define-g-boxed-ref "GtkTreeIter" tree-iter - (:slots (stamp :reader tree-iter-stamp :writer tree-iter-set-stamp) - (user-data :reader tree-iter-user-data :writer tree-iter-set-user-data)) +(gobject:define-g-boxed-ref "GtkTreeIter" tree-iter + (:slots (stamp :reader tree-iter-get-stamp :writer tree-iter-set-stamp :accessor tree-iter-stamp) + (user-data :reader tree-iter-get-user-data :writer tree-iter-set-user-data :accessor tree-iter-user-data)) (:alloc-function tree-iter-alloc) (:free-function tree-iter-free)) +(cffi:defctype tree-path :pointer) (cffi:defcfun (%gtk-tree-path-get-depth "gtk_tree_path_get_depth") :int (path tree-path)) @@ -33,13 +34,6 @@ (path :pointer) (index :int)) -(defun tree-path-indices (path) - (let ((n (%gtk-tree-path-get-depth path)) - (indices (%gtk-tree-path-get-indices path))) - (loop - for i from 0 below n - collect (cffi:mem-aref indices :int i)))) - (defun tree-path-get-indices (path) (setf path (gobject::pointer path)) (let ((n (%gtk-tree-path-get-depth path)) @@ -63,9 +57,7 @@ (gobject::define-g-boxed-ref "GtkTreePath" tree-path (:alloc-function gtk-tree-path-new) (:free-function gtk-tree-path-free) - (:slots (indices :reader tree-path-get-indices :writer tree-path-set-indices))) - -(cffi:defctype tree-path :pointer) + (:slots (indices :reader tree-path-get-indices :writer tree-path-set-indices :accessor tree-path-indices))) (gobject::define-vtable ("GtkTreeModel" c-gtk-tree-model) (:skip parent-instance gobject::g-type-interface) @@ -76,20 +68,20 @@ (:skip tree-model-row-deleted :pointer) (:skip tree-model-rows-reordered :pointer) ;;methods - (tree-model-get-flags tree-model-get-flags-cb tree-model-flags (tree-model gobject:g-object)) - (tree-model-get-n-columns tree-model-get-n-columns-cb :int (tree-model gobject:g-object)) - (tree-model-get-column-type tree-model-get-column-type-cb gobject::g-type (tree-model gobject:g-object) (index :int)) - (tree-model-get-iter tree-model-get-iter-cb :boolean (tree-model gobject:g-object) (iter (:pointer tree-iter)) (path tree-path)) - (tree-model-get-path tree-model-get-path-cb tree-path (tree-model gobject:g-object) (iter (:pointer tree-iter))) - (tree-model-get-value tree-model-get-value-cb :void (tree-model gobject:g-object) (iter (:pointer tree-iter)) (n :int) (value (:pointer gobject::g-value))) - (tree-model-iter-next tree-model-iter-next-cb :boolean (tree-model gobject:g-object) (iter (:pointer tree-iter))) - (tree-model-iter-children tree-model-iter-children-cb :boolean (tree-model gobject:g-object) (iter (:pointer tree-iter)) (parent (:pointer tree-iter))) - (tree-model-iter-has-child tree-model-iter-has-child-cb :boolean (tree-model gobject:g-object) (iter (:pointer tree-iter))) - (tree-model-iter-n-children tree-model-iter-n-children-cb :int (tree-model gobject:g-object) (iter (:pointer tree-iter))) - (tree-model-iter-nth-child tree-model-iter-nth-child-cb :boolean (tree-model gobject:g-object) (iter (:pointer tree-iter)) (parent (:pointer tree-iter)) (n :int)) - (tree-model-iter-parent tree-model-iter-parent-cb :boolean (tree-model gobject:g-object) (iter (:pointer tree-iter)) (child (:pointer tree-iter))) - (tree-model-ref-node tree-model-ref-node-cb :void (tree-model gobject:g-object) (iter (:pointer tree-iter))) - (tree-model-unref-node tree-model-unref-node-cb :void (tree-model gobject:g-object) (iter (:pointer tree-iter)))) + (tree-model-get-flags-impl tree-model-get-flags-cb tree-model-flags (tree-model gobject:g-object)) + (tree-model-get-n-columns-impl tree-model-get-n-columns-cb :int (tree-model gobject:g-object)) + (tree-model-get-column-type-impl tree-model-get-column-type-cb gobject::g-type (tree-model gobject:g-object) (index :int)) + (tree-model-get-iter-impl tree-model-get-iter-cb :boolean (tree-model gobject:g-object) (iter (gobject:g-boxed-ref tree-iter)) (path (gobject:g-boxed-ref tree-path))) + (tree-model-get-path-impl tree-model-get-path-cb (gobject:g-boxed-ref tree-path) (tree-model gobject:g-object) (iter (gobject:g-boxed-ref tree-iter))) + (tree-model-get-value-impl tree-model-get-value-cb :void (tree-model gobject:g-object) (iter (gobject:g-boxed-ref tree-iter)) (n :int) (value (:pointer gobject::g-value))) + (tree-model-iter-next-impl tree-model-iter-next-cb :boolean (tree-model gobject:g-object) (iter (gobject:g-boxed-ref tree-iter))) + (tree-model-iter-children-impl tree-model-iter-children-cb :boolean (tree-model gobject:g-object) (iter (gobject:g-boxed-ref tree-iter)) (parent (gobject:g-boxed-ref tree-iter))) + (tree-model-iter-has-child-impl tree-model-iter-has-child-cb :boolean (tree-model gobject:g-object) (iter (gobject:g-boxed-ref tree-iter))) + (tree-model-iter-n-children-impl tree-model-iter-n-children-cb :int (tree-model gobject:g-object) (iter (gobject:g-boxed-ref tree-iter))) + (tree-model-iter-nth-child-impl tree-model-iter-nth-child-cb :boolean (tree-model gobject:g-object) (iter (gobject:g-boxed-ref tree-iter)) (parent (gobject:g-boxed-ref tree-iter)) (n :int)) + (tree-model-iter-parent-impl tree-model-iter-parent-cb :boolean (tree-model gobject:g-object) (iter (gobject:g-boxed-ref tree-iter)) (child (gobject:g-boxed-ref tree-iter))) + (tree-model-ref-node-impl tree-model-ref-node-cb :void (tree-model gobject:g-object) (iter (gobject:g-boxed-ref tree-iter))) + (tree-model-unref-node-impl tree-model-unref-node-cb :void (tree-model gobject:g-object) (iter (gobject:g-boxed-ref tree-iter)))) (defclass array-list-store (gobject:g-object gtk:tree-model) ((items :initform (make-array 0 :adjustable t :fill-pointer t) :reader store-items) @@ -102,8 +94,8 @@ (vector-push-extend item (store-items store)) (gobject:using* ((path (make-instance 'tree-path)) (iter (make-instance 'tree-iter))) - (setf (indices path) (list (1- (length (store-items store))))) - (setf (stamp iter) 0 (user-data iter) (1- (length (store-items store)))) + (setf (tree-path-indices path) (list (1- (length (store-items store))))) + (setf (tree-iter-stamp iter) 0 (tree-iter-user-data iter) (1- (length (store-items store)))) (gobject::emit-signal store "row-inserted" path iter))) (defun store-add-column (store type getter) @@ -111,56 +103,60 @@ (vector-push-extend getter (store-getters store)) (1- (length (store-types store)))) -(defmethod tree-model-get-flags ((model array-list-store)) +(defmethod tree-model-get-flags-impl ((model array-list-store)) '(:list-only)) -(defmethod tree-model-get-n-columns ((model array-list-store)) +(defmethod tree-model-get-n-columns-impl ((model array-list-store)) (length (store-types model))) -(defmethod tree-model-get-column-type ((tree-model array-list-store) index) +(defmethod tree-model-get-column-type-impl ((tree-model array-list-store) index) (aref (store-types tree-model) index)) -(defmethod tree-model-get-iter ((model array-list-store) iter path) - (let ((indices (tree-path-indices path))) - (when (= 1 (length indices)) - (cffi:with-foreign-slots ((stamp user-data user-data-2 user-data-3) iter tree-iter) - (setf stamp 0 user-data (cffi:make-pointer (first indices)) user-data-2 (cffi:null-pointer) user-data-3 (cffi:null-pointer))) - t))) +(defmethod tree-model-get-iter-impl ((model array-list-store) iter path) + (gobject:using* (iter path) + (let ((indices (tree-path-indices path))) + (when (= 1 (length indices)) + (setf (tree-iter-stamp iter) 0 (tree-iter-user-data iter) (first indices)) + t)))) -(defmethod tree-model-ref-node ((model array-list-store) iter)) -(defmethod tree-model-unref-node ((model array-list-store) iter)) +(defmethod tree-model-ref-node-impl ((model array-list-store) iter) (gobject:release iter)) +(defmethod tree-model-unref-node-impl ((model array-list-store) iter) (gobject:release iter)) -(defmethod tree-model-iter-next ((model array-list-store) iter) - (cffi:with-foreign-slots ((stamp user-data) iter tree-iter) - (let ((n (cffi:pointer-address user-data))) +(defmethod tree-model-iter-next-impl ((model array-list-store) iter) + (gobject:using* (iter) + (let ((n (tree-iter-user-data iter))) (when (< n (1- (length (store-items model)))) - (setf user-data (cffi:make-pointer (1+ n))) + (setf (tree-iter-user-data iter) (1+ n)) t)))) -(defmethod tree-model-iter-nth-child ((model array-list-store) iter parent n) - (cffi:with-foreign-slots ((stamp user-data user-data-2 user-data-3) iter tree-iter) - (setf stamp 0 user-data (cffi:make-pointer n) user-data-2 (cffi:null-pointer) user-data-3 (cffi:null-pointer))) - t) +(defmethod tree-model-iter-nth-child-impl ((model array-list-store) iter parent n) + (gobject:using* (iter parent) + (setf (tree-iter-stamp iter) 0 + (tree-iter-user-data iter) n) + t)) -(defmethod tree-model-iter-n-children ((model array-list-store) iter) +(defmethod tree-model-iter-n-children-impl ((model array-list-store) iter) (if (cffi:null-pointer-p iter) (length (store-items model)) 0)) -(defmethod tree-model-get-path ((model array-list-store) iter) - (let ((path (%gtk-tree-path-new))) - (%gtk-tree-path-append-index path (cffi:pointer-address (cffi:foreign-slot-value iter 'tree-iter 'user-data))) - path)) +(defmethod tree-model-get-path-impl ((model array-list-store) iter) + (gobject:using* (iter) + (anaphora:aprog1 (make-instance 'tree-path) + (setf (tree-path-indices anaphora:it) (list (tree-iter-user-data iter))) + (gobject:disown-boxed-ref anaphora:it)))) -(defmethod tree-model-iter-has-child ((model array-list-store) iter) +(defmethod tree-model-iter-has-child-impl ((model array-list-store) iter) + (gobject:release iter) nil) -(defmethod tree-model-get-value ((model array-list-store) iter n value) - (let ((n-row (cffi:pointer-address (cffi:foreign-slot-value iter 'tree-iter 'user-data)))) - (gobject::set-g-value value - (funcall (aref (store-getters model) n) - (aref (store-items model) n-row)) - (aref (store-types model) n)))) +(defmethod tree-model-get-value-impl ((model array-list-store) iter n value) + (gobject:using (iter) + (let ((n-row (tree-iter-user-data iter))) + (gobject::set-g-value value + (funcall (aref (store-getters model) n) + (aref (store-items model) n-row)) + (aref (store-types model) n))))) (cffi:defcfun (%gtk-tree-view-append-column "gtk_tree_view_append_column") :int (tree-view (gobject:g-object gtk:tree-view))