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