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.23 2006-08-15 10:13:42 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 (define-callback-marshal %cell-layout-data-callback nil
62 (cell-layout cell-renderer tree-model tree-iter))
64 (defbinding cell-layout-set-cell-data-func (cell-layout cell function) nil
65 (cell-layout cell-layout)
67 (%cell-layout-data-callback callback)
68 ((register-callback-function function) unsigned-int)
69 (user-data-destroy-callback callback))
71 (defbinding cell-layout-clear-attributes () nil
72 (cell-layout cell-layout)
78 (defmethod compute-signal-function ((gobject cell-renderer-toggle) (signal (eql 'toggled)) function object)
79 (declare (ignore gobject signal function object))
80 (let ((function (call-next-method)))
81 #'(lambda (object path)
82 (funcall function object (ensure-tree-path path)))))
87 (defmethod initialize-instance ((list-store list-store) &key column-types
88 column-names initial-content)
90 (%list-store-set-column-types list-store column-types)
93 (user-data list-store 'column-names)
94 (coerce column-names 'vector)))
97 with iter = (make-instance 'tree-iter)
98 for row in initial-content
99 do (list-store-append list-store row iter))))
101 (defgeneric column-setter-name (store))
103 (defmethod column-setter-name ((list-store list-store))
104 (declare (ignore list-store))
105 "gtk_list_store_set")
107 (defbinding %list-store-set-column-types () nil
108 (list-store list-store)
109 ((length columns) unsigned-int)
110 (columns (vector gtype)))
112 (defbinding %list-store-remove () boolean
113 (list-store list-store)
114 (tree-iter tree-iter))
116 (defun list-store-remove (store row)
119 (%list-store-remove store row))
121 (multiple-value-bind (valid iter) (tree-model-get-iter store row)
123 (%list-store-remove store iter)
124 (error "~A not poiniting to a valid iterator in ~A" row store))))
126 (let ((path (tree-row-reference-get-path row)))
128 (list-store-remove store path)
129 (error "~A not valid" row))))))
132 (defbinding %list-store-insert () nil
133 (list-store list-store)
134 (tree-iter tree-iter)
137 (defun list-store-insert
138 (store position &optional data (iter (make-instance 'tree-iter)))
139 (%list-store-insert store iter position)
140 (when data (%tree-model-set store iter data))
143 (defbinding %list-store-insert-before () nil
144 (list-store list-store)
145 (tree-iter tree-iter)
146 (sibling (or null tree-iter)))
148 (defun list-store-insert-before
149 (store sibling &optional data (iter (make-instance 'tree-iter)))
150 (%list-store-insert-before store iter sibling)
151 (when data (%tree-model-set store iter data))
154 (defbinding %list-store-insert-after
155 (list-store &optional sibling (tree-iter (make-instance 'tree-iter))) nil
156 (list-store list-store)
157 (tree-iter tree-iter)
158 (sibling (or null tree-iter)))
160 (defun list-store-insert-after
161 (store sibling &optional data (iter (make-instance 'tree-iter)))
162 (%list-store-insert-after store iter sibling)
163 (when data (%tree-model-set store iter data))
166 (defbinding %list-store-prepend () nil
167 (list-store list-store)
168 (tree-iter tree-iter))
170 (defun list-store-prepend
171 (store &optional data (iter (make-instance 'tree-iter)))
172 (%list-store-prepend store iter)
173 (when data (%tree-model-set store iter data))
176 (defbinding %list-store-append () nil
177 (list-store list-store)
178 (tree-iter tree-iter))
180 (defun list-store-append
181 (store &optional data (iter (make-instance 'tree-iter)))
182 (%list-store-append store iter)
183 (when data (%tree-model-set store iter data))
186 (defbinding list-store-clear () nil
187 (list-store list-store))
189 (defbinding list-store-reorder () nil
190 (list-store list-store)
191 (new-order (vector int)))
193 (defbinding list-store-swap () nil
194 (list-store list-store)
198 (defbinding list-store-move-before () nil
199 (list-store list-store)
201 (psoition (or null tree-iter)))
203 (defbinding list-store-move-after () nil
204 (list-store list-store)
206 (psoition tree-iter))
211 (defbinding %tree-path-free () nil
214 (defbinding %tree-path-get-indices () pointer
217 (defbinding %tree-path-get-depth () int
220 (defun %make-tree-path (path)
221 (let* ((c-vector (make-c-vector 'int (length path) :content path))
222 (pointer-offset (adjust-offset (size-of 'int) 'pointer))
223 (location (allocate-memory (+ pointer-offset (size-of 'pointer)))))
224 (funcall (writer-function 'int) (length path) location)
225 (funcall (writer-function 'pointer) c-vector location pointer-offset)
228 (defun %tree-path-to-vector (location)
229 (let ((indices (%tree-path-get-indices location))
230 (depth (%tree-path-get-depth location)))
231 (if (null-pointer-p indices)
233 (map-c-vector 'vector #'identity indices 'int depth))))
235 (defmacro %with-tree-path ((var path) &body body)
236 (let* ((pointer-offset (adjust-offset (size-of 'int) 'pointer))
237 (vector-offset (adjust-offset (+ pointer-offset (size-of 'pointer)) 'int)))
238 `(with-memory (,var (+ ,vector-offset (* ,(size-of 'int) (length ,path))))
239 (funcall (writer-function 'int) (length ,path) ,var)
240 (setf (ref-pointer ,var ,pointer-offset) (pointer+ ,var ,vector-offset))
241 (make-c-vector 'int (length ,path) :content ,path :location (pointer+ ,var ,vector-offset))
244 (eval-when (:compile-toplevel :load-toplevel :execute)
245 (define-type-method alien-type ((type tree-path))
246 (declare (ignore type))
247 (alien-type 'pointer))
249 (define-type-method size-of ((type tree-path) &key inlined)
250 (assert-not-inlined type inlined)
253 (define-type-method alien-arg-wrapper ((type tree-path) var path style form &optional copy-in-p)
254 (declare (ignore type))
256 ((and (in-arg-p style) copy-in-p)
257 `(with-pointer (,var (%make-tree-path ,path))
259 ((and (in-arg-p style) (not (out-arg-p style)))
260 `(%with-tree-path (,var ,path)
262 ((and (in-arg-p style) (out-arg-p style))
263 (let ((tree-path (make-symbol "SYMBOL")))
264 `(%with-tree-path (,tree-path ,path)
265 (with-pointer (,var ,tree-path)
267 ((and (out-arg-p style) (not (in-arg-p style)))
268 `(with-pointer (,var)
271 (define-type-method to-alien-form ((type tree-path) path &optional copy-p)
272 (declare (ignore type copy-p))
273 `(%make-tree-path ,path))
275 (define-type-method from-alien-form ((type tree-path) location &key (ref :free))
276 (declare (ignore type))
278 (%tree-path-to-vector ,location)
279 ,(when (eq ref :free)
280 `(%tree-path-free ,location)))))
282 (define-type-method to-alien-function ((type tree-path) &optional copy-p)
283 (declare (ignore type))
286 #'(lambda (tree-path location)
287 (declare (ignore tree-path))
288 (%tree-path-free location))))
290 (define-type-method from-alien-function ((type tree-path) &key (ref :free))
291 (declare (ignore type))
295 (%tree-path-to-vector location)
296 (%tree-path-free location)))
298 (%tree-path-to-vector location))))
300 (define-type-method writer-function ((type tree-path) &key temp inlined)
301 (declare (ignore temp))
302 (assert-not-inlined type inlined)
303 (let ((writer (writer-function 'pointer)))
304 #'(lambda (path location &optional (offset 0))
305 (funcall writer (%make-tree-path path) location offset))))
307 (define-type-method reader-function ((type tree-path) &key ref inlined)
308 (declare (ignore ref))
309 (assert-not-inlined type inlined)
310 #'(lambda (location &optional (offset 0))
311 (%tree-path-to-vector (ref-pointer location offset))))
313 (define-type-method destroy-function ((type tree-path) &key temp inlined)
314 (declare (ignore temp))
315 (assert-not-inlined type inlined)
316 #'(lambda (location &optional (offset 0))
317 (%tree-path-free (ref-pointer location offset))))
319 (defun ensure-tree-path (path)
321 (string (coerce (clg-utils:split-string path :delimiter #\:) 'vector))
325 (defbinding %tree-row-reference-new () pointer
329 (defmethod allocate-foreign ((reference tree-row-reference) &key model path)
330 (%tree-row-reference-new model path))
332 (defbinding tree-row-reference-get-path () tree-path
333 (reference tree-row-reference))
335 (defbinding (tree-row-reference-valid-p "gtk_tree_row_reference_valid") () boolean
336 (reference tree-row-reference))
339 (defbinding tree-model-get-column-type () gtype ;type-number
340 (tree-model tree-model)
343 (defbinding tree-model-get-iter
344 (model path &optional (iter (make-instance 'tree-iter))) boolean
346 (iter tree-iter :in/return)
349 (defbinding tree-model-get-path () tree-path
350 (tree-model tree-model)
353 (defbinding %tree-model-get-value () nil
354 (tree-model tree-model)
359 (defgeneric tree-model-value (model row column))
361 (defmethod tree-model-value ((model tree-model) row column)
362 (let ((index (column-index model column))
365 (tree-path (multiple-value-bind (valid iter)
366 (tree-model-get-iter model row)
369 (error "Invalid tree path: ~A" row)))))))
370 (with-gvalue (gvalue)
371 (%tree-model-get-value model iter index gvalue))))
373 (defbinding tree-model-iter-next () boolean
374 (tree-model tree-model)
375 (iter tree-iter :in/return))
377 (defbinding tree-model-iter-children
378 (tree-model parent &optional (iter (make-instance 'tree-iter))) boolean
379 (tree-model tree-model)
380 (iter tree-iter :in/return)
381 (parent (or null tree-iter)))
383 (defbinding (tree-model-iter-has-child-p "gtk_tree_model_iter_has_child")
385 (tree-model tree-model)
388 (defbinding tree-model-iter-n-children () int
389 (tree-model tree-model)
392 (defbinding tree-model-iter-nth-child
393 (tree-model parent n &optional (iter (make-instance 'tree-iter))) boolean
394 (tree-model tree-model)
395 (iter tree-iter :in/return)
396 (parent (or null tree-iter))
399 (defbinding tree-model-iter-parent
400 (tree-model child &optional (iter (make-instance 'tree-iter))) boolean
401 (tree-model tree-model)
402 (iter tree-iter :in/return)
405 (define-callback-marshal %tree-model-foreach-callback boolean
406 (tree-model tree-path tree-iter))
408 (defbinding %tree-model-foreach (tree-model callback-id) nil
409 (tree-model tree-model)
410 (%tree-model-foreach-callback callback)
411 (callback-id unsigned-int))
413 (defun tree-model-foreach (model function)
414 (with-callback-function (id function)
415 (%tree-model-foreach model id)))
417 (defbinding tree-model-row-changed () nil
418 (tree-model tree-model)
422 (defbinding tree-model-row-inserted () nil
423 (tree-model tree-model)
427 (defbinding tree-model-row-has-child-toggled () nil
428 (tree-model tree-model)
432 (defbinding tree-model-row-deleted () nil
433 (tree-model tree-model)
437 (defbinding tree-model-rows-reordered () nil
438 (tree-model tree-model)
444 (defun column-types (model columns)
445 (declare (ignore model))
448 (find-type-number (first (mklist column))))
451 (defun column-index (model column)
455 (symbol (position column (user-data model 'column-names)))
456 (string (position column (user-data model 'column-names)
458 (error "~A has no column ~S" model column)))
460 (defun column-name (model index)
461 (svref (user-data model 'column-names) index))
463 (defun tree-model-column-value-setter (model column)
465 (user-data model 'column-setters)
467 (user-data model 'column-setters)
468 (make-array (tree-model-n-columns model)
469 :initial-element nil)))))
470 (let ((index (column-index model column)))
472 (svref setters index)
474 (svref setters index)
476 (mkbinding (column-setter-name model)
477 nil (type-of model) 'tree-iter 'int
478 (tree-model-get-column-type model index)
480 #'(lambda (value iter)
481 (funcall setter model iter index value -1))))))))
483 (defun tree-model-row-setter (model)
485 (user-data model 'row-setter)
487 ;; This will create any missing column setter
489 for i from 0 below (tree-model-n-columns model)
490 do (tree-model-column-value-setter model i))
491 (let ((setters (user-data model 'column-setters)))
493 (user-data model 'row-setter)
495 (map nil #'(lambda (value setter)
496 (funcall setter value iter))
499 (defgeneric (setf tree-model-value) (value model row column))
501 (defmethod (setf tree-model-value) (value (model tree-model) row column)
502 (let ((iter (etypecase row
504 (tree-path (multiple-value-bind (valid iter)
505 (tree-model-get-iter model row)
508 (error "Invalid tree path: ~A" row)))))))
509 (funcall (tree-model-column-value-setter model column) value iter)
512 (defun (setf tree-model-row-data) (data model iter)
513 (funcall (tree-model-row-setter model) data iter)
516 (defun %tree-model-set (model iter data)
518 (vector (setf (tree-model-row-data model iter) data))
521 as (column value . rest) = data then rest
522 do (setf (tree-model-value model iter column) value)
528 (define-callback-marshal %tree-selection-callback boolean
529 (tree-selection tree-model tree-path (path-currently-selected boolean)))
531 (defbinding tree-selection-set-select-function (selection function) nil
532 (selection tree-selection)
533 (%tree-selection-callback callback)
534 ((register-callback-function function) unsigned-int)
535 (user-data-destroy-callback callback))
537 (defbinding tree-selection-get-selected
538 (selection &optional (iter (make-instance 'tree-iter))) boolean
539 (selection tree-selection)
541 (iter tree-iter :in/return))
543 (define-callback-marshal %tree-selection-foreach-callback nil (tree-model tree-path tree-iter))
545 (defbinding %tree-selection-selected-foreach (tree-selection callback-id) nil
546 (tree-selection tree-selection)
547 (%tree-selection-foreach-callback callback)
548 (callback-id unsigned-int))
550 (defun tree-selection-selected-foreach (selection function)
551 (with-callback-function (id function)
552 (%tree-selection-selected-foreach selection id)))
554 (defbinding tree-selection-get-selected-rows () (glist tree-path)
555 (tree-selection tree-selection)
558 (defbinding tree-selection-count-selected-rows () int
559 (tree-selection tree-selection))
561 (defbinding %tree-selection-select-path () nil
562 (tree-selection tree-selection)
563 (tree-path tree-path))
565 (defbinding %tree-selection-unselect-path () nil
566 (tree-selection tree-selection)
567 (tree-path tree-path))
569 (defbinding %tree-selection-path-is-selected () boolean
570 (tree-selection tree-selection)
571 (tree-path tree-path))
573 (defbinding %tree-selection-select-iter () nil
574 (tree-selection tree-selection)
575 (tree-path tree-path))
577 (defbinding %tree-selection-unselect-iter () nil
578 (tree-selection tree-selection)
579 (tree-path tree-path))
581 (defbinding %tree-selection-iter-is-selected () boolean
582 (tree-selection tree-selection)
583 (tree-path tree-path))
585 (defun tree-selection-select (selection row)
587 (tree-path (%tree-selection-select-path selection row))
588 (tree-iter (%tree-selection-select-iter selection row))))
590 (defun tree-selection-unselect (selection row)
592 (tree-path (%tree-selection-unselect-path selection row))
593 (tree-iter (%tree-selection-unselect-iter selection row))))
595 (defun tree-selection-is-selected-p (selection row)
597 (tree-path (%tree-selection-path-is-selected selection row))
598 (tree-iter (%tree-selection-iter-is-selected selection row))))
600 (defbinding tree-selection-select-all () nil
601 (tree-selection tree-selection))
603 (defbinding tree-selection-unselect-all () nil
604 (tree-selection tree-selection))
606 (defbinding tree-selection-select-range () nil
607 (tree-selection tree-selection)
611 (defbinding tree-selection-unselect-range () nil
612 (tree-selection tree-selection)
619 (eval-when (:compile-toplevel :load-toplevel :execute)
620 (define-enum-type sort-column (:default -1) (:unsorted -2))
621 (define-enum-type sort-order (:before -1) (:equal 0) (:after 1)))
624 (define-callback-marshal %tree-iter-compare-callback (or int sort-order)
625 (tree-model (a tree-iter) (b tree-iter)))
627 (defbinding tree-sortable-sort-column-changed () nil
628 (sortable tree-sortable))
630 (defbinding %tree-sortable-get-sort-column-id () boolean
631 (sortable tree-sortable)
633 (order sort-type :out))
635 (defun tree-sortable-get-sort-column (sortable)
636 (multiple-value-bind (special-p column order)
637 (%tree-sortable-get-sort-column-id sortable)
640 (int-to-sort-order column)
641 (column-name sortable column))
644 (defbinding (tree-sortable-set-sort-column
645 "gtk_tree_sortable_set_sort_column_id")
646 (sortable column order) nil
647 (sortable tree-sortable)
649 ((or integer sort-column) column)
650 (symbol (column-index sortable column)))
651 (or sort-column int))
654 (defbinding %tree-sortable-set-sort-func (sortable column function) nil
655 (sortable tree-sortable)
656 ((column-index sortable column) int)
657 (%tree-iter-compare-callback callback)
658 ((register-callback-function function) unsigned-int)
659 (user-data-destroy-callback callback))
661 (defbinding %tree-sortable-set-default-sort-func () nil
662 (sortable tree-sortable)
663 (compare-func (or null callback))
664 (callback-id unsigned-int)
665 (destroy-func (or null callback)))
667 (defun tree-sortable-set-sort-func (sortable column function)
668 "Sets the comparison function used when sorting to be FUNCTION. If
669 the current sort column of SORTABLE is the same as COLUMN,
670 then the model will sort using this function."
672 ((and (eq column :default) (not function))
673 (%tree-sortable-set-default-sort-func sortable nil 0 nil))
674 ((eq column :default)
675 (%tree-sortable-set-default-sort-func sortable
676 %tree-iter-compare-callback
677 (register-callback-function function)
678 user-data-destroy-callback))
679 ((%tree-sortable-set-sort-func sortable column function))))
681 (defbinding tree-sortable-has-default-sort-func-p () boolean
682 (sortable tree-sortable))
687 (defbinding %tree-store-set-column-types () nil
688 (tree-store tree-store)
689 ((length columns) unsigned-int)
690 (columns (vector gtype)))
692 (defmethod initialize-instance ((tree-store tree-store) &key column-types
695 (%tree-store-set-column-types tree-store column-types)
697 (setf (user-data tree-store 'column-names) column-names)))
699 (defmethod column-setter-name ((tree-store tree-store))
700 (declare (ignore tree-store))
701 "gtk_tree_store_set")
703 (defbinding tree-store-remove () boolean
704 (tree-store tree-store)
705 (tree-iter tree-iter))
707 (defbinding %tree-store-insert () nil
708 (tree-store tree-store)
709 (tree-iter tree-iter)
710 (parent (or null tree-iter))
713 (defun tree-store-insert
714 (store parent position &optional data (iter (make-instance 'tree-iter)))
715 (%tree-store-insert store iter parent position)
716 (when data (%tree-model-set store iter data))
719 (defbinding %tree-store-insert-before () nil
720 (tree-store tree-store)
721 (tree-iter tree-iter)
722 (parent (or null tree-iter))
723 (sibling (or null tree-iter)))
725 (defun tree-store-insert-before
726 (store parent sibling &optional data (iter (make-instance 'tree-iter)))
727 (%tree-store-insert-before store iter parent sibling)
728 (when data (%tree-model-set store iter data))
731 (defbinding %tree-store-insert-after () nil
732 (tree-store tree-store)
733 (tree-iter tree-iter)
734 (parent (or null tree-iter))
735 (sibling (or null tree-iter)))
737 (defun tree-store-insert-after
738 (store parent sibling &optional data (iter (make-instance 'tree-iter)))
739 (%tree-store-insert-after store iter parent sibling)
740 (when data (%tree-model-set store iter data))
743 (defbinding %tree-store-prepend () nil
744 (tree-store tree-store)
745 (tree-iter tree-iter)
746 (parent (or null tree-iter)))
748 (defun tree-store-prepend
749 (store parent &optional data (iter (make-instance 'tree-iter)))
750 (%tree-store-prepend store iter parent)
751 (when data (%tree-model-set store iter data))
754 (defbinding %tree-store-append () nil
755 (tree-store tree-store)
756 (tree-iter tree-iter)
757 (parent (or null tree-iter)))
759 (defun tree-store-append
760 (store parent &optional data (iter (make-instance 'tree-iter)))
761 (%tree-store-append store iter parent)
762 (when data (%tree-model-set store iter data))
765 (defbinding (tree-store-is-ancestor-p "gtk_tree_store_is_ancestor") () boolean
766 (tree-store tree-store)
767 (tree-iter tree-iter)
768 (descendant tree-iter))
770 (defbinding tree-store-iter-depth () int
771 (tree-store tree-store)
772 (tree-iter tree-iter))
774 (defbinding tree-store-clear () nil
775 (tree-store tree-store))
777 (defbinding tree-store-reorder () nil
778 (tree-store tree-store)
780 (new-order (vector int)))
782 (defbinding tree-store-swap () nil
783 (tree-store tree-store)
787 (defbinding tree-store-move-before () nil
788 (tree-store tree-store)
790 (psoition (or null tree-iter)))
793 (defbinding tree-store-move-after () nil
794 (tree-store tree-store)
796 (psoition tree-iter))
802 (defmethod initialize-instance ((tree-view tree-view) &rest initargs
804 (declare (ignore column))
806 (mapc #'(lambda (column)
807 (tree-view-append-column tree-view column))
808 (get-all initargs :column)))
811 (defbinding tree-view-columns-autosize () nil
812 (tree-view tree-view))
814 (defbinding tree-view-append-column () int
815 (tree-view tree-view)
816 (tree-view-column tree-view-column))
818 (defbinding tree-view-remove-column () int
819 (tree-view tree-view)
820 (tree-view-column tree-view-column))
822 (defbinding tree-view-insert-column (view column position) int
824 (column tree-view-column)
825 ((if (eq position :end) -1 position) int))
827 (defbinding tree-view-get-column () tree-view-column
828 (tree-view tree-view)
831 (defbinding tree-view-move-column-after () nil
832 (tree-view tree-view)
833 (column tree-view-column)
834 (base-column (or null tree-view-column)))
836 ;;(defbinding tree-view-set-column drag-function ...)
838 (defbinding tree-view-scroll-to-point () nil
839 (tree-view tree-view)
843 (defbinding tree-view-scroll-to-cell () nil
844 (tree-view tree-view)
845 (path (or null tree-path))
846 (column (or null tree-view-column))
848 (row-align single-float)
849 (col-align single-float))
851 (defbinding tree-view-set-cursor () nil
852 (tree-view tree-view)
854 (focus-column tree-view-column)
855 (start-editing boolean))
857 (defbinding tree-view-set-cursor-on-cell () nil
858 (tree-view tree-view)
860 (focus-column (or null tree-view-column))
861 (focus-cell (or null cell-renderer))
862 (start-editing boolean))
864 (defbinding tree-view-get-cursor () nil
865 (tree-view tree-view)
866 (path tree-path :out )
867 (focus-column tree-view-column :out))
869 (defbinding tree-view-row-activated () nil
870 (tree-view tree-view)
872 (column tree-view-column))
874 (defbinding tree-view-expand-all () nil
875 (tree-view tree-view))
877 (defbinding tree-view-collapse-all () nil
878 (tree-view tree-view))
880 (defbinding tree-view-expand-to-path () nil
881 (tree-view tree-view)
884 (defbinding tree-view-expand-row () nil
885 (tree-view tree-view)
889 (defbinding tree-view-collapse-row () nil
890 (tree-view tree-view)
893 (define-callback-marshal %tree-view-mapping-callback nil (tree-view tree-path))
895 (defbinding %tree-view-map-expanded-rows (tree-view callback-id) nil
896 (tree-view tree-view)
897 (%tree-view-mapping-callback callback)
898 (callback-id unsigned-int))
900 (defun map-expanded-rows (function tree-view)
901 (with-callback-function (id function)
902 (%tree-view-map-expanded-rows tree-view id)))
904 (defbinding (tree-view-row-expanded-p "gtk_tree_view_row_expanded") () boolean
905 (tree-view tree-view)
908 (defbinding tree-view-get-path-at-pos
909 (tree-view x y &optional (cell-x 0) (cell-y 0)) boolean
910 (tree-view tree-view)
913 (path tree-path :out)
914 (column tree-view-column :out)
918 (defbinding tree-view-get-cell-area () nil
919 (tree-view tree-view)
920 (path (or null tree-path))
921 (column (or null tree-view-column))
922 ((make-instance 'gdk:rectangle) gdk:rectangle :in/return))
924 (defbinding tree-view-get-background-area () nil
925 (tree-view tree-view)
926 (path (or null tree-path))
927 (column (or null tree-view-column))
928 ((make-instance 'gdk:rectangle) gdk:rectangle :in/return))
930 (defbinding tree-view-get-visible-rect () nil
931 (tree-view tree-view)
932 ((make-instance 'gdk:rectangle) gdk:rectangle :in/return))
934 ;; and many more functions which we'll add later
939 #?(pkg-exists-p "gtk+-2.0" :atleast-version "2.6.0")
941 (defbinding icon-view-get-path-at-pos () tree-path
942 (icon-view icon-view)
945 (define-callback-marshal %icon-view-foreach-callback nil (icon-view tree-path))
947 (defbinding %icon-view-selected-foreach (icon-view callback-id) tree-path
948 (icon-view icon-view)
949 (%icon-view-foreach-callback callback)
950 (callback-id unsigned-int))
952 (defun icon-view-foreach (icon-view function)
953 (with-callback-function (id function)
954 (%icon-view-selected-foreach icon-view id)))
956 (defbinding icon-view-select-path () nil
957 (icon-view icon-view)
960 (defbinding icon-view-unselect-path () nil
961 (icon-view icon-view)
964 (defbinding icon-view-path-is-selected-p () boolean
965 (icon-view icon-view)
968 (defbinding icon-view-get-selected-items () (glist tree-path)
969 (icon-view icon-view))
971 (defbinding icon-view-select-all () nil
972 (icon-view icon-view))
974 (defbinding icon-view-unselect-all () nil
975 (icon-view icon-view))
977 (defbinding icon-view-item-activated () nil
978 (icon-view icon-view)
981 (defbinding %icon-view-set-text-column (column icon-view) nil
982 (icon-view icon-view)
983 ((if (integerp column)
985 (column-index (icon-view-model icon-view) column)) int))
987 (defbinding %%icon-view-get-text-column () int
988 (icon-view icon-view))
990 (defun %icon-view-get-text-column (icon-view)
992 (icon-view-model icon-view)
993 (%%icon-view-get-text-column icon-view)))
995 (defun %icon-view-text-column-boundp (icon-view)
996 (not (eql (%%icon-view-get-text-column icon-view) -1)))
999 (defbinding %icon-view-set-markup-column (column icon-view) nil
1000 (icon-view icon-view)
1001 ((if (integerp column)
1003 (column-index (icon-view-model icon-view) column)) int))
1005 (defbinding %%icon-view-get-markup-column () int
1006 (icon-view icon-view))
1008 (defun %icon-view-get-markup-column (icon-view)
1010 (icon-view-model icon-view)
1011 (%%icon-view-get-markup-column icon-view)))
1013 (defun %icon-view-markup-column-boundp (icon-view)
1014 (not (eql (%%icon-view-get-markup-column icon-view) -1)))
1017 (defbinding %icon-view-set-pixbuf-column (column icon-view) nil
1018 (icon-view icon-view)
1019 ((if (integerp column)
1021 (column-index (icon-view-model icon-view) column)) int)))
1023 (defbinding %%icon-view-get-pixbuf-column () int
1024 (icon-view icon-view))
1026 (defun %icon-view-get-pixbuf-column (icon-view)
1028 (icon-view-model icon-view)
1029 (%%icon-view-get-pixbuf-column icon-view)))
1031 (defun %icon-view-pixbuf-column-boundp (icon-view)
1032 (not (eql (%%icon-view-get-pixbuf-column icon-view) -1)))
1035 #?(pkg-exists-p "gtk+-2.0" :atleast-version "2.8.0")
1037 (defbinding icon-view-get-item-at-pos () boolean
1038 (icon-view icon-view)
1041 (tree-path tree-path :out)
1042 (cell cell-renderer :out))
1044 (defbinding icon-view-set-cursor (icon-view path &key cell start-editing) nil
1045 (icon-view icon-view)
1047 (cell (or null cell-renderer))
1048 (start-editing boolean))
1050 (defbinding icon-view-get-cursor () boolean
1051 (icon-view icon-view)
1052 (path tree-path :out)
1053 (cell cell-renderer :out))
1055 (defbinding icon-view-get-dest-item-at-pos () boolean
1056 (icon-view icon-view)
1059 (tree-path tree-path :out)
1060 (pos drop-position :out))
1062 (defbinding icon-view-create-drag-icon () gdk:pixmap
1063 (icon-view icon-view)
1064 (tree-path tree-path))
1066 (defbinding icon-view-scroll-to-path (icon-view tree-path &key row-align column-align) nil
1067 (icon-view icon-view)
1068 (tree-path tree-path)
1069 ((or row-align column-align) boolean)
1070 (row-align single-float)
1071 (column-align single-float))
1073 (defbinding icon-view-get-visible-range () boolean
1074 (icon-view icon-view)
1075 (start-path tree-path :out)
1076 (end-path tree-path :out))
1078 ;; (defbinding icon-view-enable-model-drag-source () nil
1079 ;; (icon-view icon-view)
1080 ;; (start-button-mask gdk:modifier-type)
1081 ;; (targets (vector target-entry))
1082 ;; ((length targets) unsigned-int)
1083 ;; (actions gdk:drag-action))
1085 ;; (defbinding icon-view-enable-model-drag-dest () nil
1086 ;; (icon-view icon-view)
1087 ;; (targets (vector target-entry))
1088 ;; ((length targets) unsigned-int)
1089 ;; (actions gdk:drag-action))
1091 (defbinding icon-view-unset-model-drag-source () nil
1092 (icon-view icon-view))
1094 (defbinding icon-view-unset-model-drag-dest () nil
1095 (icon-view icon-view)))