1 ;; Common Lisp bindings for GTK+ v2.x
2 ;; Copyright 2004-2005 Espen S. Johnsen <espen@users.sf.net>
4 ;; Permission is hereby granted, free of charge, to any person obtaining
5 ;; a copy of this software and associated documentation files (the
6 ;; "Software"), to deal in the Software without restriction, including
7 ;; without limitation the rights to use, copy, modify, merge, publish,
8 ;; distribute, sublicense, and/or sell copies of the Software, and to
9 ;; permit persons to whom the Software is furnished to do so, subject to
10 ;; the following conditions:
12 ;; The above copyright notice and this permission notice shall be
13 ;; included in all copies or substantial portions of the Software.
15 ;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 ;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 ;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18 ;; IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19 ;; CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20 ;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21 ;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 ;; $Id: gtktree.lisp,v 1.14 2006/02/09 22:32:47 espen Exp $
31 (defbinding cell-layout-pack-start () nil
32 (cell-layout cell-layout)
36 (defbinding cell-layout-pack-end () nil
37 (cell-layout cell-layout)
41 (defun cell-layout-pack (layout cell &key end expand)
43 (cell-layout-pack-end layout cell expand)
44 (cell-layout-pack-start layout cell expand)))
47 (defbinding cell-layout-reorder () nil
48 (cell-layout cell-layout)
52 (defbinding cell-layout-clear () nil
53 (cell-layout cell-layout))
55 (defbinding cell-layout-add-attribute (cell-layout cell attribute column) nil
56 (cell-layout cell-layout)
58 ((string-downcase attribute) string)
61 (def-callback-marshal %cell-layout-data-func
62 (nil cell-layout cell-renderer tree-model (copy-of tree-iter)))
64 (defbinding cell-layout-set-cell-data-func (cell-layout cell function) nil
65 (cell-layout cell-layout)
67 (%cell-layout-data-func callback)
68 ((register-callback-function function) unsigned-int)
69 (user-data-destroy-func callback))
71 (defbinding cell-layout-clear-attributes () nil
72 (cell-layout cell-layout)
79 (defmethod initialize-instance ((list-store list-store) &key column-types
80 column-names initial-content)
82 (%list-store-set-column-types list-store column-types)
84 (setf (object-data list-store 'column-names) column-names))
87 with iter = (make-instance 'tree-iter)
88 for row in initial-content
89 do (list-store-append list-store row iter))))
92 (defmethod column-setter-name ((list-store list-store))
93 (declare (ignore list-store))
96 (defbinding %list-store-set-column-types () nil
97 (list-store list-store)
98 ((length columns) unsigned-int)
99 (columns (vector gtype)))
101 (defbinding %list-store-remove () boolean
102 (list-store list-store)
103 (tree-iter tree-iter))
105 (defun list-store-remove (store row)
108 (%list-store-remove store row))
110 (multiple-value-bind (valid iter) (tree-model-get-iter store row)
112 (%list-store-remove store iter)
113 (error "~A not poiniting to a valid iterator in ~A" row store))))
115 (let ((path (tree-row-reference-get-path row)))
117 (list-store-remove store path)
118 (error "~A not valid" row))))))
121 (defbinding %list-store-insert () nil
122 (list-store list-store)
123 (tree-iter tree-iter)
126 (defun list-store-insert
127 (store position &optional data (iter (make-instance 'tree-iter)))
128 (%list-store-insert store iter position)
129 (when data (%tree-model-set store iter data))
132 (defbinding %list-store-insert-before () nil
133 (list-store list-store)
134 (tree-iter tree-iter)
135 (sibling (or null tree-iter)))
137 (defun list-store-insert-before
138 (store sibling &optional data (iter (make-instance 'tree-iter)))
139 (%list-store-insert-before store iter sibling)
140 (when data (%tree-model-set store iter data))
143 (defbinding %list-store-insert-after
144 (list-store &optional sibling (tree-iter (make-instance 'tree-iter))) nil
145 (list-store list-store)
146 (tree-iter tree-iter)
147 (sibling (or null tree-iter)))
149 (defun list-store-insert-after
150 (store sibling &optional data (iter (make-instance 'tree-iter)))
151 (%list-store-insert-after store iter sibling)
152 (when data (%tree-model-set store iter data))
155 (defbinding %list-store-prepend () nil
156 (list-store list-store)
157 (tree-iter tree-iter))
159 (defun list-store-prepend
160 (store &optional data (iter (make-instance 'tree-iter)))
161 (%list-store-prepend store iter)
162 (when data (%tree-model-set store iter data))
165 (defbinding %list-store-append () nil
166 (list-store list-store)
167 (tree-iter tree-iter))
169 (defun list-store-append
170 (store &optional data (iter (make-instance 'tree-iter)))
171 (%list-store-append store iter)
172 (when data (%tree-model-set store iter data))
175 (defbinding list-store-clear () nil
176 (list-store list-store))
178 (defbinding list-store-reorder () nil
179 (list-store list-store)
180 (new-order (vector int)))
182 (defbinding list-store-swap () nil
183 (list-store list-store)
187 (defbinding list-store-move-before () nil
188 (list-store list-store)
190 (psoition (or null tree-iter)))
192 (defbinding list-store-move-after () nil
193 (list-store list-store)
195 (psoition tree-iter))
200 (defbinding %tree-path-free () nil
203 (defbinding %tree-path-get-indices () pointer
206 (defbinding %tree-path-get-depth () int
209 (defun %make-tree-path (path)
210 (let ((c-vector (make-c-vector 'int (length path) path))
211 (location (allocate-memory (+ (size-of 'int) (size-of 'pointer)))))
212 (funcall (writer-function 'int) (length path) location)
213 (funcall (writer-function 'pointer) c-vector location (size-of 'int))
216 (defun %tree-path-to-vector (location)
217 (let ((indices (%tree-path-get-indices location))
218 (depth (%tree-path-get-depth location)))
219 (if (null-pointer-p indices)
221 (map-c-vector 'vector #'identity indices 'int depth))))
223 (eval-when (:compile-toplevel :load-toplevel :execute)
224 (defmethod alien-type ((type (eql 'tree-path)) &rest args)
225 (declare (ignore type args))
226 (alien-type 'pointer))
228 (defmethod size-of ((type (eql 'tree-path)) &rest args)
229 (declare (ignore type args))
232 (defmethod to-alien-form (path (type (eql 'tree-path)) &rest args)
233 (declare (ignore type args))
234 `(%make-tree-path ,path))
236 (defmethod from-alien-form (location (type (eql 'tree-path)) &rest args)
237 (declare (ignore type args))
238 `(let ((location ,location))
240 (%tree-path-to-vector location)
241 (%tree-path-free location))))
243 (defmethod copy-from-alien-form (location (type (eql 'tree-path)) &rest args)
244 (declare (ignore type args))
245 `(%tree-path-to-vector ,location))
247 (defmethod cleanup-form (location (type (eql 'tree-path)) &rest args)
248 (declare (ignore type args))
249 `(%tree-path-free ,location)))
251 (defmethod to-alien-function ((type (eql 'tree-path)) &rest args)
252 (declare (ignore type args))
255 (defmethod from-alien-function ((type (eql 'tree-path)) &rest args)
256 (declare (ignore type args))
259 (%tree-path-to-vector location)
260 (%tree-path-free location))))
262 (defmethod copy-from-alien-function ((type (eql 'tree-path)) &rest args)
263 (declare (ignore type args))
264 #'%tree-path-to-vector)
266 (defmethod cleanup-function ((type (eql 'tree-path)) &rest args)
267 (declare (ignore type args))
270 (defmethod writer-function ((type (eql 'tree-path)) &rest args)
271 (declare (ignore type args))
272 (let ((writer (writer-function 'pointer)))
273 #'(lambda (path location &optional (offset 0))
274 (funcall writer (%make-tree-path path) location offset))))
276 (defmethod reader-function ((type (eql 'tree-path)) &rest args)
277 (declare (ignore type args))
278 (let ((reader (reader-function 'pointer)))
279 #'(lambda (location &optional (offset 0) weak-p)
280 (declare (ignore weak-p))
281 (%tree-path-to-vector (funcall reader location offset)))))
283 (defmethod destroy-function ((type (eql 'tree-path)) &rest args)
284 (declare (ignore type args))
285 (let ((reader (reader-function 'pointer)))
286 #'(lambda (location &optional (offset 0))
287 (%tree-path-free (funcall reader location offset)))))
290 (defbinding %tree-row-reference-new () pointer
294 (defmethod allocate-foreign ((reference tree-row-reference) &key model path)
295 (%tree-row-reference-new model path))
297 (defbinding tree-row-reference-get-path () tree-path
298 (reference tree-row-reference))
300 (defbinding (tree-row-reference-valid-p "gtk_tree_row_reference_valid") () boolean
301 (reference tree-row-reference))
304 (defbinding tree-model-get-column-type () gtype ;type-number
305 (tree-model tree-model)
308 (defbinding tree-model-get-iter
309 (model path &optional (iter (make-instance 'tree-iter))) boolean
311 (iter tree-iter :return)
314 (defbinding tree-model-get-path () tree-path
315 (tree-model tree-model)
318 (defbinding %tree-model-get-value () nil
319 (tree-model tree-model)
324 (defun tree-model-value (model row column)
325 (let ((index (column-index model column))
328 (tree-path (multiple-value-bind (valid iter)
329 (tree-model-get-iter model row)
332 (error "Invalid tree path: ~A" row)))))))
333 (with-gvalue (gvalue)
334 (%tree-model-get-value model iter index gvalue))))
336 (defbinding tree-model-iter-next () boolean
337 (tree-model tree-model)
338 (iter tree-iter :return))
340 (defbinding tree-model-iter-children
341 (tree-model parent &optional (iter (make-instance 'tree-iter))) boolean
342 (tree-model tree-model)
343 (iter tree-iter :return)
344 (parent (or null tree-iter)))
346 (defbinding (tree-model-iter-has-child-p "gtk_tree_model_iter_has_child")
348 (tree-model tree-model)
351 (defbinding tree-model-iter-n-children () int
352 (tree-model tree-model)
355 (defbinding tree-model-iter-nth-child
356 (tree-model parent n &optional (iter (make-instance 'tree-iter))) boolean
357 (tree-model tree-model)
358 (iter tree-iter :return)
359 (parent (or null tree-iter))
362 (defbinding tree-model-iter-parent
363 (tree-model child &optional (iter (make-instance 'tree-iter))) boolean
364 (tree-model tree-model)
365 (iter tree-iter :return)
368 (def-callback-marshal %tree-model-foreach-func
369 (boolean tree-model (path (copy-of tree-path)) (iter (copy-of tree-iter))))
371 (defbinding %tree-model-foreach () nil
372 (tree-model tree-model)
373 ((progn %tree-model-foreach-func) callback)
374 (callback-id unsigned-int))
376 (defun tree-model-foreach (model function)
377 (with-callback-function (id function)
378 (%tree-model-foreach model id)))
380 (defbinding tree-model-row-changed () nil
381 (tree-model tree-model)
385 (defbinding tree-model-row-inserted () nil
386 (tree-model tree-model)
390 (defbinding tree-model-row-has-child-toggled () nil
391 (tree-model tree-model)
395 (defbinding tree-model-row-deleted () nil
396 (tree-model tree-model)
400 (defbinding tree-model-rows-reordered () nil
401 (tree-model tree-model)
407 (defun column-types (model columns)
410 (find-type-number (first (mklist column))))
413 (defun column-index (model column)
417 (symbol (position column (object-data model 'column-names)))
418 (string (position column (object-data model 'column-names)
420 (error "~A has no column ~S" model column)))
422 (defun column-name (model index)
423 (svref (object-data model 'column-names) index))
425 (defun tree-model-column-value-setter (model column)
427 (object-data model 'column-setters)
429 (object-data model 'column-setters)
430 (make-array (tree-model-n-columns model)
431 :initial-element nil)))))
432 (let ((index (column-index model column)))
434 (svref setters index)
436 (svref setters index)
438 (mkbinding (column-setter-name model)
439 nil (type-of model) 'tree-iter 'int
440 ; (type-from-number (tree-model-get-column-type model index))
441 (tree-model-get-column-type model index)
443 #'(lambda (value iter)
444 (funcall setter model iter index value -1))))))))
446 (defun tree-model-row-setter (model)
448 (object-data model 'row-setter)
450 ;; This will create any missing column setter
452 for i from 0 below (tree-model-n-columns model)
453 do (tree-model-column-value-setter model i))
454 (let ((setters (object-data model 'column-setters)))
456 (object-data model 'row-setter)
458 (map nil #'(lambda (value setter)
459 (funcall setter value iter))
462 (defun (setf tree-model-value) (value model row column)
463 (let ((iter (etypecase row
465 (tree-path (multiple-value-bind (valid iter)
466 (tree-model-get-iter model row)
469 (error "Invalid tree path: ~A" row)))))))
470 (funcall (tree-model-column-value-setter model column) value iter)
473 (defun (setf tree-model-row-data) (data model iter)
474 (funcall (tree-model-row-setter model) data iter)
477 (defun %tree-model-set (model iter data)
479 (vector (setf (tree-model-row-data model iter) data))
482 as (column value . rest) = data then rest
483 do (setf (tree-model-value model iter column) value)
489 (def-callback-marshal %tree-selection-func (boolean tree-selection tree-model (path (copy-of tree-path)) (path-currently-selected boolean)))
491 (defbinding tree-selection-set-select-function (selection function) nil
492 (selection tree-selection)
493 (%tree-selection-func callback)
494 ((register-callback-function function) unsigned-int)
495 (user-data-destroy-func callback))
497 (defbinding tree-selection-get-selected
498 (selection &optional (iter (make-instance 'tree-iter))) boolean
499 (selection tree-selection)
501 (iter tree-iter :return))
503 (def-callback-marshal %tree-selection-foreach-func (nil tree-model (path (copy-of tree-path)) (iter (copy-of tree-iter))))
505 (defbinding %tree-selection-selected-foreach () nil
506 (tree-selection tree-selection)
507 ((progn %tree-selection-foreach-func) callback)
508 (callback-id unsigned-int))
510 (defun tree-selection-selected-foreach (selection function)
511 (with-callback-function (id function)
512 (%tree-selection-selected-foreach selection id)))
514 (defbinding tree-selection-get-selected-rows () (glist tree-path)
515 (tree-selection tree-selection)
518 (defbinding tree-selection-count-selected-rows () int
519 (tree-selection tree-selection))
521 (defbinding %tree-selection-select-path () nil
522 (tree-selection tree-selection)
523 (tree-path tree-path))
525 (defbinding %tree-selection-unselect-path () nil
526 (tree-selection tree-selection)
527 (tree-path tree-path))
529 (defbinding %tree-selection-path-is-selected () boolean
530 (tree-selection tree-selection)
531 (tree-path tree-path))
533 (defbinding %tree-selection-select-iter () nil
534 (tree-selection tree-selection)
535 (tree-path tree-path))
537 (defbinding %tree-selection-unselect-iter () nil
538 (tree-selection tree-selection)
539 (tree-path tree-path))
541 (defbinding %tree-selection-iter-is-selected () boolean
542 (tree-selection tree-selection)
543 (tree-path tree-path))
545 (defun tree-selection-select (selection row)
547 (tree-path (%tree-selection-select-path selection row))
548 (tree-iter (%tree-selection-select-iter selection row))))
550 (defun tree-selection-unselect (selection row)
552 (tree-path (%tree-selection-unselect-path selection row))
553 (tree-iter (%tree-selection-unselect-iter selection row))))
555 (defun tree-selection-is-selected-p (selection row)
557 (tree-path (%tree-selection-path-is-selected selection row))
558 (tree-iter (%tree-selection-iter-is-selected selection row))))
560 (defbinding tree-selection-select-all () nil
561 (tree-selection tree-selection))
563 (defbinding tree-selection-unselect-all () nil
564 (tree-selection tree-selection))
566 (defbinding tree-selection-select-range () nil
567 (tree-selection tree-selection)
571 (defbinding tree-selection-unselect-range () nil
572 (tree-selection tree-selection)
579 (eval-when (:compile-toplevel :load-toplevel :execute)
580 (define-enum-type sort-column (:default -1) (:unsorted -2))
581 (define-enum-type sort-order (:before -1) (:equal 0) (:after 1)))
584 (def-callback-marshal %tree-iter-compare-func
585 ((or int sort-order) tree-model (a (copy-of tree-iter)) (b (copy-of tree-iter))))
587 (defbinding tree-sortable-sort-column-changed () nil
588 (sortable tree-sortable))
590 (defbinding %tree-sortable-get-sort-column-id () boolean
591 (sortable tree-sortable)
593 (order sort-type :out))
595 (defun tree-sortable-get-sort-column (sortable)
596 (multiple-value-bind (special-p column order)
597 (%tree-sortable-get-sort-column-id sortable)
600 (int-to-sort-order column)
601 (column-name sortable column))
604 (defbinding (tree-sortable-set-sort-column
605 "gtk_tree_sortable_set_sort_column_id")
606 (sortable column order) nil
607 (sortable tree-sortable)
609 ((or integer sort-column) column)
610 (symbol (column-index sortable column)))
611 (or sort-column int))
614 (defbinding %tree-sortable-set-sort-func (sortable column function) nil
615 (sortable tree-sortable)
616 ((column-index sortable column) int)
617 (%tree-iter-compare-func callback)
618 ((register-callback-function function) unsigned-int)
619 (user-data-destroy-func callback))
621 (defbinding %tree-sortable-set-default-sort-func () nil
622 (sortable tree-sortable)
623 (compare-func (or null pointer))
624 (callback-id unsigned-int)
625 (destroy-func (or null pointer)))
627 (defun tree-sortable-set-sort-func (sortable column function)
628 "Sets the comparison function used when sorting to be FUNCTION. If
629 the current sort column of SORTABLE is the same as COLUMN,
630 then the model will sort using this function."
632 ((and (eq column :default) (not function))
633 (%tree-sortable-set-default-sort-func sortable nil 0 nil))
634 ((eq column :default)
635 (%tree-sortable-set-default-sort-func sortable
636 (callback %tree-iter-compare-func)
637 (register-callback-function function)
638 (callback user-data-destroy-func)))
639 ((%tree-sortable-set-sort-func sortable column function))))
641 (defbinding tree-sortable-has-default-sort-func-p () boolean
642 (sortable tree-sortable))
647 (defbinding %tree-store-set-column-types () nil
648 (tree-store tree-store)
649 ((length columns) unsigned-int)
650 (columns (vector gtype)))
652 (defmethod initialize-instance ((tree-store tree-store) &key column-types
655 (%tree-store-set-column-types tree-store column-types)
657 (setf (object-data tree-store 'column-names) column-names)))
659 (defmethod column-setter-name ((tree-store tree-store))
660 (declare (ignore tree-store))
661 "gtk_tree_store_set")
663 (defbinding tree-store-remove () boolean
664 (tree-store tree-store)
665 (tree-iter tree-iter))
667 (defbinding %tree-store-insert () nil
668 (tree-store tree-store)
669 (tree-iter tree-iter)
670 (parent (or null tree-iter))
673 (defun tree-store-insert
674 (store parent position &optional data (iter (make-instance 'tree-iter)))
675 (%tree-store-insert store iter parent position)
676 (when data (%tree-model-set store iter data))
679 (defbinding %tree-store-insert-before () nil
680 (tree-store tree-store)
681 (tree-iter tree-iter)
682 (parent (or null tree-iter))
683 (sibling (or null tree-iter)))
685 (defun tree-store-insert-before
686 (store parent sibling &optional data (iter (make-instance 'tree-iter)))
687 (%tree-store-insert-before store iter parent sibling)
688 (when data (%tree-model-set store iter data))
691 (defbinding %tree-store-insert-after () nil
692 (tree-store tree-store)
693 (tree-iter tree-iter)
694 (parent (or null tree-iter))
695 (sibling (or null tree-iter)))
697 (defun tree-store-insert-after
698 (store parent sibling &optional data (iter (make-instance 'tree-iter)))
699 (%tree-store-insert-after store iter parent sibling)
700 (when data (%tree-model-set store iter data))
703 (defbinding %tree-store-prepend () nil
704 (tree-store tree-store)
705 (tree-iter tree-iter)
706 (parent (or null tree-iter)))
708 (defun tree-store-prepend
709 (store parent &optional data (iter (make-instance 'tree-iter)))
710 (%tree-store-prepend store iter parent)
711 (when data (%tree-model-set store iter data))
714 (defbinding %tree-store-append () nil
715 (tree-store tree-store)
716 (tree-iter tree-iter)
717 (parent (or null tree-iter)))
719 (defun tree-store-append
720 (store parent &optional data (iter (make-instance 'tree-iter)))
721 (%tree-store-append store iter parent)
722 (when data (%tree-model-set store iter data))
725 (defbinding (tree-store-is-ancestor-p "gtk_tree_store_is_ancestor") () boolean
726 (tree-store tree-store)
727 (tree-iter tree-iter)
728 (descendant tree-iter))
730 (defbinding tree-store-iter-depth () int
731 (tree-store tree-store)
732 (tree-iter tree-iter))
734 (defbinding tree-store-clear () nil
735 (tree-store tree-store))
737 (defbinding tree-store-reorder () nil
738 (tree-store tree-store)
740 (new-order (vector int)))
742 (defbinding tree-store-swap () nil
743 (tree-store tree-store)
747 (defbinding tree-store-move-before () nil
748 (tree-store tree-store)
750 (psoition (or null tree-iter)))
753 (defbinding tree-store-move-after () nil
754 (tree-store tree-store)
756 (psoition tree-iter))
762 (defmethod initialize-instance ((tree-view tree-view) &rest initargs
765 (mapc #'(lambda (column)
766 (tree-view-append-column tree-view column))
767 (get-all initargs :column)))
770 (defbinding tree-view-columns-autosize () nil
771 (tree-view tree-view))
773 (defbinding tree-view-append-column () int
774 (tree-view tree-view)
775 (tree-view-column tree-view-column))
777 (defbinding tree-view-remove-column () int
778 (tree-view tree-view)
779 (tree-view-column tree-view-column))
781 (defbinding tree-view-insert-column (view column position) int
783 (column tree-view-column)
784 ((if (eq position :end) -1 position) int))
786 (defbinding tree-view-get-column () tree-view-column
787 (tree-view tree-view)
790 (defbinding tree-view-move-column-after () nil
791 (tree-view tree-view)
792 (column tree-view-column)
793 (base-column (or null tree-view-column)))
795 ;;(defbinding tree-view-set-column drag-function ...)
797 (defbinding tree-view-scroll-to-point () nil
798 (tree-view tree-view)
802 (defbinding tree-view-scroll-to-cell () nil
803 (tree-view tree-view)
804 (path (or null tree-path))
805 (column (or null tree-view-column))
807 (row-align single-float)
808 (col-align single-float))
810 (defbinding tree-view-set-cursor () nil
811 (tree-view tree-view)
813 (focus-column tree-view-column)
814 (start-editing boolean))
816 (defbinding tree-view-set-cursor-on-cell () nil
817 (tree-view tree-view)
819 (focus-column (or null tree-view-column))
820 (focus-cell (or null cell-renderer))
821 (start-editing boolean))
823 (defbinding tree-view-get-cursor () nil
824 (tree-view tree-view)
825 (path tree-path :out )
826 (focus-column tree-view-column :out))
828 (defbinding tree-view-row-activated () nil
829 (tree-view tree-view)
831 (column tree-view-column))
833 (defbinding tree-view-expand-all () nil
834 (tree-view tree-view))
836 (defbinding tree-view-collapse-all () nil
837 (tree-view tree-view))
839 (defbinding tree-view-expand-to-path () nil
840 (tree-view tree-view)
843 (defbinding tree-view-expand-row () nil
844 (tree-view tree-view)
848 (defbinding tree-view-collapse-row () nil
849 (tree-view tree-view)
852 (def-callback-marshal %tree-view-mapping-func (nil tree-view (path (copy-of tree-path))))
854 (defbinding %tree-view-map-expanded-rows () nil
855 (tree-view tree-view)
856 ((progn %tree-view-mapping-func) callback)
857 (callback-id unsigned-int))
859 (defun map-expanded-rows (function tree-view)
860 (with-callback-function (id function)
861 (%tree-view-map-expanded-rows tree-view id)))
863 (defbinding (tree-view-row-expanded-p "gtk_tree_view_row_expanded") () boolean
864 (tree-view tree-view)
867 (defbinding tree-view-get-path-at-pos
868 (tree-view x y &optional (cell-x 0) (cell-y 0)) boolean
869 (tree-view tree-view)
872 (path tree-path :out)
873 (column tree-view-column :out)
877 (defbinding tree-view-get-cell-area () nil
878 (tree-view tree-view)
879 (path (or null tree-path))
880 (column (or null tree-view-column))
881 ((make-instance 'gdk:rectangle) gdk:rectangle :return))
883 (defbinding tree-view-get-background-area () nil
884 (tree-view tree-view)
885 (path (or null tree-path))
886 (column (or null tree-view-column))
887 ((make-instance 'gdk:rectangle) gdk:rectangle :return))
889 (defbinding tree-view-get-visible-rect () nil
890 (tree-view tree-view)
891 ((make-instance 'gdk:rectangle) gdk:rectangle :return))
893 ;; and many more functions which we'll add later
900 (defbinding icon-view-get-path-at-pos () tree-path
901 (icon-view icon-view)
904 (def-callback-marshal %icon-view-foreach-func
905 (nil icon-view (path (copy-of tree-path))))
907 (defbinding %icon-view-selected-foreach () tree-path
908 (icon-view icon-view)
909 ((progn %icon-view-foreach-func) callback)
910 (callback-id unsigned-int))
912 (defun icon-view-foreach (icon-view function)
913 (with-callback-function (id function)
914 (%icon-view-selected-foreach icon-view id)))
916 (defbinding icon-view-select-path () nil
917 (icon-view icon-view)
920 (defbinding icon-view-unselect-path () nil
921 (icon-view icon-view)
924 (defbinding icon-view-path-is-selected-p () boolean
925 (icon-view icon-view)
928 (defbinding icon-view-get-selected-items () (glist tree-path)
929 (icon-view icon-view))
931 (defbinding icon-view-select-all () nil
932 (icon-view icon-view))
934 (defbinding icon-view-unselect-all () nil
935 (icon-view icon-view))
937 (defbinding icon-view-item-activated () nil
938 (icon-view icon-view)
941 (defbinding %icon-view-set-text-column (column icon-view) nil
942 (icon-view icon-view)
943 ((if (integerp column)
945 (column-index (icon-view-model icon-view) column)) int))
947 (defbinding %icon-view-set-markup-column (column icon-view) nil
948 (icon-view icon-view)
949 ((if (integerp column)
951 (column-index (icon-view-model icon-view) column)) int))
953 (defbinding %icon-view-set-pixbuf-column (column icon-view) nil
954 (icon-view icon-view)
955 ((if (integerp column)
957 (column-index (icon-view-model icon-view) column)) int)))
961 (defbinding icon-view-get-item-at-pos () boolean
962 (icon-view icon-view)
965 (tree-path tree-path :out)
966 (cell cell-renderer :out))
968 (defbinding icon-view-set-cursor (icon-view path &key cell start-editing) nil
969 (icon-view icon-view)
971 (cell (or null cell-renderer))
972 (start-editing boolean))
974 (defbinding icon-view-get-cursor () boolean
975 (icon-view icon-view)
976 (path tree-path :out)
977 (cell cell-renderer :out))
979 (defbinding icon-view-get-dest-item-at-pos () boolean
980 (icon-view icon-view)
983 (tree-path tree-path :out)
984 (pos drop-position :out))
986 (defbinding icon-view-create-drag-icon () gdk:pixmap
987 (icon-view icon-view)
988 (tree-path tree-path))
990 (defbinding icon-view-scroll-to-path (icon-view tree-path &key row-align column-align) nil
991 (icon-view icon-view)
992 (tree-path tree-path)
993 ((or row-align column-align) boolean)
994 (row-align single-float)
995 (column-align single-float))
997 (defbinding icon-view-get-visible-range () boolean
998 (icon-view icon-view)
999 (start-path tree-path :out)
1000 (end-path tree-path :out))
1002 ;; (defbinding icon-view-enable-model-drag-source () nil
1003 ;; (icon-view icon-view)
1004 ;; (start-button-mask gdk:modifier-type)
1005 ;; (targets (vector target-entry))
1006 ;; ((length targets) unsigned-int)
1007 ;; (actions gdk:drag-action))
1009 ;; (defbinding icon-view-enable-model-drag-dest () nil
1010 ;; (icon-view icon-view)
1011 ;; (targets (vector target-entry))
1012 ;; ((length targets) unsigned-int)
1013 ;; (actions gdk:drag-action))
1015 (defbinding icon-view-unset-model-drag-source () nil
1016 (icon-view icon-view))
1018 (defbinding icon-view-unset-model-drag-dest () nil
1019 (icon-view icon-view)))