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