chiark / gitweb /
Improved gtk version detection
[clg] / gtk / gtktree.lisp
CommitLineData
55212af1 1;; Common Lisp bindings for GTK+ v2.x
2;; Copyright 2004-2005 Espen S. Johnsen <espen@users.sf.net>
985713d7 3;;
55212af1 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:
985713d7 11;;
55212af1 12;; The above copyright notice and this permission notice shall be
13;; included in all copies or substantial portions of the Software.
985713d7 14;;
55212af1 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.
22
70b52c33 23;; $Id: gtktree.lisp,v 1.18 2006/03/03 19:00:12 espen Exp $
985713d7 24
25
26(in-package "GTK")
27
28
29;;;; Cell Layout
30
31(defbinding cell-layout-pack-start () nil
32 (cell-layout cell-layout)
33 (cell cell-renderer)
34 (expand boolean))
35
36(defbinding cell-layout-pack-end () nil
37 (cell-layout cell-layout)
38 (cell cell-renderer)
39 (expand boolean))
40
41(defun cell-layout-pack (layout cell &key end expand)
42 (if end
43 (cell-layout-pack-end layout cell expand)
44 (cell-layout-pack-start layout cell expand)))
45
4e169141 46
985713d7 47(defbinding cell-layout-reorder () nil
48 (cell-layout cell-layout)
49 (cell cell-renderer)
50 (position int))
51
52(defbinding cell-layout-clear () nil
53 (cell-layout cell-layout))
54
da82be16 55(defbinding cell-layout-add-attribute (cell-layout cell attribute column) nil
985713d7 56 (cell-layout cell-layout)
57 (cell cell-renderer)
58 ((string-downcase attribute) string)
da82be16 59 (column int))
985713d7 60
a92553bd 61(define-callback-marshal %cell-layout-data-callback nil
62 (cell-layout cell-renderer tree-model tree-iter))
985713d7 63
64(defbinding cell-layout-set-cell-data-func (cell-layout cell function) nil
65 (cell-layout cell-layout)
66 (cell cell-renderer)
a92553bd 67 (%cell-layout-data-callback callback)
985713d7 68 ((register-callback-function function) unsigned-int)
a92553bd 69 (user-data-destroy-callback callback))
985713d7 70
71(defbinding cell-layout-clear-attributes () nil
72 (cell-layout cell-layout)
73 (cell cell-renderer))
74
75
76
77;;;; List Store
78
4e169141 79(defmethod initialize-instance ((list-store list-store) &key column-types
80 column-names initial-content)
985713d7 81 (call-next-method)
4e169141 82 (%list-store-set-column-types list-store column-types)
83 (when column-names
70b52c33 84 (setf
85 (object-data list-store 'column-names)
86 (coerce column-names 'vector)))
4e169141 87 (when initial-content
88 (loop
89 with iter = (make-instance 'tree-iter)
90 for row in initial-content
91 do (list-store-append list-store row iter))))
985713d7 92
fddb02b4 93(defgeneric column-setter-name (store))
985713d7 94
4e169141 95(defmethod column-setter-name ((list-store list-store))
96 (declare (ignore list-store))
97 "gtk_list_store_set")
985713d7 98
4e169141 99(defbinding %list-store-set-column-types () nil
985713d7 100 (list-store list-store)
4e169141 101 ((length columns) unsigned-int)
102 (columns (vector gtype)))
985713d7 103
05a3b9e4 104(defbinding %list-store-remove () boolean
985713d7 105 (list-store list-store)
106 (tree-iter tree-iter))
107
05a3b9e4 108(defun list-store-remove (store row)
109 (etypecase row
110 (tree-iter
111 (%list-store-remove store row))
112 (tree-path
113 (multiple-value-bind (valid iter) (tree-model-get-iter store row)
114 (if valid
115 (%list-store-remove store iter)
da82be16 116 (error "~A not poiniting to a valid iterator in ~A" row store))))
05a3b9e4 117 (tree-row-reference
118 (let ((path (tree-row-reference-get-path row)))
119 (if path
120 (list-store-remove store path)
121 (error "~A not valid" row))))))
122
123
4e169141 124(defbinding %list-store-insert () nil
985713d7 125 (list-store list-store)
4e169141 126 (tree-iter tree-iter)
985713d7 127 (position int))
128
4e169141 129(defun list-store-insert
130 (store position &optional data (iter (make-instance 'tree-iter)))
131 (%list-store-insert store iter position)
132 (when data (%tree-model-set store iter data))
133 iter)
134
135(defbinding %list-store-insert-before () nil
985713d7 136 (list-store list-store)
4e169141 137 (tree-iter tree-iter)
985713d7 138 (sibling (or null tree-iter)))
139
4e169141 140(defun list-store-insert-before
141 (store sibling &optional data (iter (make-instance 'tree-iter)))
142 (%list-store-insert-before store iter sibling)
143 (when data (%tree-model-set store iter data))
144 iter)
145
146(defbinding %list-store-insert-after
147 (list-store &optional sibling (tree-iter (make-instance 'tree-iter))) nil
985713d7 148 (list-store list-store)
4e169141 149 (tree-iter tree-iter)
985713d7 150 (sibling (or null tree-iter)))
151
4e169141 152(defun list-store-insert-after
153 (store sibling &optional data (iter (make-instance 'tree-iter)))
154 (%list-store-insert-after store iter sibling)
155 (when data (%tree-model-set store iter data))
156 iter)
157
158(defbinding %list-store-prepend () nil
985713d7 159 (list-store list-store)
4e169141 160 (tree-iter tree-iter))
161
162(defun list-store-prepend
163 (store &optional data (iter (make-instance 'tree-iter)))
164 (%list-store-prepend store iter)
165 (when data (%tree-model-set store iter data))
166 iter)
985713d7 167
4e169141 168(defbinding %list-store-append () nil
985713d7 169 (list-store list-store)
4e169141 170 (tree-iter tree-iter))
171
172(defun list-store-append
173 (store &optional data (iter (make-instance 'tree-iter)))
174 (%list-store-append store iter)
175 (when data (%tree-model-set store iter data))
176 iter)
985713d7 177
178(defbinding list-store-clear () nil
179 (list-store list-store))
180
181(defbinding list-store-reorder () nil
182 (list-store list-store)
183 (new-order (vector int)))
184
185(defbinding list-store-swap () nil
186 (list-store list-store)
187 (a tree-iter)
188 (b tree-iter))
189
190(defbinding list-store-move-before () nil
191 (list-store list-store)
192 (iter tree-iter)
193 (psoition (or null tree-iter)))
194
985713d7 195(defbinding list-store-move-after () nil
196 (list-store list-store)
197 (iter tree-iter)
198 (psoition tree-iter))
199
200
201;;; Tree Model
202
4e169141 203(defbinding %tree-path-free () nil
204 (location pointer))
205
206(defbinding %tree-path-get-indices () pointer
207 (location pointer))
208
209(defbinding %tree-path-get-depth () int
210 (location pointer))
211
212(defun %make-tree-path (path)
213 (let ((c-vector (make-c-vector 'int (length path) path))
214 (location (allocate-memory (+ (size-of 'int) (size-of 'pointer)))))
215 (funcall (writer-function 'int) (length path) location)
216 (funcall (writer-function 'pointer) c-vector location (size-of 'int))
217 location))
218
05a3b9e4 219(defun %tree-path-to-vector (location)
220 (let ((indices (%tree-path-get-indices location))
221 (depth (%tree-path-get-depth location)))
222 (if (null-pointer-p indices)
223 #()
224 (map-c-vector 'vector #'identity indices 'int depth))))
4e169141 225
226(eval-when (:compile-toplevel :load-toplevel :execute)
4d1fea77 227 (define-type-method alien-type ((type tree-path))
228 (declare (ignore type))
4e169141 229 (alien-type 'pointer))
230
4d1fea77 231 (define-type-method size-of ((type tree-path))
232 (declare (ignore type))
4e169141 233 (size-of 'pointer))
234
4d1fea77 235 (define-type-method to-alien-form ((type tree-path) path)
236 (declare (ignore type))
4e169141 237 `(%make-tree-path ,path))
238
4d1fea77 239 (define-type-method from-alien-form ((type tree-path) location)
240 (declare (ignore type))
05a3b9e4 241 `(let ((location ,location))
242 (prog1
243 (%tree-path-to-vector location)
244 (%tree-path-free location))))
4e169141 245
4d1fea77 246 (define-type-method copy-from-alien-form ((type tree-path) location)
247 (declare (ignore type))
05a3b9e4 248 `(%tree-path-to-vector ,location))
4e169141 249
4d1fea77 250 (define-type-method cleanup-form ((type tree-path) location)
251 (declare (ignore type))
05a3b9e4 252 `(%tree-path-free ,location)))
253
4d1fea77 254(define-type-method to-alien-function ((type tree-path))
255 (declare (ignore type))
05a3b9e4 256 #'%make-tree-path)
4e169141 257
4d1fea77 258(define-type-method from-alien-function ((type tree-path))
259 (declare (ignore type))
05a3b9e4 260 #'(lambda (location)
261 (prog1
262 (%tree-path-to-vector location)
263 (%tree-path-free location))))
264
4d1fea77 265(define-type-method copy-from-alien-function ((type tree-path))
266 (declare (ignore type ))
05a3b9e4 267 #'%tree-path-to-vector)
268
4d1fea77 269(define-type-method cleanup-function ((type tree-path))
270 (declare (ignore type))
05a3b9e4 271 #'%tree-path-free)
272
4d1fea77 273(define-type-method writer-function ((type tree-path))
274 (declare (ignore type))
05a3b9e4 275 (let ((writer (writer-function 'pointer)))
276 #'(lambda (path location &optional (offset 0))
277 (funcall writer (%make-tree-path path) location offset))))
278
4d1fea77 279(define-type-method reader-function ((type tree-path))
280 (declare (ignore type))
05a3b9e4 281 (let ((reader (reader-function 'pointer)))
49674546 282 #'(lambda (location &optional (offset 0) weak-p)
283 (declare (ignore weak-p))
05a3b9e4 284 (%tree-path-to-vector (funcall reader location offset)))))
4e169141 285
4d1fea77 286(define-type-method destroy-function ((type tree-path))
287 (declare (ignore type))
c8211115 288 (let ((reader (reader-function 'pointer)))
289 #'(lambda (location &optional (offset 0))
290 (%tree-path-free (funcall reader location offset)))))
291
4e169141 292
293(defbinding %tree-row-reference-new () pointer
294 (model tree-model)
295 (path tree-path))
296
39db92d4 297(defmethod allocate-foreign ((reference tree-row-reference) &key model path)
298 (%tree-row-reference-new model path))
4e169141 299
300(defbinding tree-row-reference-get-path () tree-path
301 (reference tree-row-reference))
302
303(defbinding (tree-row-reference-valid-p "gtk_tree_row_reference_valid") () boolean
304 (reference tree-row-reference))
305
306
9bdb89f4 307(defbinding tree-model-get-column-type () gtype ;type-number
4e169141 308 (tree-model tree-model)
309 (index int))
310
311(defbinding tree-model-get-iter
312 (model path &optional (iter (make-instance 'tree-iter))) boolean
313 (model tree-model)
314 (iter tree-iter :return)
315 (path tree-path))
316
317(defbinding tree-model-get-path () tree-path
318 (tree-model tree-model)
319 (iter tree-iter))
320
321(defbinding %tree-model-get-value () nil
322 (tree-model tree-model)
323 (iter tree-iter)
324 (column int)
325 (gvalue gvalue))
326
70b52c33 327(defgeneric tree-model-value (model row column))
328
329(defmethod tree-model-value ((model tree-model) row column)
da82be16 330 (let ((index (column-index model column))
331 (iter (etypecase row
332 (tree-iter row)
333 (tree-path (multiple-value-bind (valid iter)
334 (tree-model-get-iter model row)
335 (if valid
336 iter
337 (error "Invalid tree path: ~A" row)))))))
780a4e24 338 (with-gvalue (gvalue)
4e169141 339 (%tree-model-get-value model iter index gvalue))))
340
341(defbinding tree-model-iter-next () boolean
342 (tree-model tree-model)
343 (iter tree-iter :return))
344
345(defbinding tree-model-iter-children
346 (tree-model parent &optional (iter (make-instance 'tree-iter))) boolean
347 (tree-model tree-model)
348 (iter tree-iter :return)
349 (parent (or null tree-iter)))
350
351(defbinding (tree-model-iter-has-child-p "gtk_tree_model_iter_has_child")
352 () boolean
353 (tree-model tree-model)
354 (iter tree-iter))
355
356(defbinding tree-model-iter-n-children () int
357 (tree-model tree-model)
358 (iter tree-iter))
359
360(defbinding tree-model-iter-nth-child
3d36c5d6 361 (tree-model parent n &optional (iter (make-instance 'tree-iter))) boolean
4e169141 362 (tree-model tree-model)
363 (iter tree-iter :return)
364 (parent (or null tree-iter))
365 (n int))
366
367(defbinding tree-model-iter-parent
368 (tree-model child &optional (iter (make-instance 'tree-iter))) boolean
369 (tree-model tree-model)
370 (iter tree-iter :return)
371 (child tree-iter))
372
a92553bd 373(define-callback-marshal %tree-model-foreach-callback boolean
374 (tree-model tree-path tree-iter))
4e169141 375
a92553bd 376(defbinding %tree-model-foreach (tree-model callback-id) nil
4e169141 377 (tree-model tree-model)
a92553bd 378 (%tree-model-foreach-callback callback)
4e169141 379 (callback-id unsigned-int))
380
381(defun tree-model-foreach (model function)
382 (with-callback-function (id function)
383 (%tree-model-foreach model id)))
384
385(defbinding tree-model-row-changed () nil
386 (tree-model tree-model)
387 (path tree-path)
388 (iter tree-iter))
389
390(defbinding tree-model-row-inserted () nil
391 (tree-model tree-model)
392 (path tree-path)
393 (iter tree-iter))
394
395(defbinding tree-model-row-has-child-toggled () nil
396 (tree-model tree-model)
397 (path tree-path)
398 (iter tree-iter))
399
400(defbinding tree-model-row-deleted () nil
401 (tree-model tree-model)
402 (path tree-path)
403 (iter tree-iter))
404
405(defbinding tree-model-rows-reordered () nil
406 (tree-model tree-model)
407 (path tree-path)
408 (iter tree-iter)
409 (new-order int))
410
411
412(defun column-types (model columns)
4d1fea77 413 (declare (ignore model))
4e169141 414 (map 'vector
415 #'(lambda (column)
416 (find-type-number (first (mklist column))))
417 columns))
418
419(defun column-index (model column)
420 (or
421 (etypecase column
422 (number column)
423 (symbol (position column (object-data model 'column-names)))
424 (string (position column (object-data model 'column-names)
425 :test #'string=)))
426 (error "~A has no column ~S" model column)))
427
da82be16 428(defun column-name (model index)
429 (svref (object-data model 'column-names) index))
430
4e169141 431(defun tree-model-column-value-setter (model column)
432 (let ((setters (or
433 (object-data model 'column-setters)
434 (setf
435 (object-data model 'column-setters)
436 (make-array (tree-model-n-columns model)
437 :initial-element nil)))))
438 (let ((index (column-index model column)))
439 (or
440 (svref setters index)
441 (setf
442 (svref setters index)
443 (let ((setter
444 (mkbinding (column-setter-name model)
445 nil (type-of model) 'tree-iter 'int
9bdb89f4 446; (type-from-number (tree-model-get-column-type model index))
447 (tree-model-get-column-type model index)
4e169141 448 'int)))
449 #'(lambda (value iter)
450 (funcall setter model iter index value -1))))))))
451
452(defun tree-model-row-setter (model)
453 (or
454 (object-data model 'row-setter)
455 (progn
456 ;; This will create any missing column setter
457 (loop
458 for i from 0 below (tree-model-n-columns model)
459 do (tree-model-column-value-setter model i))
460 (let ((setters (object-data model 'column-setters)))
461 (setf
462 (object-data model 'row-setter)
463 #'(lambda (row iter)
464 (map nil #'(lambda (value setter)
465 (funcall setter value iter))
466 row setters)))))))
467
70b52c33 468(defgeneric (setf tree-model-value) (value model row column))
469
470(defmethod (setf tree-model-value) (value (model tree-model) row column)
da82be16 471 (let ((iter (etypecase row
472 (tree-iter row)
473 (tree-path (multiple-value-bind (valid iter)
474 (tree-model-get-iter model row)
475 (if valid
476 iter
477 (error "Invalid tree path: ~A" row)))))))
478 (funcall (tree-model-column-value-setter model column) value iter)
479 value))
4e169141 480
481(defun (setf tree-model-row-data) (data model iter)
482 (funcall (tree-model-row-setter model) data iter)
483 data)
484
485(defun %tree-model-set (model iter data)
486 (etypecase data
487 (vector (setf (tree-model-row-data model iter) data))
488 (cons
489 (loop
490 as (column value . rest) = data then rest
da82be16 491 do (setf (tree-model-value model iter column) value)
4e169141 492 while rest))))
985713d7 493
494
05a3b9e4 495;;; Tree Selection
496
a92553bd 497(define-callback-marshal %tree-selection-callback boolean
498 (tree-selection tree-model tree-path (path-currently-selected boolean)))
05a3b9e4 499
500(defbinding tree-selection-set-select-function (selection function) nil
501 (selection tree-selection)
a92553bd 502 (%tree-selection-callback callback)
05a3b9e4 503 ((register-callback-function function) unsigned-int)
a92553bd 504 (user-data-destroy-callback callback))
05a3b9e4 505
506(defbinding tree-selection-get-selected
507 (selection &optional (iter (make-instance 'tree-iter))) boolean
508 (selection tree-selection)
509 (nil null)
510 (iter tree-iter :return))
511
a92553bd 512(define-callback-marshal %tree-selection-foreach-callback nil (tree-model tree-path tree-iter))
05a3b9e4 513
a92553bd 514(defbinding %tree-selection-selected-foreach (tree-selection callback-id) nil
05a3b9e4 515 (tree-selection tree-selection)
a92553bd 516 (%tree-selection-foreach-callback callback)
05a3b9e4 517 (callback-id unsigned-int))
518
519(defun tree-selection-selected-foreach (selection function)
520 (with-callback-function (id function)
521 (%tree-selection-selected-foreach selection id)))
522
523(defbinding tree-selection-get-selected-rows () (glist tree-path)
524 (tree-selection tree-selection)
525 (nil null))
526
527(defbinding tree-selection-count-selected-rows () int
528 (tree-selection tree-selection))
529
530(defbinding %tree-selection-select-path () nil
531 (tree-selection tree-selection)
532 (tree-path tree-path))
533
534(defbinding %tree-selection-unselect-path () nil
535 (tree-selection tree-selection)
536 (tree-path tree-path))
537
538(defbinding %tree-selection-path-is-selected () boolean
539 (tree-selection tree-selection)
540 (tree-path tree-path))
541
542(defbinding %tree-selection-select-iter () nil
543 (tree-selection tree-selection)
544 (tree-path tree-path))
545
546(defbinding %tree-selection-unselect-iter () nil
547 (tree-selection tree-selection)
548 (tree-path tree-path))
549
550(defbinding %tree-selection-iter-is-selected () boolean
551 (tree-selection tree-selection)
552 (tree-path tree-path))
553
554(defun tree-selection-select (selection row)
555 (etypecase row
556 (tree-path (%tree-selection-select-path selection row))
557 (tree-iter (%tree-selection-select-iter selection row))))
558
559(defun tree-selection-unselect (selection row)
560 (etypecase row
561 (tree-path (%tree-selection-unselect-path selection row))
562 (tree-iter (%tree-selection-unselect-iter selection row))))
563
564(defun tree-selection-is-selected-p (selection row)
565 (etypecase row
566 (tree-path (%tree-selection-path-is-selected selection row))
567 (tree-iter (%tree-selection-iter-is-selected selection row))))
568
569(defbinding tree-selection-select-all () nil
570 (tree-selection tree-selection))
571
572(defbinding tree-selection-unselect-all () nil
573 (tree-selection tree-selection))
574
575(defbinding tree-selection-select-range () nil
576 (tree-selection tree-selection)
577 (start tree-path)
578 (end tree-path))
579
580(defbinding tree-selection-unselect-range () nil
581 (tree-selection tree-selection)
582 (start tree-path)
583 (end tree-path))
584
585
da82be16 586;;; Tree Sortable
587
588(eval-when (:compile-toplevel :load-toplevel :execute)
589 (define-enum-type sort-column (:default -1) (:unsorted -2))
590 (define-enum-type sort-order (:before -1) (:equal 0) (:after 1)))
591
592
a92553bd 593(define-callback-marshal %tree-iter-compare-callback (or int sort-order)
594 (tree-model (a tree-iter) (b tree-iter)))
da82be16 595
596(defbinding tree-sortable-sort-column-changed () nil
597 (sortable tree-sortable))
598
599(defbinding %tree-sortable-get-sort-column-id () boolean
600 (sortable tree-sortable)
601 (column int :out)
602 (order sort-type :out))
603
604(defun tree-sortable-get-sort-column (sortable)
605 (multiple-value-bind (special-p column order)
606 (%tree-sortable-get-sort-column-id sortable)
607 (values
608 (if special-p
609 (int-to-sort-order column)
610 (column-name sortable column))
611 order)))
612
613(defbinding (tree-sortable-set-sort-column
614 "gtk_tree_sortable_set_sort_column_id")
615 (sortable column order) nil
616 (sortable tree-sortable)
617 ((etypecase column
618 ((or integer sort-column) column)
619 (symbol (column-index sortable column)))
620 (or sort-column int))
621 (order sort-type))
622
623(defbinding %tree-sortable-set-sort-func (sortable column function) nil
624 (sortable tree-sortable)
625 ((column-index sortable column) int)
a92553bd 626 (%tree-iter-compare-callback callback)
da82be16 627 ((register-callback-function function) unsigned-int)
a92553bd 628 (user-data-destroy-callback callback))
da82be16 629
630(defbinding %tree-sortable-set-default-sort-func () nil
631 (sortable tree-sortable)
a92553bd 632 (compare-func (or null callback))
da82be16 633 (callback-id unsigned-int)
a92553bd 634 (destroy-func (or null callback)))
da82be16 635
636(defun tree-sortable-set-sort-func (sortable column function)
637 "Sets the comparison function used when sorting to be FUNCTION. If
638the current sort column of SORTABLE is the same as COLUMN,
639then the model will sort using this function."
640 (cond
641 ((and (eq column :default) (not function))
642 (%tree-sortable-set-default-sort-func sortable nil 0 nil))
643 ((eq column :default)
644 (%tree-sortable-set-default-sort-func sortable
a92553bd 645 %tree-iter-compare-callback
da82be16 646 (register-callback-function function)
a92553bd 647 user-data-destroy-callback))
da82be16 648 ((%tree-sortable-set-sort-func sortable column function))))
649
650(defbinding tree-sortable-has-default-sort-func-p () boolean
651 (sortable tree-sortable))
652
05a3b9e4 653
985713d7 654;;; Tree Store
655
656(defbinding %tree-store-set-column-types () nil
657 (tree-store tree-store)
4e169141 658 ((length columns) unsigned-int)
659 (columns (vector gtype)))
985713d7 660
4e169141 661(defmethod initialize-instance ((tree-store tree-store) &key column-types
662 column-names)
985713d7 663 (call-next-method)
4e169141 664 (%tree-store-set-column-types tree-store column-types)
665 (when column-names
666 (setf (object-data tree-store 'column-names) column-names)))
985713d7 667
4e169141 668(defmethod column-setter-name ((tree-store tree-store))
669 (declare (ignore tree-store))
670 "gtk_tree_store_set")
985713d7 671
672(defbinding tree-store-remove () boolean
673 (tree-store tree-store)
674 (tree-iter tree-iter))
675
4e169141 676(defbinding %tree-store-insert () nil
985713d7 677 (tree-store tree-store)
4e169141 678 (tree-iter tree-iter)
985713d7 679 (parent (or null tree-iter))
680 (position int))
681
4e169141 682(defun tree-store-insert
683 (store parent position &optional data (iter (make-instance 'tree-iter)))
684 (%tree-store-insert store iter parent position)
685 (when data (%tree-model-set store iter data))
686 iter)
687
688(defbinding %tree-store-insert-before () nil
985713d7 689 (tree-store tree-store)
4e169141 690 (tree-iter tree-iter)
985713d7 691 (parent (or null tree-iter))
692 (sibling (or null tree-iter)))
693
3d36c5d6 694(defun tree-store-insert-before
4e169141 695 (store parent sibling &optional data (iter (make-instance 'tree-iter)))
696 (%tree-store-insert-before store iter parent sibling)
697 (when data (%tree-model-set store iter data))
698 iter)
699
700(defbinding %tree-store-insert-after () nil
985713d7 701 (tree-store tree-store)
4e169141 702 (tree-iter tree-iter)
985713d7 703 (parent (or null tree-iter))
704 (sibling (or null tree-iter)))
705
4e169141 706(defun tree-store-insert-after
707 (store parent sibling &optional data (iter (make-instance 'tree-iter)))
708 (%tree-store-insert-after store iter parent sibling)
709 (when data (%tree-model-set store iter data))
710 iter)
711
712(defbinding %tree-store-prepend () nil
985713d7 713 (tree-store tree-store)
4e169141 714 (tree-iter tree-iter)
985713d7 715 (parent (or null tree-iter)))
716
4e169141 717(defun tree-store-prepend
718 (store parent &optional data (iter (make-instance 'tree-iter)))
719 (%tree-store-prepend store iter parent)
720 (when data (%tree-model-set store iter data))
721 iter)
722
723(defbinding %tree-store-append () nil
985713d7 724 (tree-store tree-store)
4e169141 725 (tree-iter tree-iter)
985713d7 726 (parent (or null tree-iter)))
727
4e169141 728(defun tree-store-append
729 (store parent &optional data (iter (make-instance 'tree-iter)))
730 (%tree-store-append store iter parent)
731 (when data (%tree-model-set store iter data))
732 iter)
733
985713d7 734(defbinding (tree-store-is-ancestor-p "gtk_tree_store_is_ancestor") () boolean
735 (tree-store tree-store)
736 (tree-iter tree-iter)
737 (descendant tree-iter))
738
739(defbinding tree-store-iter-depth () int
740 (tree-store tree-store)
741 (tree-iter tree-iter))
742
743(defbinding tree-store-clear () nil
744 (tree-store tree-store))
745
746(defbinding tree-store-reorder () nil
747 (tree-store tree-store)
748 (parent tree-iter)
749 (new-order (vector int)))
750
751(defbinding tree-store-swap () nil
752 (tree-store tree-store)
753 (a tree-iter)
754 (b tree-iter))
755
756(defbinding tree-store-move-before () nil
757 (tree-store tree-store)
758 (iter tree-iter)
759 (psoition (or null tree-iter)))
760
761
762(defbinding tree-store-move-after () nil
763 (tree-store tree-store)
764 (iter tree-iter)
765 (psoition tree-iter))
766
767
768
769;;; Tree View
770
05a3b9e4 771(defmethod initialize-instance ((tree-view tree-view) &rest initargs
772 &key column)
4d1fea77 773 (declare (ignore column))
4e169141 774 (call-next-method)
775 (mapc #'(lambda (column)
776 (tree-view-append-column tree-view column))
777 (get-all initargs :column)))
778
779
985713d7 780(defbinding tree-view-columns-autosize () nil
781 (tree-view tree-view))
782
783(defbinding tree-view-append-column () int
784 (tree-view tree-view)
785 (tree-view-column tree-view-column))
786
787(defbinding tree-view-remove-column () int
788 (tree-view tree-view)
789 (tree-view-column tree-view-column))
790
3d36c5d6 791(defbinding tree-view-insert-column (view column position) int
985713d7 792 (view tree-view)
793 (column tree-view-column)
794 ((if (eq position :end) -1 position) int))
795
796(defbinding tree-view-get-column () tree-view-column
797 (tree-view tree-view)
798 (position int))
799
800(defbinding tree-view-move-column-after () nil
801 (tree-view tree-view)
802 (column tree-view-column)
803 (base-column (or null tree-view-column)))
804
805;;(defbinding tree-view-set-column drag-function ...)
806
807(defbinding tree-view-scroll-to-point () nil
808 (tree-view tree-view)
809 (tree-x int)
810 (tree-y int))
811
812(defbinding tree-view-scroll-to-cell () nil
813 (tree-view tree-view)
814 (path (or null tree-path))
815 (column (or null tree-view-column))
816 (use-align boolean)
817 (row-align single-float)
818 (col-align single-float))
819
820(defbinding tree-view-set-cursor () nil
821 (tree-view tree-view)
822 (path tree-path)
823 (focus-column tree-view-column)
824 (start-editing boolean))
825
826(defbinding tree-view-set-cursor-on-cell () nil
827 (tree-view tree-view)
828 (path tree-path)
829 (focus-column (or null tree-view-column))
830 (focus-cell (or null cell-renderer))
831 (start-editing boolean))
832
833(defbinding tree-view-get-cursor () nil
834 (tree-view tree-view)
835 (path tree-path :out )
836 (focus-column tree-view-column :out))
837
838(defbinding tree-view-row-activated () nil
839 (tree-view tree-view)
840 (path tree-path )
841 (column tree-view-column))
842
843(defbinding tree-view-expand-all () nil
844 (tree-view tree-view))
845
846(defbinding tree-view-collapse-all () nil
847 (tree-view tree-view))
848
849(defbinding tree-view-expand-to-path () nil
850 (tree-view tree-view)
851 (path tree-path))
852
853(defbinding tree-view-expand-row () nil
854 (tree-view tree-view)
855 (path tree-path)
856 (open-all boolean))
857
858(defbinding tree-view-collapse-row () nil
859 (tree-view tree-view)
860 (path tree-path))
861
a92553bd 862(define-callback-marshal %tree-view-mapping-callback nil (tree-view tree-path))
985713d7 863
a92553bd 864(defbinding %tree-view-map-expanded-rows (tree-view callback-id) nil
985713d7 865 (tree-view tree-view)
a92553bd 866 (%tree-view-mapping-callback callback)
985713d7 867 (callback-id unsigned-int))
868
869(defun map-expanded-rows (function tree-view)
870 (with-callback-function (id function)
871 (%tree-view-map-expanded-rows tree-view id)))
872
873(defbinding (tree-view-row-expanded-p "gtk_tree_view_row_expanded") () boolean
874 (tree-view tree-view)
875 (path tree-path))
876
877(defbinding tree-view-get-path-at-pos
878 (tree-view x y &optional (cell-x 0) (cell-y 0)) boolean
879 (tree-view tree-view)
880 (x int)
881 (y int)
882 (path tree-path :out)
883 (column tree-view-column :out)
884 (cell-x int)
885 (cell-y int))
886
887(defbinding tree-view-get-cell-area () nil
888 (tree-view tree-view)
889 (path (or null tree-path))
890 (column (or null tree-view-column))
4e169141 891 ((make-instance 'gdk:rectangle) gdk:rectangle :return))
985713d7 892
893(defbinding tree-view-get-background-area () nil
894 (tree-view tree-view)
895 (path (or null tree-path))
896 (column (or null tree-view-column))
4e169141 897 ((make-instance 'gdk:rectangle) gdk:rectangle :return))
985713d7 898
899(defbinding tree-view-get-visible-rect () nil
900 (tree-view tree-view)
4e169141 901 ((make-instance 'gdk:rectangle) gdk:rectangle :return))
985713d7 902
903;; and many more functions which we'll add later
904
4e169141 905
da82be16 906;;;; Icon View
907
908#+gtk2.6
909(progn
910 (defbinding icon-view-get-path-at-pos () tree-path
911 (icon-view icon-view)
912 (x int) (y int))
4e169141 913
a92553bd 914 (define-callback-marshal %icon-view-foreach-callback nil (icon-view tree-path))
da82be16 915
a92553bd 916 (defbinding %icon-view-selected-foreach (icon-view callback-id) tree-path
da82be16 917 (icon-view icon-view)
a92553bd 918 (%icon-view-foreach-callback callback)
da82be16 919 (callback-id unsigned-int))
920
921 (defun icon-view-foreach (icon-view function)
922 (with-callback-function (id function)
923 (%icon-view-selected-foreach icon-view id)))
924
925 (defbinding icon-view-select-path () nil
926 (icon-view icon-view)
927 (path tree-path))
928
929 (defbinding icon-view-unselect-path () nil
930 (icon-view icon-view)
931 (path tree-path))
932
933 (defbinding icon-view-path-is-selected-p () boolean
934 (icon-view icon-view)
935 (path tree-path))
936
937 (defbinding icon-view-get-selected-items () (glist tree-path)
938 (icon-view icon-view))
939
940 (defbinding icon-view-select-all () nil
941 (icon-view icon-view))
942
943 (defbinding icon-view-unselect-all () nil
944 (icon-view icon-view))
945
946 (defbinding icon-view-item-activated () nil
947 (icon-view icon-view)
948 (path tree-path))
949
950 (defbinding %icon-view-set-text-column (column icon-view) nil
951 (icon-view icon-view)
952 ((if (integerp column)
953 column
954 (column-index (icon-view-model icon-view) column)) int))
955
956 (defbinding %icon-view-set-markup-column (column icon-view) nil
957 (icon-view icon-view)
958 ((if (integerp column)
959 column
960 (column-index (icon-view-model icon-view) column)) int))
961
962 (defbinding %icon-view-set-pixbuf-column (column icon-view) nil
963 (icon-view icon-view)
964 ((if (integerp column)
965 column
966 (column-index (icon-view-model icon-view) column)) int)))
92ba85d4 967
968#+gtk2.8
969(progn
970 (defbinding icon-view-get-item-at-pos () boolean
971 (icon-view icon-view)
972 (x int)
973 (y int)
974 (tree-path tree-path :out)
975 (cell cell-renderer :out))
976
977 (defbinding icon-view-set-cursor (icon-view path &key cell start-editing) nil
978 (icon-view icon-view)
979 (path tree-path)
980 (cell (or null cell-renderer))
981 (start-editing boolean))
982
983 (defbinding icon-view-get-cursor () boolean
984 (icon-view icon-view)
985 (path tree-path :out)
986 (cell cell-renderer :out))
987
988 (defbinding icon-view-get-dest-item-at-pos () boolean
989 (icon-view icon-view)
990 (drag-x int)
991 (drag-y int)
992 (tree-path tree-path :out)
993 (pos drop-position :out))
994
995 (defbinding icon-view-create-drag-icon () gdk:pixmap
996 (icon-view icon-view)
997 (tree-path tree-path))
998
999 (defbinding icon-view-scroll-to-path (icon-view tree-path &key row-align column-align) nil
1000 (icon-view icon-view)
1001 (tree-path tree-path)
1002 ((or row-align column-align) boolean)
1003 (row-align single-float)
1004 (column-align single-float))
1005
1006 (defbinding icon-view-get-visible-range () boolean
1007 (icon-view icon-view)
1008 (start-path tree-path :out)
1009 (end-path tree-path :out))
1010
1011;; (defbinding icon-view-enable-model-drag-source () nil
1012;; (icon-view icon-view)
1013;; (start-button-mask gdk:modifier-type)
1014;; (targets (vector target-entry))
1015;; ((length targets) unsigned-int)
1016;; (actions gdk:drag-action))
1017
1018;; (defbinding icon-view-enable-model-drag-dest () nil
1019;; (icon-view icon-view)
1020;; (targets (vector target-entry))
1021;; ((length targets) unsigned-int)
1022;; (actions gdk:drag-action))
1023
1024 (defbinding icon-view-unset-model-drag-source () nil
1025 (icon-view icon-view))
1026
1027 (defbinding icon-view-unset-model-drag-dest () nil
1028 (icon-view icon-view)))