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 /// Generic implementation of using just buttons // This is really a mixin class, but you can do 'make-pane' on it, so // we'll go with the more appetizing name... define open abstract class (, ) end class ; define method button-class-for-gadget-box (box :: ) => (class :: ) end method button-class-for-gadget-box; define method gadget-pane-default-layout-class (box :: ) => (class) #f end method gadget-pane-default-layout-class; define method gadget-box-buttons-parent (box :: ) => (sheet :: ) box end method gadget-box-buttons-parent; define function menu-box-pane-selection-mode-class (selection-mode :: ) => (class :: ) select (selection-mode) #"none" => ; #"single" => ; #"multiple" => ; end end function menu-box-pane-selection-mode-class; define sealed inline method make (class == , #rest initargs, #key selection-mode :: = #"none", #all-keys) => (component :: ) apply(make, menu-box-pane-selection-mode-class(selection-mode), initargs) end method make; // Relaying-out a menu box doesn't make any sense, so just do nothing define method relayout-parent (sheet :: , #key width, height) => (did-layout? :: ) ignore(width, height); #f end method relayout-parent; define sealed class (, , ) end class ; define method class-for-make-pane (framem :: , class == , #key) => (class :: , options :: false-or()) values(, #f) end method class-for-make-pane; define sealed domain make (singleton()); define sealed domain initialize (); define method do-execute-activate-callback (button :: , box :: , id) => () ignore(id); gadget-value(box) := gadget-value(button); execute-activate-callback(box, gadget-client(box), gadget-id(box)); next-method() end method do-execute-activate-callback; define sealed class (, , ) end class ; define method class-for-make-pane (framem :: , class == , #key) => (class :: , options :: false-or()) values(, #f) end method class-for-make-pane; define sealed domain make (singleton()); define sealed domain initialize (); define method do-execute-value-changed-callback (button :: , box :: , id) => () ignore(id); gadget-selection(box, do-callback?: #t) := if (gadget-value(button) == #t) vector(gadget-box-button-index(box, button)) else #[] end; next-method() end method do-execute-value-changed-callback; define sealed class (, , ) end class ; define method class-for-make-pane (framem :: , class == , #key) => (class :: , options :: false-or()) values(, #f) end method class-for-make-pane; define sealed domain make (singleton()); define sealed domain initialize (); define method do-execute-value-changed-callback (button :: , box :: , id) => () ignore(id); let index = gadget-box-button-index(box, button); let new-selection = if (gadget-value(button) == #t) add-new(gadget-selection(box), index) else remove(gadget-selection(box), index) end; gadget-selection(box, do-callback?: #t) := new-selection; next-method() end method do-execute-value-changed-callback;