Module: duim-gadgets-internals Synopsis: DUIM gadgets 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 /// Gadget box pane implementation class // Implements the adding of buttons to a gadget box to represent the items define abstract class () sealed slot frame-manager :: false-or() = #f, init-keyword: frame-manager:; sealed slot gadget-box-button-class :: false-or() = #f, init-keyword: button-class:; sealed slot gadget-box-buttons :: = #[]; end class ; define open generic button-class-for-gadget-box (box); define method gadget-box-button-value (box :: , item) let value-key = gadget-value-key(box); select (gadget-selection-mode(box)) #"none" => value-key(item); otherwise => #f; end end method gadget-box-button-value; define method make-button-for-gadget-box (box :: , item, button-class) => (button :: ) let selection-mode = gadget-selection-mode(box); let documentation = gadget-documentation(box); let label = gadget-item-label(box, item); let framem = frame-manager(box); with-frame-manager (framem) make-pane(button-class, selection-mode: selection-mode, button-style: push-button-like?(box) & #"push-button", enabled?: gadget-enabled?(box), client: box, label: label, documentation: documentation, value: gadget-box-button-value(box, item), foreground: default-foreground(box), background: default-background(box), text-style: default-text-style(box)) end end method make-button-for-gadget-box; define function make-buttons-for-gadget-box (box :: , items :: ) => (buttons :: ) let button-class = gadget-box-button-class(box) | button-class-for-gadget-box(box); // Make a stretchy vector of the buttons because these are going // to go into the children of some lucky sheet... let buttons = map-as(, method (item) make-button-for-gadget-box(box, item, button-class) end, items); gadget-box-buttons(box) := buttons end function make-buttons-for-gadget-box; define method gadget-box-button-index (box :: , button ::