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