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 | |
2a8752b0 |
18 | ;; $Id: gtktree.lisp,v 1.2 2004-11-15 19:24:03 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 |
57 | (nil cell-layout cell-renderer tree-model tree-iter)) |
58 | |
59 | (defbinding cell-layout-set-cell-data-func (cell-layout cell function) nil |
60 | (cell-layout cell-layout) |
61 | (cell cell-renderer) |
62 | ((callback %cell-layout-data-func) pointer) |
63 | ((register-callback-function function) unsigned-int) |
64 | ((callback %destroy-user-data) pointer)) |
65 | |
66 | (defbinding cell-layout-clear-attributes () nil |
67 | (cell-layout cell-layout) |
68 | (cell cell-renderer)) |
69 | |
70 | |
71 | |
72 | ;;;; List Store |
73 | |
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 | |
96 | (defbinding list-store-remove () boolean |
97 | (list-store list-store) |
98 | (tree-iter tree-iter)) |
99 | |
2a8752b0 |
100 | (defbinding %list-store-insert () nil |
167450a3 |
101 | (list-store list-store) |
2a8752b0 |
102 | (tree-iter tree-iter) |
167450a3 |
103 | (position int)) |
104 | |
2a8752b0 |
105 | (defun list-store-insert |
106 | (store position &optional data (iter (make-instance 'tree-iter))) |
107 | (%list-store-insert store iter position) |
108 | (when data (%tree-model-set store iter data)) |
109 | iter) |
110 | |
111 | (defbinding %list-store-insert-before () nil |
167450a3 |
112 | (list-store list-store) |
2a8752b0 |
113 | (tree-iter tree-iter) |
167450a3 |
114 | (sibling (or null tree-iter))) |
115 | |
2a8752b0 |
116 | (defun list-store-insert-before |
117 | (store sibling &optional data (iter (make-instance 'tree-iter))) |
118 | (%list-store-insert-before store iter sibling) |
119 | (when data (%tree-model-set store iter data)) |
120 | iter) |
121 | |
122 | (defbinding %list-store-insert-after |
123 | (list-store &optional sibling (tree-iter (make-instance 'tree-iter))) nil |
167450a3 |
124 | (list-store list-store) |
2a8752b0 |
125 | (tree-iter tree-iter) |
167450a3 |
126 | (sibling (or null tree-iter))) |
127 | |
2a8752b0 |
128 | (defun list-store-insert-after |
129 | (store sibling &optional data (iter (make-instance 'tree-iter))) |
130 | (%list-store-insert-after store iter sibling) |
131 | (when data (%tree-model-set store iter data)) |
132 | iter) |
133 | |
134 | (defbinding %list-store-prepend () nil |
167450a3 |
135 | (list-store list-store) |
2a8752b0 |
136 | (tree-iter tree-iter)) |
137 | |
138 | (defun list-store-prepend |
139 | (store &optional data (iter (make-instance 'tree-iter))) |
140 | (%list-store-prepend store iter) |
141 | (when data (%tree-model-set store iter data)) |
142 | iter) |
167450a3 |
143 | |
2a8752b0 |
144 | (defbinding %list-store-append () nil |
167450a3 |
145 | (list-store list-store) |
2a8752b0 |
146 | (tree-iter tree-iter)) |
147 | |
148 | (defun list-store-append |
149 | (store &optional data (iter (make-instance 'tree-iter))) |
150 | (%list-store-append store iter) |
151 | (when data (%tree-model-set store iter data)) |
152 | iter) |
167450a3 |
153 | |
154 | (defbinding list-store-clear () nil |
155 | (list-store list-store)) |
156 | |
157 | (defbinding list-store-reorder () nil |
158 | (list-store list-store) |
159 | (new-order (vector int))) |
160 | |
161 | (defbinding list-store-swap () nil |
162 | (list-store list-store) |
163 | (a tree-iter) |
164 | (b tree-iter)) |
165 | |
166 | (defbinding list-store-move-before () nil |
167 | (list-store list-store) |
168 | (iter tree-iter) |
169 | (psoition (or null tree-iter))) |
170 | |
167450a3 |
171 | (defbinding list-store-move-after () nil |
172 | (list-store list-store) |
173 | (iter tree-iter) |
174 | (psoition tree-iter)) |
175 | |
176 | |
177 | ;;; Tree Model |
178 | |
2a8752b0 |
179 | (defbinding %tree-path-free () nil |
180 | (location pointer)) |
181 | |
182 | (defbinding %tree-path-get-indices () pointer |
183 | (location pointer)) |
184 | |
185 | (defbinding %tree-path-get-depth () int |
186 | (location pointer)) |
187 | |
188 | (defun %make-tree-path (path) |
189 | (let ((c-vector (make-c-vector 'int (length path) path)) |
190 | (location (allocate-memory (+ (size-of 'int) (size-of 'pointer))))) |
191 | (funcall (writer-function 'int) (length path) location) |
192 | (funcall (writer-function 'pointer) c-vector location (size-of 'int)) |
193 | location)) |
194 | |
195 | (defun %tree-path-to-vector (location &optional (destroy-p t)) |
196 | (prog1 |
197 | (map-c-vector 'vector #'identity (%tree-path-get-indices location) |
198 | 'int (%tree-path-get-depth location)) |
199 | (when destroy-p |
200 | (%tree-path-free location)))) |
201 | |
202 | (eval-when (:compile-toplevel :load-toplevel :execute) |
203 | (defmethod alien-type ((type (eql 'tree-path)) &rest args) |
204 | (declare (ignore type args)) |
205 | (alien-type 'pointer)) |
206 | |
207 | (defmethod size-of ((type (eql 'tree-path)) &rest args) |
208 | (declare (ignore type args)) |
209 | (size-of 'pointer)) |
210 | |
211 | (defmethod to-alien-form (path (type (eql 'tree-path)) &rest args) |
212 | (declare (ignore type args)) |
213 | `(%make-tree-path ,path)) |
214 | |
215 | (defmethod to-alien-function ((type (eql 'tree-path)) &rest args) |
216 | (declare (ignore type args)) |
217 | #'%make-tree-path) |
218 | |
219 | (defmethod from-alien-form (location (type (eql 'tree-path)) &rest args) |
220 | (declare (ignore type args)) |
221 | `(%tree-path-to-vector ,location)) |
222 | |
223 | (defmethod from-alien-function ((type (eql 'tree-path)) &rest args) |
224 | (declare (ignore type args)) |
225 | #'%tree-path-to-vector) |
226 | |
227 | (defmethod cleanup-form (location (type (eql 'tree-path)) &rest args) |
228 | (declare (ignore type args)) |
229 | `(%tree-path-free ,location)) |
230 | |
231 | (defmethod cleanup-function ((type (eql 'tree-path)) &rest args) |
232 | (declare (ignore type args)) |
233 | #'%tree-path-free)) |
234 | |
235 | |
236 | (defbinding %tree-row-reference-new () pointer |
237 | (model tree-model) |
238 | (path tree-path)) |
239 | |
240 | (defmethod initialize-instance ((reference tree-row-reference) &key model path) |
241 | (declare (ignore initargs)) |
242 | (setf |
243 | (slot-value reference 'location) |
244 | (%tree-row-reference-new model path)) |
245 | (call-next-method)) |
246 | |
247 | (defbinding tree-row-reference-get-path () tree-path |
248 | (reference tree-row-reference)) |
249 | |
250 | (defbinding (tree-row-reference-valid-p "gtk_tree_row_reference_valid") () boolean |
251 | (reference tree-row-reference)) |
252 | |
253 | |
254 | (defbinding tree-model-get-column-type () type-number |
255 | (tree-model tree-model) |
256 | (index int)) |
257 | |
258 | (defbinding tree-model-get-iter |
259 | (model path &optional (iter (make-instance 'tree-iter))) boolean |
260 | (model tree-model) |
261 | (iter tree-iter :return) |
262 | (path tree-path)) |
263 | |
264 | (defbinding tree-model-get-path () tree-path |
265 | (tree-model tree-model) |
266 | (iter tree-iter)) |
267 | |
268 | (defbinding %tree-model-get-value () nil |
269 | (tree-model tree-model) |
270 | (iter tree-iter) |
271 | (column int) |
272 | (gvalue gvalue)) |
273 | |
274 | (defun tree-model-get-column-value (model iter column) |
275 | (let ((index (column-index model column))) |
276 | (with-gvalue (gvalue (tree-model-get-column-type model index)) |
277 | (%tree-model-get-value model iter index gvalue)))) |
278 | |
279 | (defbinding tree-model-iter-next () boolean |
280 | (tree-model tree-model) |
281 | (iter tree-iter :return)) |
282 | |
283 | (defbinding tree-model-iter-children |
284 | (tree-model parent &optional (iter (make-instance 'tree-iter))) boolean |
285 | (tree-model tree-model) |
286 | (iter tree-iter :return) |
287 | (parent (or null tree-iter))) |
288 | |
289 | (defbinding (tree-model-iter-has-child-p "gtk_tree_model_iter_has_child") |
290 | () boolean |
291 | (tree-model tree-model) |
292 | (iter tree-iter)) |
293 | |
294 | (defbinding tree-model-iter-n-children () int |
295 | (tree-model tree-model) |
296 | (iter tree-iter)) |
297 | |
298 | (defbinding tree-model-iter-nth-child |
299 | (tree-model parent &optional (iter (make-instance 'tree-iter))) boolean |
300 | (tree-model tree-model) |
301 | (iter tree-iter :return) |
302 | (parent (or null tree-iter)) |
303 | (n int)) |
304 | |
305 | (defbinding tree-model-iter-parent |
306 | (tree-model child &optional (iter (make-instance 'tree-iter))) boolean |
307 | (tree-model tree-model) |
308 | (iter tree-iter :return) |
309 | (child tree-iter)) |
310 | |
311 | (defbinding tree-model-get-string-from-iter () string |
312 | (tree-model tree-model) |
313 | (iter tree-iter)) |
314 | |
315 | (def-callback-marshal %tree-model-foreach-func |
316 | (boolean tree-model tree-path tree-iter)) |
317 | |
318 | (defbinding %tree-model-foreach () nil |
319 | (tree-model tree-model) |
320 | ((callback %tree-model-foreach-func) pointer) |
321 | (callback-id unsigned-int)) |
322 | |
323 | (defun tree-model-foreach (model function) |
324 | (with-callback-function (id function) |
325 | (%tree-model-foreach model id))) |
326 | |
327 | (defbinding tree-model-row-changed () nil |
328 | (tree-model tree-model) |
329 | (path tree-path) |
330 | (iter tree-iter)) |
331 | |
332 | (defbinding tree-model-row-inserted () nil |
333 | (tree-model tree-model) |
334 | (path tree-path) |
335 | (iter tree-iter)) |
336 | |
337 | (defbinding tree-model-row-has-child-toggled () nil |
338 | (tree-model tree-model) |
339 | (path tree-path) |
340 | (iter tree-iter)) |
341 | |
342 | (defbinding tree-model-row-deleted () nil |
343 | (tree-model tree-model) |
344 | (path tree-path) |
345 | (iter tree-iter)) |
346 | |
347 | (defbinding tree-model-rows-reordered () nil |
348 | (tree-model tree-model) |
349 | (path tree-path) |
350 | (iter tree-iter) |
351 | (new-order int)) |
352 | |
353 | |
354 | (defun column-types (model columns) |
355 | (map 'vector |
356 | #'(lambda (column) |
357 | (find-type-number (first (mklist column)))) |
358 | columns)) |
359 | |
360 | (defun column-index (model column) |
361 | (or |
362 | (etypecase column |
363 | (number column) |
364 | (symbol (position column (object-data model 'column-names))) |
365 | (string (position column (object-data model 'column-names) |
366 | :test #'string=))) |
367 | (error "~A has no column ~S" model column))) |
368 | |
369 | (defun tree-model-column-value-setter (model column) |
370 | (let ((setters (or |
371 | (object-data model 'column-setters) |
372 | (setf |
373 | (object-data model 'column-setters) |
374 | (make-array (tree-model-n-columns model) |
375 | :initial-element nil))))) |
376 | (let ((index (column-index model column))) |
377 | (or |
378 | (svref setters index) |
379 | (setf |
380 | (svref setters index) |
381 | (let ((setter |
382 | (mkbinding (column-setter-name model) |
383 | nil (type-of model) 'tree-iter 'int |
384 | (type-from-number (tree-model-get-column-type model index)) |
385 | 'int))) |
386 | #'(lambda (value iter) |
387 | (funcall setter model iter index value -1)))))))) |
388 | |
389 | (defun tree-model-row-setter (model) |
390 | (or |
391 | (object-data model 'row-setter) |
392 | (progn |
393 | ;; This will create any missing column setter |
394 | (loop |
395 | for i from 0 below (tree-model-n-columns model) |
396 | do (tree-model-column-value-setter model i)) |
397 | (let ((setters (object-data model 'column-setters))) |
398 | (setf |
399 | (object-data model 'row-setter) |
400 | #'(lambda (row iter) |
401 | (map nil #'(lambda (value setter) |
402 | (funcall setter value iter)) |
403 | row setters))))))) |
404 | |
405 | (defun (setf tree-model-column-value) (value model iter column) |
406 | (funcall (tree-model-column-value-setter model column) value iter) |
407 | value) |
408 | |
409 | (defun (setf tree-model-row-data) (data model iter) |
410 | (funcall (tree-model-row-setter model) data iter) |
411 | data) |
412 | |
413 | (defun %tree-model-set (model iter data) |
414 | (etypecase data |
415 | (vector (setf (tree-model-row-data model iter) data)) |
416 | (cons |
417 | (loop |
418 | as (column value . rest) = data then rest |
419 | do (setf (tree-model-column-value model iter column) value) |
420 | while rest)))) |
167450a3 |
421 | |
422 | |
423 | ;;; Tree Store |
424 | |
425 | (defbinding %tree-store-set-column-types () nil |
426 | (tree-store tree-store) |
2a8752b0 |
427 | ((length columns) unsigned-int) |
428 | (columns (vector gtype))) |
167450a3 |
429 | |
2a8752b0 |
430 | (defmethod initialize-instance ((tree-store tree-store) &key column-types |
431 | column-names) |
167450a3 |
432 | (call-next-method) |
2a8752b0 |
433 | (%tree-store-set-column-types tree-store column-types) |
434 | (when column-names |
435 | (setf (object-data tree-store 'column-names) column-names))) |
167450a3 |
436 | |
2a8752b0 |
437 | (defmethod column-setter-name ((tree-store tree-store)) |
438 | (declare (ignore tree-store)) |
439 | "gtk_tree_store_set") |
167450a3 |
440 | |
441 | (defbinding tree-store-remove () boolean |
442 | (tree-store tree-store) |
443 | (tree-iter tree-iter)) |
444 | |
2a8752b0 |
445 | (defbinding %tree-store-insert () nil |
167450a3 |
446 | (tree-store tree-store) |
2a8752b0 |
447 | (tree-iter tree-iter) |
167450a3 |
448 | (parent (or null tree-iter)) |
449 | (position int)) |
450 | |
2a8752b0 |
451 | (defun tree-store-insert |
452 | (store parent position &optional data (iter (make-instance 'tree-iter))) |
453 | (%tree-store-insert store iter parent position) |
454 | (when data (%tree-model-set store iter data)) |
455 | iter) |
456 | |
457 | (defbinding %tree-store-insert-before () nil |
167450a3 |
458 | (tree-store tree-store) |
2a8752b0 |
459 | (tree-iter tree-iter) |
167450a3 |
460 | (parent (or null tree-iter)) |
461 | (sibling (or null tree-iter))) |
462 | |
2a8752b0 |
463 | (defun tree-store-insert-after |
464 | (store parent sibling &optional data (iter (make-instance 'tree-iter))) |
465 | (%tree-store-insert-before store iter parent sibling) |
466 | (when data (%tree-model-set store iter data)) |
467 | iter) |
468 | |
469 | (defbinding %tree-store-insert-after () nil |
167450a3 |
470 | (tree-store tree-store) |
2a8752b0 |
471 | (tree-iter tree-iter) |
167450a3 |
472 | (parent (or null tree-iter)) |
473 | (sibling (or null tree-iter))) |
474 | |
2a8752b0 |
475 | (defun tree-store-insert-after |
476 | (store parent sibling &optional data (iter (make-instance 'tree-iter))) |
477 | (%tree-store-insert-after store iter parent sibling) |
478 | (when data (%tree-model-set store iter data)) |
479 | iter) |
480 | |
481 | (defbinding %tree-store-prepend () nil |
167450a3 |
482 | (tree-store tree-store) |
2a8752b0 |
483 | (tree-iter tree-iter) |
167450a3 |
484 | (parent (or null tree-iter))) |
485 | |
2a8752b0 |
486 | (defun tree-store-prepend |
487 | (store parent &optional data (iter (make-instance 'tree-iter))) |
488 | (%tree-store-prepend store iter parent) |
489 | (when data (%tree-model-set store iter data)) |
490 | iter) |
491 | |
492 | (defbinding %tree-store-append () nil |
167450a3 |
493 | (tree-store tree-store) |
2a8752b0 |
494 | (tree-iter tree-iter) |
167450a3 |
495 | (parent (or null tree-iter))) |
496 | |
2a8752b0 |
497 | (defun tree-store-append |
498 | (store parent &optional data (iter (make-instance 'tree-iter))) |
499 | (%tree-store-append store iter parent) |
500 | (when data (%tree-model-set store iter data)) |
501 | iter) |
502 | |
167450a3 |
503 | (defbinding (tree-store-is-ancestor-p "gtk_tree_store_is_ancestor") () boolean |
504 | (tree-store tree-store) |
505 | (tree-iter tree-iter) |
506 | (descendant tree-iter)) |
507 | |
508 | (defbinding tree-store-iter-depth () int |
509 | (tree-store tree-store) |
510 | (tree-iter tree-iter)) |
511 | |
512 | (defbinding tree-store-clear () nil |
513 | (tree-store tree-store)) |
514 | |
515 | (defbinding tree-store-reorder () nil |
516 | (tree-store tree-store) |
517 | (parent tree-iter) |
518 | (new-order (vector int))) |
519 | |
520 | (defbinding tree-store-swap () nil |
521 | (tree-store tree-store) |
522 | (a tree-iter) |
523 | (b tree-iter)) |
524 | |
525 | (defbinding tree-store-move-before () nil |
526 | (tree-store tree-store) |
527 | (iter tree-iter) |
528 | (psoition (or null tree-iter))) |
529 | |
530 | |
531 | (defbinding tree-store-move-after () nil |
532 | (tree-store tree-store) |
533 | (iter tree-iter) |
534 | (psoition tree-iter)) |
535 | |
536 | |
537 | |
538 | ;;; Tree View |
539 | |
2a8752b0 |
540 | (defmethod initialize-instance ((tree-view tree-view) &key column) |
541 | (call-next-method) |
542 | (mapc #'(lambda (column) |
543 | (tree-view-append-column tree-view column)) |
544 | (get-all initargs :column))) |
545 | |
546 | |
167450a3 |
547 | (defbinding tree-view-get-selection () tree-selection |
548 | (tree-view tree-view)) |
549 | |
550 | (defbinding tree-view-columns-autosize () nil |
551 | (tree-view tree-view)) |
552 | |
553 | (defbinding tree-view-append-column () int |
554 | (tree-view tree-view) |
555 | (tree-view-column tree-view-column)) |
556 | |
557 | (defbinding tree-view-remove-column () int |
558 | (tree-view tree-view) |
559 | (tree-view-column tree-view-column)) |
560 | |
561 | (defbinding tree-view-insert-column (view columnd position) int |
562 | (view tree-view) |
563 | (column tree-view-column) |
564 | ((if (eq position :end) -1 position) int)) |
565 | |
566 | (defbinding tree-view-get-column () tree-view-column |
567 | (tree-view tree-view) |
568 | (position int)) |
569 | |
570 | (defbinding tree-view-move-column-after () nil |
571 | (tree-view tree-view) |
572 | (column tree-view-column) |
573 | (base-column (or null tree-view-column))) |
574 | |
575 | ;;(defbinding tree-view-set-column drag-function ...) |
576 | |
577 | (defbinding tree-view-scroll-to-point () nil |
578 | (tree-view tree-view) |
579 | (tree-x int) |
580 | (tree-y int)) |
581 | |
582 | (defbinding tree-view-scroll-to-cell () nil |
583 | (tree-view tree-view) |
584 | (path (or null tree-path)) |
585 | (column (or null tree-view-column)) |
586 | (use-align boolean) |
587 | (row-align single-float) |
588 | (col-align single-float)) |
589 | |
590 | (defbinding tree-view-set-cursor () nil |
591 | (tree-view tree-view) |
592 | (path tree-path) |
593 | (focus-column tree-view-column) |
594 | (start-editing boolean)) |
595 | |
596 | (defbinding tree-view-set-cursor-on-cell () nil |
597 | (tree-view tree-view) |
598 | (path tree-path) |
599 | (focus-column (or null tree-view-column)) |
600 | (focus-cell (or null cell-renderer)) |
601 | (start-editing boolean)) |
602 | |
603 | (defbinding tree-view-get-cursor () nil |
604 | (tree-view tree-view) |
605 | (path tree-path :out ) |
606 | (focus-column tree-view-column :out)) |
607 | |
608 | (defbinding tree-view-row-activated () nil |
609 | (tree-view tree-view) |
610 | (path tree-path ) |
611 | (column tree-view-column)) |
612 | |
613 | (defbinding tree-view-expand-all () nil |
614 | (tree-view tree-view)) |
615 | |
616 | (defbinding tree-view-collapse-all () nil |
617 | (tree-view tree-view)) |
618 | |
619 | (defbinding tree-view-expand-to-path () nil |
620 | (tree-view tree-view) |
621 | (path tree-path)) |
622 | |
623 | (defbinding tree-view-expand-row () nil |
624 | (tree-view tree-view) |
625 | (path tree-path) |
626 | (open-all boolean)) |
627 | |
628 | (defbinding tree-view-collapse-row () nil |
629 | (tree-view tree-view) |
630 | (path tree-path)) |
631 | |
632 | (def-callback-marshal %tree-view-mapping-func (nil tree-view tree-path)) |
633 | |
634 | (defbinding %tree-view-map-expanded-rows () nil |
635 | (tree-view tree-view) |
636 | ((callback %tree-view-mapping-func) pointer) |
637 | (callback-id unsigned-int)) |
638 | |
639 | (defun map-expanded-rows (function tree-view) |
640 | (with-callback-function (id function) |
641 | (%tree-view-map-expanded-rows tree-view id))) |
642 | |
643 | (defbinding (tree-view-row-expanded-p "gtk_tree_view_row_expanded") () boolean |
644 | (tree-view tree-view) |
645 | (path tree-path)) |
646 | |
647 | (defbinding tree-view-get-path-at-pos |
648 | (tree-view x y &optional (cell-x 0) (cell-y 0)) boolean |
649 | (tree-view tree-view) |
650 | (x int) |
651 | (y int) |
652 | (path tree-path :out) |
653 | (column tree-view-column :out) |
654 | (cell-x int) |
655 | (cell-y int)) |
656 | |
657 | (defbinding tree-view-get-cell-area () nil |
658 | (tree-view tree-view) |
659 | (path (or null tree-path)) |
660 | (column (or null tree-view-column)) |
2a8752b0 |
661 | ((make-instance 'gdk:rectangle) gdk:rectangle :return)) |
167450a3 |
662 | |
663 | (defbinding tree-view-get-background-area () nil |
664 | (tree-view tree-view) |
665 | (path (or null tree-path)) |
666 | (column (or null tree-view-column)) |
2a8752b0 |
667 | ((make-instance 'gdk:rectangle) gdk:rectangle :return)) |
167450a3 |
668 | |
669 | (defbinding tree-view-get-visible-rect () nil |
670 | (tree-view tree-view) |
2a8752b0 |
671 | ((make-instance 'gdk:rectangle) gdk:rectangle :return)) |
167450a3 |
672 | |
673 | ;; and many more functions which we'll add later |
674 | |
2a8752b0 |
675 | |
676 | ;;; Tree View Column |
677 | |