Correction - using OPAL:DIRECTORY-P [Re: A simple aggretrees demo]
Sean Champ <[email protected]> Tue, 2 Aug 2005 21:34:13 -0700
| Newsgroups | gmane.lisp.garnet.user |
|---|---|
| Message-ID | <[email protected]> |
I'd not updated the function, file-tree.create, after the
revision of OPAL:DIRECTORY-P (proposed in a patch in a previous
message), and before sending the message to the list.
In the function file-tree.create, the definition for the
:children-function slot should be:
(:children-function
#'(lambda (node)
(when (opal:directory-p node)
(directory node
#+cmu :follow-links #+cmu nil
#+cmu :truenamep #+cmu nil))))
Below is the updated code, in full, tested and runnable.
--
Sean Champ
[email protected]
(in-package #:cl-user)
(garnet-load "contrib-src:aggretrees")
(defun file-tree.create (pathname)
(create-instance nil gg:aggretree-2
(:expansion-level 1)
(:tree pathname)
(:children-function
#'(lambda (node)
(when (opal:directory-p node)
(directory node
#+cmu :follow-links #+cmu nil
#+cmu :truenamep #+cmu nil))))
(:node-prototype
(create-instance nil opal:text
(:string (o-formula (namestring (gvl :tree))))))
(:interactors
;; now, how is this used in an aggretree?
`((:selection-inter ,inter:button-interactor
(:window ,(o-formula (gv-local :self :operates-on :window)))
(:start-where ,(o-formula (list :element-of
(gvl :operates-on
:nodes-aggregate))))
(:start-event :leftdown)
(:final-function
,#'(lambda (inter ob)
(let ((level (g-value ob :expansion-level)))
(s-value ob :expansion-level
(if (> level 0) 0 1))
(gg:revert-aggretree-node
(g-value ob :parent :parent) ob)
(opal:update (g-value ob :window) t)))))))))
(defun file-tree.show (pathname)
(let* ((aggretree (file-tree.create pathname))
(window (create-instance nil inter:interactor-window
(:aggregate aggretree))))
(opal:update window)
(inter:main-event-loop)
(values window)))
;; e.g: (defparameter *w* (file-tree.show "/"))
(defun file-tree.stop (window)
(opal:destroy window))
;; e.g: (file-tree.stop *w*)