Removing all evidence of a tab layout
I have a nested tab layout which I populate from my program. I'd like
to be able to return the interface to its initial, clean state before
the tabs were populated.
I have experimented with setting collection-items and
layout-descriptions to nil, but haven't managed to remove the pinboard
from the interface.
This example displays the nested tabs which are initialized from the
"Init tabs" menu item. I would like everything to be cleaned up by the
"Remove tabs" menu item. Thanks for any advice.
(capi:define-interface tab-test ()
()
(:layouts
(test-tab-layout
capi:tab-layout
'()
:accessor test-tab-layout
:print-function 'first
:visible-child-function 'second)
(main-layout
capi:row-layout
'(test-tab-layout)))
(:menus
(file-menu
"Actions"
(("Init tabs"
:callback 'initialize-test-tabs
:callback-type :interface)
("Remove tabs"
:callback 'remove-tabs
:callback-type :interface))))
(:menu-bar file-menu)
(:default-initargs
:layout 'main-layout
:best-height 400
:best-width 400))
(defun initialize-test-tabs (tab-interface)
(let ((level-1-tab-layout))
(dotimes (i 3)
(setf level-1-tab-layout
(make-instance
'capi:tab-layout
:tabs-position :bottom
:items '("One" "Two")
:description
(list (make-instance
'capi:pinboard-layout
:background (nth i (list :white :blue :red))
:visible-border t
:interface tab-interface))))
(capi:append-items
(test-tab-layout tab-interface)
(list (list
(nth i (list "Tab One" "Tab Two" "Tab Three"))
level-1-tab-layout))))))
(defun remove-tabs (tab-interface)
(dotimes (i (length (capi:collection-items (test-tab-layout
tab-interface))))
(setf (capi:layout-description
(second
(svref (capi:collection-items (test-tab-layout
tab-interface)) i)))
nil)
(setf (capi:collection-items
(second
(svref (capi:collection-items (test-tab-layout
tab-interface)) i)))
nil))
(setf (capi:collection-items (test-tab-layout tab-interface))
nil))
(defun test-tab ()
(capi:display (make-instance 'tab-test)))
(test-tab)