Module: duim-frames-internals Synopsis: DUIM frames Author: Scott McKay, Andy Armstrong Copyright: Original Code is Copyright (c) 1995-2004 Functional Objects, Inc. All rights reserved. License: Functional Objects Library Public License Version 1.0 Dual-license: GNU Lesser General Public License Warranty: Distributed WITHOUT WARRANTY OF ANY KIND /// Containers define protocol <> () function contain (object, #key, #all-keys) => (object, frame :: ); function make-container (object, #key, #all-keys) => (frame :: ); end protocol <>; define variable *contain-uses-own-thread?* :: = #f; define method contain (pane, #rest initargs, #key own-thread? = *contain-uses-own-thread?*, #all-keys) => (pane :: , frame :: ) dynamic-extent(initargs); with-keywords-removed (initargs = initargs, #[owner:]) let container = apply(make-container, pane, initargs); local method start-container-frame () => () with-abort-restart () start-frame(container) end end method; if (own-thread?) make(, name: frame-title(container), function: start-container-frame) else start-container-frame() end; values(pane, container) end end method contain; define method contain (class :: , #rest initargs, #key) => (pane :: , frame :: ) dynamic-extent(initargs); apply(contain, make(class), initargs) end method contain; define method make-container (frame :: , #rest initargs, #key) => (frame :: ) ignore(initargs); frame end method make-container; /// Container frames define sealed class () sealed constant slot container-uses-own-thread? :: = *contain-uses-own-thread?*, init-keyword: own-thread?:; end class ; define sealed domain make (singleton()); define sealed domain initialize (); // Wraps an object into a container frame define method make-container-frame (object, #rest initargs, #key own-thread? = *contain-uses-own-thread?*, #all-keys) => (frame :: ) dynamic-extent(initargs); apply(make, , title: "Container", initargs) end method make-container-frame; /// General containers define method make-container (layout :: , #rest initargs, #key) => (frame :: ) dynamic-extent(initargs); apply(make-container-frame, layout, layout: layout, initargs) end method make-container; define method make-container (sheet :: , #rest initargs, #key) => (frame :: ) dynamic-extent(initargs); apply(make-container, make(, children: vector(sheet)), initargs) end method make-container; /// Menu containers define method make-container (menu-bar :: , #rest initargs, #key) => (frame :: ) dynamic-extent(initargs); apply(make-container-frame, menu-bar, menu-bar: menu-bar, initargs) end method make-container; define method make-container (menu :: , #rest initargs, #key) => (frame :: ) dynamic-extent(initargs); apply(make-container, make(, children: vector(menu)), initargs) end method make-container; define method make-container (component :: , #rest initargs, #key) => (frame :: ) dynamic-extent(initargs); apply(make-container, make(, label: "Menu", children: vector(component)), initargs) end method make-container; define method make-container (button :: , #rest initargs, #key) => (frame :: ) dynamic-extent(initargs); apply(make-container, make(, label: "Menu", children: vector(button)), initargs) end method make-container; /// Command table containers define method make-container (command-table :: , #rest initargs, #key) => (frame :: ) dynamic-extent(initargs); apply(make-container-frame, command-table, command-table: command-table, initargs) end method make-container; /// Status bar and tool bar containers define method make-container (status-bar :: , #rest initargs, #key) => (frame :: ) dynamic-extent(initargs); apply(make-container-frame, status-bar, status-bar: status-bar, initargs) end method make-container; define method make-container (tool-bar :: , #rest initargs, #key) => (frame :: ) dynamic-extent(initargs); apply(make-container-frame, tool-bar, tool-bar: tool-bar, initargs) end method make-container;