Here's my effort at an expander. It doesn't have the arrow's yet. I was trying to get the expanding bit working correctly first. It works the first time (i.e. you can expand it once, then unexpand) but after that it kills the kids and can't re-create them again. Any hints?
(defmodel expander (frame-stack) ((label :initarg :label :accessor label :initform "") (expanded :initarg :expanded :accessor expanded :initform (c-in nil)) (expansion :initarg :expansion :accessor expansion :initform nil)) (:default-initargs))
(defmacro mk-expander ((&rest initargs) &rest kids) `(make-instance 'expander ,@initargs :fm-parent *parent* :expansion (c? (the-kids ,@kids)) :expanded (c-in nil) :kids (c? (the-kids (mk-button-ex ((^label) (setf (expanded (upper self expander)) (not (expanded (upper self expander)))))) (when (^expanded) (^expansion))))))
;; test the expander (defmodel test-win (window) () (:default-initargs :kids (c? (the-kids (mk-stack (:packing (c?pack-self)) (mk-label :text "hi") (mk-expander (:label "expander") (mk-stack () (mk-label :text "expanded"))) (mk-label :text "ho"))))))
(defun test () (test-window 'test-win t))
Cheers, Andy