chiark / gitweb /
Callback parameters to CREATE-ACTION and CREATE-TOGGLE-ACTION may now be lists
[clg] / gtk / gtktree.lisp
1 ;; Common Lisp bindings for GTK+ v2.0
2 ;; Copyright (C) 1999-2001 Espen S. Johnsen <esj@stud.cs.uit.no>
3 ;;
4 ;; This library is free software; you can redistribute it and/or
5 ;; modify it under the terms of the GNU Lesser General Public
6 ;; License as published by the Free Software Foundation; either
7 ;; version 2 of the License, or (at your option) any later version.
8 ;;
9 ;; This library is distributed in the hope that it will be useful,
10 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
11 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 ;; Lesser General Public License for more details.
13 ;;
14 ;; You should have received a copy of the GNU Lesser General Public
15 ;; License along with this library; if not, write to the Free Software
16 ;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
18 ;; $Id: gtktree.lisp,v 1.3 2004-11-21 17:57:56 espen Exp $
19
20
21 (in-package "GTK")
22
23
24 ;;;; Cell Layout
25
26 (defbinding cell-layout-pack-start () nil
27   (cell-layout cell-layout)
28   (cell cell-renderer)
29   (expand boolean))
30
31 (defbinding cell-layout-pack-end () nil
32   (cell-layout cell-layout)
33   (cell cell-renderer)
34   (expand boolean))
35
36 (defun cell-layout-pack (layout cell &key end expand)
37   (if end
38       (cell-layout-pack-end layout cell expand)
39     (cell-layout-pack-start layout cell expand)))
40
41
42 (defbinding cell-layout-reorder () nil
43   (cell-layout cell-layout)
44   (cell cell-renderer)
45   (position int))
46
47 (defbinding cell-layout-clear () nil
48   (cell-layout cell-layout))
49
50 (defbinding cell-layout-add-attribute (cell-layout cell attribute column) nil
51   (cell-layout cell-layout)
52   (cell cell-renderer)
53   ((string-downcase attribute) string)
54   (column int))
55
56 (def-callback-marshal %cell-layout-data-func 
57     (nil cell-layout cell-renderer tree-model (copy-of tree-iter)))
58
59 (defbinding cell-layout-set-cell-data-func (cell-layout cell function) nil
60   (cell-layout cell-layout)
61   (cell cell-renderer)
62   ((callback %cell-layout-data-func) pointer)
63   ((register-callback-function function) unsigned-int)
64   ((callback %destroy-user-data) pointer))
65
66 (defbinding cell-layout-clear-attributes () nil
67   (cell-layout cell-layout)
68   (cell cell-renderer))
69
70
71
72 ;;;; List Store
73
74 (defmethod initialize-instance ((list-store list-store) &key column-types
75                                 column-names initial-content)
76   (call-next-method)
77   (%list-store-set-column-types list-store column-types)
78   (when column-names
79     (setf (object-data list-store 'column-names) column-names))
80   (when initial-content
81     (loop
82      with iter = (make-instance 'tree-iter)
83      for row in initial-content
84      do (list-store-append list-store row iter))))
85
86
87 (defmethod column-setter-name ((list-store list-store))
88   (declare (ignore list-store))
89   "gtk_list_store_set")
90
91 (defbinding %list-store-set-column-types () nil
92   (list-store list-store)
93   ((length columns) unsigned-int)
94   (columns (vector gtype)))
95
96 (defbinding %list-store-remove () boolean
97   (list-store list-store)
98   (tree-iter tree-iter))
99
100 (defun list-store-remove (store row)
101   (etypecase row
102     (tree-iter 
103      (%list-store-remove store row))
104     (tree-path 
105      (multiple-value-bind (valid iter) (tree-model-get-iter store row)
106        (if valid
107            (%list-store-remove store iter)
108            (error "~A not poiniting to av valid iterator in ~A" row store))))
109     (tree-row-reference 
110      (let ((path (tree-row-reference-get-path row)))
111        (if path
112            (list-store-remove store path)
113          (error "~A not valid" row))))))
114
115
116 (defbinding %list-store-insert () nil
117   (list-store list-store)
118   (tree-iter tree-iter)
119   (position int))
120
121 (defun list-store-insert
122     (store position &optional data (iter (make-instance 'tree-iter)))
123   (%list-store-insert store iter position)
124   (when data (%tree-model-set store iter data))
125   iter)
126
127 (defbinding %list-store-insert-before () nil
128   (list-store list-store)
129   (tree-iter tree-iter)
130   (sibling (or null tree-iter)))
131
132 (defun list-store-insert-before
133     (store sibling &optional data (iter (make-instance 'tree-iter)))
134   (%list-store-insert-before store iter sibling)
135   (when data (%tree-model-set store iter data))
136   iter)
137
138 (defbinding %list-store-insert-after 
139     (list-store &optional sibling (tree-iter (make-instance 'tree-iter))) nil
140   (list-store list-store)
141   (tree-iter tree-iter)
142   (sibling (or null tree-iter)))
143
144 (defun list-store-insert-after
145     (store sibling &optional data (iter (make-instance 'tree-iter)))
146   (%list-store-insert-after store iter sibling)
147   (when data (%tree-model-set store iter data))
148   iter)
149
150 (defbinding %list-store-prepend () nil
151   (list-store list-store)
152   (tree-iter tree-iter))
153
154 (defun list-store-prepend 
155     (store &optional data (iter (make-instance 'tree-iter)))
156   (%list-store-prepend store iter)
157   (when data (%tree-model-set store iter data))
158   iter)
159
160 (defbinding %list-store-append () nil
161   (list-store list-store)
162   (tree-iter tree-iter))
163
164 (defun list-store-append 
165     (store &optional data (iter (make-instance 'tree-iter)))
166   (%list-store-append store iter)
167   (when data (%tree-model-set store iter data))
168   iter)
169
170 (defbinding list-store-clear () nil
171   (list-store list-store))
172
173 (defbinding list-store-reorder () nil
174   (list-store list-store)
175   (new-order (vector int)))
176
177 (defbinding list-store-swap () nil
178   (list-store list-store)
179   (a tree-iter)
180   (b tree-iter))
181
182 (defbinding list-store-move-before () nil
183   (list-store list-store)
184   (iter tree-iter)
185   (psoition (or null tree-iter)))
186
187 (defbinding list-store-move-after () nil
188   (list-store list-store)
189   (iter tree-iter)
190   (psoition tree-iter))
191
192
193 ;;; Tree Model
194
195 (defbinding %tree-path-free () nil
196   (location pointer))
197
198 (defbinding %tree-path-get-indices () pointer
199   (location pointer))
200
201 (defbinding %tree-path-get-depth () int
202   (location pointer))
203
204 (defun %make-tree-path (path)
205   (let ((c-vector (make-c-vector 'int (length path) path))
206         (location (allocate-memory (+ (size-of 'int) (size-of 'pointer)))))
207     (funcall (writer-function 'int) (length path) location)
208     (funcall (writer-function 'pointer) c-vector location (size-of 'int))
209     location))
210
211 (defun %tree-path-to-vector (location)
212   (let ((indices (%tree-path-get-indices location))
213         (depth (%tree-path-get-depth location)))
214     (if (null-pointer-p indices)
215         #()
216       (map-c-vector 'vector #'identity indices 'int depth))))
217
218 (eval-when (:compile-toplevel :load-toplevel :execute)
219   (defmethod alien-type ((type (eql 'tree-path)) &rest args)
220     (declare (ignore type args))
221     (alien-type 'pointer))
222   
223   (defmethod size-of ((type (eql 'tree-path)) &rest args)
224     (declare (ignore type args))
225     (size-of 'pointer))
226   
227   (defmethod to-alien-form (path (type (eql 'tree-path)) &rest args)
228     (declare (ignore type args))
229     `(%make-tree-path ,path))
230   
231   (defmethod from-alien-form (location (type (eql 'tree-path)) &rest args)
232     (declare (ignore type args))
233     `(let ((location ,location))
234        (prog1
235            (%tree-path-to-vector location)
236          (%tree-path-free location))))
237   
238   (defmethod copy-from-alien-form (location (type (eql 'tree-path)) &rest args)
239     (declare (ignore type args))
240     `(%tree-path-to-vector ,location))
241   
242   (defmethod cleanup-form (location (type (eql 'tree-path)) &rest args)
243     (declare (ignore type args))
244     `(%tree-path-free ,location)))
245
246 (defmethod to-alien-function ((type (eql 'tree-path)) &rest args)
247   (declare (ignore type args))
248   #'%make-tree-path)
249   
250 (defmethod from-alien-function ((type (eql 'tree-path)) &rest args)
251   (declare (ignore type args))
252   #'(lambda (location)
253       (prog1
254           (%tree-path-to-vector location)
255         (%tree-path-free location))))
256
257 (defmethod copy-from-alien-function ((type (eql 'tree-path)) &rest args)
258   (declare (ignore type args))
259   #'%tree-path-to-vector)
260   
261 (defmethod cleanup-function ((type (eql 'tree-path)) &rest args)
262   (declare (ignore type args))
263   #'%tree-path-free)
264
265 (defmethod writer-function ((type (eql 'tree-path)) &rest args)
266   (declare (ignore type args))
267   (let ((writer (writer-function 'pointer)))
268     #'(lambda (path location &optional (offset 0))
269         (funcall writer (%make-tree-path path) location offset))))
270
271 (defmethod reader-function ((type (eql 'tree-path)) &rest args)
272   (declare (ignore type args))
273   (let ((reader (reader-function 'pointer)))
274     #'(lambda (location &optional (offset 0))
275         (%tree-path-to-vector (funcall reader location offset)))))
276
277
278 (defbinding %tree-row-reference-new () pointer
279   (model tree-model)
280   (path tree-path))
281
282 (defmethod initialize-instance ((reference tree-row-reference) &key model path)
283   (setf
284    (slot-value reference 'location)
285    (%tree-row-reference-new model path))
286   (call-next-method))
287
288 (defbinding tree-row-reference-get-path () tree-path
289   (reference tree-row-reference))
290
291 (defbinding (tree-row-reference-valid-p "gtk_tree_row_reference_valid") () boolean
292   (reference tree-row-reference))
293
294
295 (defbinding tree-model-get-column-type () type-number
296   (tree-model tree-model)
297   (index int))
298
299 (defbinding tree-model-get-iter 
300     (model path &optional (iter (make-instance 'tree-iter))) boolean
301   (model tree-model)
302   (iter tree-iter :return)
303   (path tree-path))
304  
305 (defbinding tree-model-get-path () tree-path
306   (tree-model tree-model)
307   (iter tree-iter))
308
309 (defbinding %tree-model-get-value () nil
310   (tree-model tree-model)
311   (iter tree-iter)
312   (column int)
313   (gvalue gvalue))
314
315 (defun tree-model-get-column-value (model iter column)
316   (let ((index (column-index model column)))
317     (with-gvalue (gvalue (tree-model-get-column-type model index))
318       (%tree-model-get-value model iter index gvalue))))
319
320 (defbinding tree-model-iter-next () boolean
321   (tree-model tree-model)
322   (iter tree-iter :return))
323
324 (defbinding tree-model-iter-children 
325     (tree-model parent &optional (iter (make-instance 'tree-iter))) boolean
326   (tree-model tree-model)
327   (iter tree-iter :return)
328   (parent (or null tree-iter)))
329
330 (defbinding (tree-model-iter-has-child-p "gtk_tree_model_iter_has_child") 
331     () boolean
332   (tree-model tree-model)
333   (iter tree-iter))
334
335 (defbinding tree-model-iter-n-children () int
336   (tree-model tree-model)
337   (iter tree-iter))
338
339 (defbinding tree-model-iter-nth-child
340     (tree-model parent &optional (iter (make-instance 'tree-iter))) boolean
341   (tree-model tree-model)
342   (iter tree-iter :return)
343   (parent (or null tree-iter))
344   (n int))
345
346 (defbinding tree-model-iter-parent
347     (tree-model child &optional (iter (make-instance 'tree-iter))) boolean
348   (tree-model tree-model)
349   (iter tree-iter :return)
350   (child tree-iter))
351
352 (def-callback-marshal %tree-model-foreach-func 
353   (boolean tree-model (path (copy-of tree-path)) (iter (copy-of tree-iter))))
354
355 (defbinding %tree-model-foreach () nil
356   (tree-model tree-model)
357   ((callback %tree-model-foreach-func) pointer)
358   (callback-id unsigned-int))
359
360 (defun tree-model-foreach (model function)
361   (with-callback-function (id function)
362     (%tree-model-foreach model id)))
363
364 (defbinding tree-model-row-changed () nil
365   (tree-model tree-model)
366   (path tree-path)
367   (iter tree-iter))
368
369 (defbinding tree-model-row-inserted () nil
370   (tree-model tree-model)
371   (path tree-path)
372   (iter tree-iter))
373
374 (defbinding tree-model-row-has-child-toggled () nil
375   (tree-model tree-model)
376   (path tree-path)
377   (iter tree-iter))
378
379 (defbinding tree-model-row-deleted () nil
380   (tree-model tree-model)
381   (path tree-path)
382   (iter tree-iter))
383
384 (defbinding tree-model-rows-reordered () nil
385   (tree-model tree-model)
386   (path tree-path)
387   (iter tree-iter)
388   (new-order int))
389
390
391 (defun column-types (model columns)
392   (map 'vector 
393        #'(lambda (column)
394            (find-type-number (first (mklist column))))
395        columns))
396                
397 (defun column-index (model column)
398   (or
399    (etypecase column
400      (number column)
401      (symbol (position column (object-data model 'column-names)))
402      (string (position column (object-data model 'column-names)
403                    :test #'string=)))
404    (error "~A has no column ~S" model column)))
405
406 (defun tree-model-column-value-setter (model column)
407   (let ((setters (or
408                   (object-data model 'column-setters)
409                   (setf 
410                    (object-data model 'column-setters)
411                    (make-array (tree-model-n-columns model) 
412                     :initial-element nil)))))
413     (let ((index (column-index model column)))
414     (or
415      (svref setters index)
416      (setf 
417       (svref setters index)
418       (let ((setter 
419              (mkbinding (column-setter-name model)
420               nil (type-of model) 'tree-iter 'int
421               (type-from-number (tree-model-get-column-type model index))
422               'int)))
423         #'(lambda (value iter)
424             (funcall setter model iter index value -1))))))))
425
426 (defun tree-model-row-setter (model)
427   (or 
428    (object-data model 'row-setter)
429    (progn
430      ;; This will create any missing column setter
431      (loop 
432       for i from 0 below (tree-model-n-columns model)
433       do (tree-model-column-value-setter model i))
434      (let ((setters (object-data model 'column-setters)))
435        (setf    
436         (object-data model 'row-setter)
437         #'(lambda (row iter)
438             (map nil #'(lambda (value setter)
439                          (funcall setter value iter))
440                  row setters)))))))
441
442 (defun (setf tree-model-column-value) (value model iter column)
443   (funcall (tree-model-column-value-setter model column) value iter)
444   value)
445
446 (defun (setf tree-model-row-data) (data model iter)
447   (funcall (tree-model-row-setter model) data iter)
448   data)
449
450 (defun %tree-model-set (model iter data)
451   (etypecase data
452     (vector (setf (tree-model-row-data model iter) data))
453     (cons 
454      (loop
455       as (column value . rest) = data then rest
456       do (setf (tree-model-column-value model iter column) value)
457       while rest))))
458
459
460 ;;; Tree Selection
461
462 (def-callback-marshal %tree-selection-func (boolean tree-selection tree-model (path (copy-of tree-path)) (path-currently-selected boolean)))
463
464 (defbinding tree-selection-set-select-function (selection function) nil
465   (selection tree-selection)
466   ((callback %tree-selection-func) pointer)
467   ((register-callback-function function) unsigned-int)
468   ((callback %destroy-user-data) pointer))
469
470 (defbinding tree-selection-get-selected 
471     (selection &optional (iter (make-instance 'tree-iter))) boolean
472   (selection tree-selection)
473   (nil null) 
474   (iter tree-iter :return))
475
476 (def-callback-marshal %tree-selection-foreach-func (nil tree-model (path (copy-of tree-path)) (iter (copy-of tree-iter))))
477
478 (defbinding %tree-selection-selected-foreach () nil
479   (tree-selection tree-selection)
480   ((callback %tree-selection-foreach-func) pointer)
481   (callback-id unsigned-int))
482
483 (defun tree-selection-selected-foreach (selection function)
484   (with-callback-function (id function)
485     (%tree-selection-selected-foreach selection id)))
486
487 (defbinding tree-selection-get-selected-rows () (glist tree-path)
488   (tree-selection tree-selection)
489   (nil null))
490
491 (defbinding tree-selection-count-selected-rows () int
492   (tree-selection tree-selection))
493
494 (defbinding %tree-selection-select-path () nil
495   (tree-selection tree-selection)
496   (tree-path tree-path))
497
498 (defbinding %tree-selection-unselect-path () nil
499   (tree-selection tree-selection)
500   (tree-path tree-path))
501
502 (defbinding %tree-selection-path-is-selected () boolean
503   (tree-selection tree-selection)
504   (tree-path tree-path))
505
506 (defbinding %tree-selection-select-iter () nil
507   (tree-selection tree-selection)
508   (tree-path tree-path))
509
510 (defbinding %tree-selection-unselect-iter () nil
511   (tree-selection tree-selection)
512   (tree-path tree-path))
513
514 (defbinding %tree-selection-iter-is-selected () boolean
515   (tree-selection tree-selection)
516   (tree-path tree-path))
517
518 (defun tree-selection-select (selection row)
519   (etypecase row
520     (tree-path (%tree-selection-select-path selection row))
521     (tree-iter (%tree-selection-select-iter selection row))))
522
523 (defun tree-selection-unselect (selection row)
524   (etypecase row
525     (tree-path (%tree-selection-unselect-path selection row))
526     (tree-iter (%tree-selection-unselect-iter selection row))))
527
528 (defun tree-selection-is-selected-p (selection row)
529   (etypecase row
530     (tree-path (%tree-selection-path-is-selected selection row))
531     (tree-iter (%tree-selection-iter-is-selected selection row))))
532
533 (defbinding tree-selection-select-all () nil
534   (tree-selection tree-selection))
535
536 (defbinding tree-selection-unselect-all () nil
537   (tree-selection tree-selection))
538
539 (defbinding tree-selection-select-range () nil
540   (tree-selection tree-selection)
541   (start tree-path)
542   (end tree-path))
543
544 (defbinding tree-selection-unselect-range () nil
545   (tree-selection tree-selection)
546   (start tree-path)
547   (end tree-path))
548
549
550
551 ;;; Tree Store
552
553 (defbinding %tree-store-set-column-types () nil
554   (tree-store tree-store)
555   ((length columns) unsigned-int)
556   (columns (vector gtype)))
557
558 (defmethod initialize-instance ((tree-store tree-store) &key column-types
559                                 column-names)
560   (call-next-method)
561   (%tree-store-set-column-types tree-store column-types)
562   (when column-names
563     (setf (object-data tree-store 'column-names) column-names)))
564
565 (defmethod column-setter-name ((tree-store tree-store))
566   (declare (ignore tree-store))
567   "gtk_tree_store_set")
568
569 (defbinding tree-store-remove () boolean
570   (tree-store tree-store)
571   (tree-iter tree-iter))
572
573 (defbinding %tree-store-insert () nil
574   (tree-store tree-store)
575   (tree-iter tree-iter)
576   (parent (or null tree-iter))
577   (position int))
578
579 (defun tree-store-insert 
580     (store parent position &optional data (iter (make-instance 'tree-iter)))
581   (%tree-store-insert store iter parent position)
582   (when data (%tree-model-set store iter data))
583   iter)
584
585 (defbinding %tree-store-insert-before () nil
586   (tree-store tree-store)
587   (tree-iter tree-iter)
588   (parent (or null tree-iter))
589   (sibling (or null tree-iter)))
590
591 (defun tree-store-insert-after 
592     (store parent sibling &optional data (iter (make-instance 'tree-iter)))
593   (%tree-store-insert-before store iter parent sibling)
594   (when data (%tree-model-set store iter data))
595   iter)
596
597 (defbinding %tree-store-insert-after () nil
598   (tree-store tree-store)
599   (tree-iter tree-iter)
600   (parent (or null tree-iter))
601   (sibling (or null tree-iter)))
602
603 (defun tree-store-insert-after 
604     (store parent sibling &optional data (iter (make-instance 'tree-iter)))
605   (%tree-store-insert-after store iter parent sibling)
606   (when data (%tree-model-set store iter data))
607   iter)
608
609 (defbinding %tree-store-prepend () nil
610   (tree-store tree-store)
611   (tree-iter tree-iter)
612   (parent (or null tree-iter)))
613
614 (defun tree-store-prepend 
615     (store parent &optional data (iter (make-instance 'tree-iter)))
616   (%tree-store-prepend store iter parent)
617   (when data (%tree-model-set store iter data))
618   iter)
619
620 (defbinding %tree-store-append () nil
621   (tree-store tree-store)
622   (tree-iter tree-iter)
623   (parent (or null tree-iter)))
624
625 (defun tree-store-append 
626     (store parent &optional data (iter (make-instance 'tree-iter)))
627   (%tree-store-append store iter parent)
628   (when data (%tree-model-set store iter data))
629   iter)
630
631 (defbinding (tree-store-is-ancestor-p "gtk_tree_store_is_ancestor") () boolean
632   (tree-store tree-store)
633   (tree-iter tree-iter)
634   (descendant tree-iter))
635
636 (defbinding tree-store-iter-depth () int
637   (tree-store tree-store)
638   (tree-iter tree-iter))
639
640 (defbinding tree-store-clear () nil
641   (tree-store tree-store))
642
643 (defbinding tree-store-reorder () nil
644   (tree-store tree-store)
645   (parent tree-iter)
646   (new-order (vector int)))
647
648 (defbinding tree-store-swap () nil
649   (tree-store tree-store)
650   (a tree-iter)
651   (b tree-iter))
652
653 (defbinding tree-store-move-before () nil
654   (tree-store tree-store)
655   (iter tree-iter)
656   (psoition (or null tree-iter)))
657
658
659 (defbinding tree-store-move-after () nil
660   (tree-store tree-store)
661   (iter tree-iter)
662   (psoition tree-iter))
663
664
665
666 ;;; Tree View
667
668 (defmethod initialize-instance ((tree-view tree-view) &rest initargs 
669                                 &key column)
670   (call-next-method)
671   (mapc #'(lambda (column)
672             (tree-view-append-column tree-view column))
673         (get-all initargs :column)))
674
675
676 (defbinding tree-view-columns-autosize () nil
677   (tree-view tree-view))
678
679 (defbinding tree-view-append-column () int
680   (tree-view tree-view)
681   (tree-view-column tree-view-column))
682
683 (defbinding tree-view-remove-column () int
684   (tree-view tree-view)
685   (tree-view-column tree-view-column))
686
687 (defbinding tree-view-insert-column (view columnd position) int
688   (view tree-view)
689   (column tree-view-column)
690   ((if (eq position :end) -1 position) int))
691
692 (defbinding tree-view-get-column () tree-view-column
693   (tree-view tree-view)
694   (position int))
695
696 (defbinding tree-view-move-column-after () nil
697   (tree-view tree-view)
698   (column tree-view-column)
699   (base-column (or null tree-view-column)))
700
701 ;;(defbinding tree-view-set-column drag-function ...)
702
703 (defbinding tree-view-scroll-to-point () nil
704   (tree-view tree-view)
705   (tree-x int)
706   (tree-y int))
707
708 (defbinding tree-view-scroll-to-cell () nil
709   (tree-view tree-view)
710   (path (or null tree-path))
711   (column (or null tree-view-column))
712   (use-align boolean)
713   (row-align single-float)
714   (col-align single-float))
715
716 (defbinding tree-view-set-cursor () nil
717   (tree-view tree-view)
718   (path tree-path)
719   (focus-column tree-view-column)
720   (start-editing boolean))
721
722 (defbinding tree-view-set-cursor-on-cell () nil
723   (tree-view tree-view)
724   (path tree-path)
725   (focus-column (or null tree-view-column))
726   (focus-cell (or null cell-renderer))
727   (start-editing boolean))
728
729 (defbinding tree-view-get-cursor () nil
730   (tree-view tree-view)
731   (path tree-path :out )
732   (focus-column tree-view-column :out))
733
734 (defbinding tree-view-row-activated () nil
735   (tree-view tree-view)
736   (path tree-path )
737   (column tree-view-column))
738
739 (defbinding tree-view-expand-all () nil
740   (tree-view tree-view))
741
742 (defbinding tree-view-collapse-all () nil
743   (tree-view tree-view))
744
745 (defbinding tree-view-expand-to-path () nil
746   (tree-view tree-view)
747   (path tree-path))
748
749 (defbinding tree-view-expand-row () nil
750   (tree-view tree-view)
751   (path tree-path)
752   (open-all boolean))
753
754 (defbinding tree-view-collapse-row () nil
755   (tree-view tree-view)
756   (path tree-path))
757
758 (def-callback-marshal %tree-view-mapping-func (nil tree-view (path (copy-of tree-path))))
759
760 (defbinding %tree-view-map-expanded-rows () nil
761   (tree-view tree-view)
762   ((callback %tree-view-mapping-func) pointer)
763   (callback-id unsigned-int))
764
765 (defun map-expanded-rows (function tree-view)
766   (with-callback-function (id function)
767     (%tree-view-map-expanded-rows tree-view id)))
768
769 (defbinding (tree-view-row-expanded-p "gtk_tree_view_row_expanded") () boolean
770   (tree-view tree-view)
771   (path tree-path))
772
773 (defbinding tree-view-get-path-at-pos 
774     (tree-view x y &optional (cell-x 0) (cell-y 0)) boolean
775   (tree-view tree-view)
776   (x int)
777   (y int)
778   (path tree-path :out)
779   (column tree-view-column :out)
780   (cell-x int)
781   (cell-y int))
782
783 (defbinding tree-view-get-cell-area () nil
784   (tree-view tree-view)
785   (path (or null tree-path))
786   (column (or null tree-view-column))
787   ((make-instance 'gdk:rectangle) gdk:rectangle :return))
788
789 (defbinding tree-view-get-background-area () nil
790   (tree-view tree-view)
791   (path (or null tree-path))
792   (column (or null tree-view-column))
793   ((make-instance 'gdk:rectangle) gdk:rectangle :return))
794
795 (defbinding tree-view-get-visible-rect () nil
796   (tree-view tree-view)
797   ((make-instance 'gdk:rectangle) gdk:rectangle :return))
798
799 ;; and many more functions which we'll add later
800
801
802 ;;; Tree View Column
803