chiark / gitweb /
Added selection in list and tree widgets
[clg] / gtk / gtktree.lisp
CommitLineData
167450a3 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
f4175703 18;; $Id: gtktree.lisp,v 1.3 2004-11-21 17:57:56 espen Exp $
167450a3 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
2a8752b0 41
167450a3 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
f4175703 57 (nil cell-layout cell-renderer tree-model (copy-of tree-iter)))
167450a3 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
2a8752b0 74(defmethod initialize-instance ((list-store list-store) &key column-types
75 column-names initial-content)
167450a3 76 (call-next-method)
2a8752b0 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))))
167450a3 85
86
2a8752b0 87(defmethod column-setter-name ((list-store list-store))
88 (declare (ignore list-store))
89 "gtk_list_store_set")
167450a3 90
2a8752b0 91(defbinding %list-store-set-column-types () nil
167450a3 92 (list-store list-store)
2a8752b0 93 ((length columns) unsigned-int)
94 (columns (vector gtype)))
167450a3 95
f4175703 96(defbinding %list-store-remove () boolean
167450a3 97 (list-store list-store)
98 (tree-iter tree-iter))
99
f4175703 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
2a8752b0 116(defbinding %list-store-insert () nil
167450a3 117 (list-store list-store)
2a8752b0 118 (tree-iter tree-iter)
167450a3 119 (position int))
120
2a8752b0 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
167450a3 128 (list-store list-store)
2a8752b0 129 (tree-iter tree-iter)
167450a3 130 (sibling (or null tree-iter)))
131
2a8752b0 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
167450a3 140 (list-store list-store)
2a8752b0 141 (tree-iter tree-iter)
167450a3 142 (sibling (or null tree-iter)))
143
2a8752b0 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
167450a3 151 (list-store list-store)
2a8752b0 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)
167450a3 159
2a8752b0 160(defbinding %list-store-append () nil
167450a3 161 (list-store list-store)
2a8752b0 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)
167450a3 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
167450a3 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
2a8752b0 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
f4175703 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))))
2a8752b0 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
2a8752b0 231 (defmethod from-alien-form (location (type (eql 'tree-path)) &rest args)
232 (declare (ignore type args))
f4175703 233 `(let ((location ,location))
234 (prog1
235 (%tree-path-to-vector location)
236 (%tree-path-free location))))
2a8752b0 237
f4175703 238 (defmethod copy-from-alien-form (location (type (eql 'tree-path)) &rest args)
2a8752b0 239 (declare (ignore type args))
f4175703 240 `(%tree-path-to-vector ,location))
2a8752b0 241
242 (defmethod cleanup-form (location (type (eql 'tree-path)) &rest args)
243 (declare (ignore type args))
f4175703 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)
2a8752b0 249
f4175703 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)))))
2a8752b0 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)
2a8752b0 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
2a8752b0 352(def-callback-marshal %tree-model-foreach-func
f4175703 353 (boolean tree-model (path (copy-of tree-path)) (iter (copy-of tree-iter))))
2a8752b0 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))))
167450a3 458
459
f4175703 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
167450a3 551;;; Tree Store
552
553(defbinding %tree-store-set-column-types () nil
554 (tree-store tree-store)
2a8752b0 555 ((length columns) unsigned-int)
556 (columns (vector gtype)))
167450a3 557
2a8752b0 558(defmethod initialize-instance ((tree-store tree-store) &key column-types
559 column-names)
167450a3 560 (call-next-method)
2a8752b0 561 (%tree-store-set-column-types tree-store column-types)
562 (when column-names
563 (setf (object-data tree-store 'column-names) column-names)))
167450a3 564
2a8752b0 565(defmethod column-setter-name ((tree-store tree-store))
566 (declare (ignore tree-store))
567 "gtk_tree_store_set")
167450a3 568
569(defbinding tree-store-remove () boolean
570 (tree-store tree-store)
571 (tree-iter tree-iter))
572
2a8752b0 573(defbinding %tree-store-insert () nil
167450a3 574 (tree-store tree-store)
2a8752b0 575 (tree-iter tree-iter)
167450a3 576 (parent (or null tree-iter))
577 (position int))
578
2a8752b0 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
167450a3 586 (tree-store tree-store)
2a8752b0 587 (tree-iter tree-iter)
167450a3 588 (parent (or null tree-iter))
589 (sibling (or null tree-iter)))
590
2a8752b0 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
167450a3 598 (tree-store tree-store)
2a8752b0 599 (tree-iter tree-iter)
167450a3 600 (parent (or null tree-iter))
601 (sibling (or null tree-iter)))
602
2a8752b0 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
167450a3 610 (tree-store tree-store)
2a8752b0 611 (tree-iter tree-iter)
167450a3 612 (parent (or null tree-iter)))
613
2a8752b0 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
167450a3 621 (tree-store tree-store)
2a8752b0 622 (tree-iter tree-iter)
167450a3 623 (parent (or null tree-iter)))
624
2a8752b0 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
167450a3 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
f4175703 668(defmethod initialize-instance ((tree-view tree-view) &rest initargs
669 &key column)
2a8752b0 670 (call-next-method)
671 (mapc #'(lambda (column)
672 (tree-view-append-column tree-view column))
673 (get-all initargs :column)))
674
675
167450a3 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
f4175703 758(def-callback-marshal %tree-view-mapping-func (nil tree-view (path (copy-of tree-path))))
167450a3 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))
2a8752b0 787 ((make-instance 'gdk:rectangle) gdk:rectangle :return))
167450a3 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))
2a8752b0 793 ((make-instance 'gdk:rectangle) gdk:rectangle :return))
167450a3 794
795(defbinding tree-view-get-visible-rect () nil
796 (tree-view tree-view)
2a8752b0 797 ((make-instance 'gdk:rectangle) gdk:rectangle :return))
167450a3 798
799;; and many more functions which we'll add later
800
2a8752b0 801
802;;; Tree View Column
803