CLIM mail archive
[Prev][Next][Index][Thread]
Re: updating-output and recursive use of formatting-graph-from-root
Stefan,
In your example:
Lost in helplessness - Stefan B.
;;;What follows is the display method for the tree-pane:
(defmethod draw-tree-as-tree ((frame tree1) stream)
(let ((tree (tree1-tree frame)))
(labels
((draw-subtree (subtree stream)
(let* ((inferior-producer #'(lambda (node)
;; just return the direct inferiors
(and (eql node subtree)
(tree-node-expanded node)
(tree-node-children node)))))
(updating-output (stream
:unique-id subtree
:cache-value (tree-node-tick-mark subtree)
:cache-test #'=)
(with-output-as-presentation (:stream stream
:object subtree
:type 'tree)
(cond ((and (tree-node-children subtree)
(tree-node-expanded subtree))
; we have to draw a tree
(format-graph-from-root
subtree
#'(lambda (node stream)
(if (eql node subtree)
(format stream "~A"
; draw root node
(tree-node-value node))
(draw-subtree node stream)))
; draw sons as trees
inferior-producer
:stream stream))
(t ; we have to draw a leaf
(format stream "~A" (tree-node-value subtree)))))))))
(draw-subtree tree stream))))
It looks like you're trying to call format-graph-from-root
recursively, which I don't believe you want. In effect, you are
giving format-graph-from-root the form to create a whole subtree where
it only wants the form to draw one node of the tree. I think you may
accomplish what you want by giving a single-node drawing form to
f-g-f-r as the printer, with that form including an updating-output
and an output-record producing form (like a presentation). Your code
is trying to draw the tree itself, which frmat-.. already does.
Or, I could be totally off on this.
Jeff
Follow-Ups:
References:
Main Index |
Thread Index