tree-view behaves differently than what I'd expect from the documentation: * :selected-item as documented for choice isn't respected * a capi:item's :text or :print-function aren't respected Is it just a lack of understanding on my side? I think the documentation could explain the behaviour better, and your questions will help us with that. I'm using LispWorks Personal 4.3.7 for Windows. Below are variations of an example from the list-panel documentation to show what I mean. -- René ;;; :selected-item ;; works in list-panel (capi:contain (make-instance 'capi:list-panel :items '(:red :blue :green) :selected-item :blue :print-function 'string-capitalize)) ;; doesn't work in tree-view (capi:contain (make-instance 'capi:tree-view :roots '(:red :blue :green) :selected-item :blue :print-function 'string-capitalize)) CAPI:TREE-VIEW does not compute its items until display time, so one way to set the initial selection is to add an :AFTER method on CAPI:INTERFACE-DISPLAY e.g. (capi:define-interface my-tree () ((favourite-color :initform :blue)) (:panes (tree capi:tree-view :roots '(:red :blue :green) :print-function 'string-capitalize)) (:default-initargs :width 200 :height 200)) (defmethod capi:interface-display :after ((self my-tree)) (with-slots (tree favourite-color) self (setf (capi:choice-selected-item tree) favourite-color))) ;;; capi:item :text ;; works in list-penel: (capi:contain (make-instance 'capi:list-panel :items (list (make-instance 'capi:item :text "foo" :data (vector "foov"))))) ;; doesn't work in tree-view: (capi:contain (make-instance 'capi:tree-view :roots (list (make-instance 'capi:item :text "foo" :data (vector "foov"))))) To clarify: the CAPI:ITEM's TEXT slot is set correctly. It's just that the print-function is not using that text. A system print method that does use the text is called when the item is known to be associated with the collection (this is the common case where the CAPI makes an item object itself). So to make your example behave as you expect, you could modify it like this: (let ((my-tree (make-instance 'capi:tree-view))) (setf (capi:tree-view-roots my-tree) (list (make-instance 'capi:item :text "foo" :collection my-tree :data (vector "foov")))) (capi:contain my-tree)) ;;; capi:item :print-function ;;; works in list-panel (capi:contain (make-instance 'capi:list-panel :items (list (make-instance 'capi:item :print-function #'(lambda (data) (string-capitalize (svref data 0))) :data (vector "foov"))))) ;; doesn't work in tree-view (capi:contain (make-instance 'capi:tree-view :roots (list (make-instance 'capi:item :print-function #'(lambda (data) (string-capitalize (svref data 0))) :data (vector "foov"))))) You could change this similarly to the above, or simply move the print-function to the collection object: (capi:contain (make-instance 'capi:tree-view :roots (list (make-instance 'capi:item :data (vector "foov"))) :print-function #'(lambda (item) (string-capitalize (svref (capi:item-data item) 0))))) or even define your own method on CAPI:PRINT-COLLECTION-ITEM: (defclass my-tree-view (capi:tree-view) ()) (defmethod capi:print-collection-item ((item capi:item) (tree my-tree-view)) (string-capitalize (svref (capi:item-data item) 0))) (capi:contain (make-instance 'my-tree-view :roots (list (make-instance 'capi:item :data (vector "foov"))))) -- Dave Fox Xanalys http://www.lispworks.com Compass House Vision Park, Chivers Way Histon Cambridge, CB4 9AD England