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*)