Re: Calling specific method

"Tim Bradshaw (as tfb at tfeb dot org)" <[email protected]> Fri, 17 Apr 2026 18:53:30 +0100
Newsgroups gmane.lisp.lispworks.general
Message-ID <[email protected]>
On 17 Apr 2026, at 18:12, Tim Bradshaw (as tfb at cley dot com) <[email protected]> wrote:
> 
> If you (rather than the system) are calling MPDC then it's likely better to write your own, in terms of a GF called, say, walk-pane-p which will normally return t but will have a method returning nil for your pane.  You can use map-pane-children to do each level.


This is an attempt at that.  Caveat emptor

(defgeneric walk-pane-p (pane)
  ;; Define a method on this for a class you don't want to walk
  (:method (pane)
   (declare (ignorable pane))
   t))

(defun mpdc (pane f &key visible test reverse leaf-only)
  (let ((pane-leaf t))
    (when (walk-pane-p pane)
      (map-pane-children pane (lambda (c)
                                (setf pane-leaf nil)
                                (mpdc c f
                                      :visible visible :test test :reverse reverse
                                      :leaf-only leaf-only))
                         :reverse reverse))
    (when (and (or (not test) (funcall test pane))
               (or (not visible) (interface-visible-p pane))
               (or (not leaf-only) pane-leaf))
      (funcall f pane)))



_______________________________________________
Lisp Hug - the mailing list for LispWorks users
[email protected]
http://www.lispworks.com/support/lisp-hug.html