(in-package :gtk) (defcfun gtk-list-store-set-column-types :void (list-store (g-object list-store)) (n-columns :int) (types :pointer)) (defun call-list-store-set-column-types (list-store column-types) (let ((n (length column-types))) (with-foreign-object (types-ar 'g-type-designator n) (iter (for i from 0 below n) (for type in column-types) (setf (mem-aref types-ar 'g-type-designator i) type)) (gtk-list-store-set-column-types list-store n types-ar)))) (defmethod initialize-instance :after ((store list-store) &rest initargs &key (column-types nil column-types-supplied-p) &allow-other-keys) (declare (ignore initargs)) (when column-types-supplied-p (call-list-store-set-column-types store column-types))) (defcfun (%gtk-list-store-set-value "gtk_list_store_set_value") :void (list-store (g-object list-store)) (iter (g-boxed-foreign tree-iter)) (column :int) (value :pointer)) (defun gtk-list-store-set-value (list-store iter column value) (with-foreign-object (v 'g-value) (set-g-value v value (tree-model-column-type list-store column) :zero-g-value t) (%gtk-list-store-set-value list-store iter column v) (g-value-unset v) (values))) (defun list-store-value (list-store iter column) (tree-model-value list-store iter column)) (defun (setf list-store-value) (new-value list-store iter column) (gtk-list-store-set-value list-store iter column new-value) new-value) (export 'list-store-value) ; unimplemented ;void gtk_list_store_set_valuesv (GtkListStore *list_store, ; GtkTreeIter *iter, ; gint *columns, ; GValue *values, ; gint n_values); (defcfun (list-store-remove "gtk_list_store_remove") :boolean (list-store (g-object list-store)) (tree-iter (g-boxed-foreign tree-iter))) (export 'list-store-remove) (defcfun gtk-list-store-insert :void (list-store (g-object list-store)) (tree-iter (g-boxed-foreign tree-iter)) (position :int)) (defun list-store-insert (list-store position) (let ((iter (make-tree-iter))) (gtk-list-store-insert list-store iter position) iter)) (export 'list-store-insert) (defcfun gtk-list-store-insert-before :void (list-store (g-object list-store)) (tree-iter (g-boxed-foreign tree-iter)) (sibling (g-boxed-foreign tree-iter))) (defcfun gtk-list-store-insert-after :void (list-store (g-object list-store)) (tree-iter (g-boxed-foreign tree-iter)) (sibling (g-boxed-foreign tree-iter))) (defun list-store-insert-before (list-store sibling) (let ((iter (make-tree-iter))) (gtk-list-store-insert-before list-store iter sibling) iter)) (defun list-store-insert-after (list-store sibling) (let ((iter (make-tree-iter))) (gtk-list-store-insert-after list-store iter sibling) iter)) (export '(list-store-insert-before list-store-insert-after)) (defcfun gtk-list-store-insert-with-valuesv :void (list-store (g-object list-store)) (iter (g-boxed-foreign tree-iter)) (position :int) (columns :pointer) (values :pointer) (n-values :int)) (defun list-store-insert-with-values (list-store position &rest values) (let ((n (length values)) (iter (make-tree-iter))) (with-foreign-objects ((v-ar 'g-value n) (columns-ar :int n)) (iter (for i from 0 below n) (for value in values) (for type = (tree-model-column-type list-store i)) (setf (mem-aref columns-ar :int i) i) (set-g-value (mem-aref v-ar 'g-value i) value type :zero-g-value t)) (gtk-list-store-insert-with-valuesv list-store iter position columns-ar v-ar n) (iter (for i from 0 below n) (g-value-unset (mem-aref v-ar 'g-value i))) iter))) (export 'list-store-insert-with-values) (defcfun gtk-list-store-prepend :void (list-store (g-object list-store)) (iter (g-boxed-foreign tree-iter))) (defcfun gtk-list-store-append :void (list-store (g-object list-store)) (iter (g-boxed-foreign tree-iter))) (defun list-store-append (list-store) (let ((i (make-tree-iter))) (gtk-list-store-append list-store i) i)) (defun list-store-prepend (list-store) (let ((i (make-tree-iter))) (gtk-list-store-prepend list-store i) i)) (export '(list-store-append list-store-prepend)) (defcfun (list-store-clear "gtk_list_store_clear") :void (list-store (g-object list-store))) (defcfun (list-store-iter-is-valid "gtk_list_store_iter_is_valid") :boolean (list-store (g-object list-store)) (iter (g-boxed-foreign tree-iter))) ; not implemented yet ;(defcfun (list-store-reorder "gtk_list_store_reorder") :void ; ()) (defcfun (list-store-swap "gtk_list_store_swap") :void (list-store (g-object list-store)) (a (g-boxed-foreign tree-iter)) (b (g-boxed-foreign tree-iter))) (defcfun (list-store-move-before "gtk_list_store_move_before") :void (list-store (g-object list-store)) (iter (g-boxed-foreign tree-iter)) (position (g-boxed-foreign tree-iter))) (defcfun (list-store-move-after "gtk_list_store_move_after") :void (list-store (g-object list-store)) (iter (g-boxed-foreign tree-iter)) (position (g-boxed-foreign tree-iter))) (export '(list-store-clear list-store-iter-is-valid list-store-swap list-store-move-before list-store-move-after))