Module: environment-protocols Synopsis: Environment protocols Author: 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 /// DUIM objects /// /// Any object in a DUIM hierarchy. define sealed class () end class ; define open generic duim-object-composite? (server :: , duim-object :: ) => (composite? :: ); define open generic do-duim-object-children (function :: , server :: , duim-object :: ) => (); /// DUIM IDs define constant $duim-sheets-library-id = make(, name: "duim-sheets"); define constant $duim-sheets-module-id = make(, name: "duim-sheets", library: $duim-sheets-library-id); define constant $duim-sheets-internals-module-id = make(, name: "duim-sheets-internals", library: $duim-sheets-library-id); define constant $port-displays-id = make(, name: "port-displays", module: $duim-sheets-internals-module-id); define constant $port-frame-managers-id = make(, name: "port-frame-managers", module: $duim-sheets-internals-module-id); define constant $frame-manager-frames-id = make(, name: "frame-manager-frames", module: $duim-sheets-module-id); define constant $sheet-children-id = make(, name: "sheet-children", module: $duim-sheets-module-id); define constant $duim-gadgets-library-id = make(, name: "duim-gadgets"); define constant $duim-gadgets-module-id = make(, name: "duim-gadgets", library: $duim-gadgets-library-id); define constant $gadget-label-id = make(, name: "gadget-label", module: $duim-gadgets-module-id); define constant $duim-frames-library-id = make(, name: "duim-frames"); define constant $duim-frames-module-id = make(, name: "duim-frames", library: $duim-frames-library-id); define constant $duim-frames-internals-module-id = make(, name: "duim-frames-internals", library: $duim-frames-library-id); define constant $frame-title-id = make(, name: "frame-title", module: $duim-frames-module-id); define constant $frame-menu-bar-id = make(, name: "%menu-bar", module: $duim-frames-internals-module-id); define constant $frame-tool-bar-id = make(, name: "%tool-bar", module: $duim-frames-internals-module-id); define constant $frame-layout-id = make(, name: "%layout", module: $duim-frames-internals-module-id); define constant $frame-status-bar-id = make(, name: "%status-bar", module: $duim-frames-internals-module-id); // DUIM classes define user-object-class () binding , module: duim-sheets, library: duim-sheets; end user-object-class ; define user-object-class () binding , module: duim-sheets, library: duim-sheets; end user-object-class ; define user-object-class () binding , module: duim-sheets, library: duim-sheets; end user-object-class ; define user-object-class () binding , module: duim-sheets, library: duim-sheets; end user-object-class ; define user-object-class () binding , module: duim-gadgets, library: duim-gadgets; end user-object-class ; /// Project dispatching methods define method duim-object-composite? (server :: , object :: ) => (composite? :: ) #t end method duim-object-composite?; define method duim-object-composite? (server :: , sheet :: ) => (composite? :: ) //---*** Need a way to test if the slot exists user-object-slot-value(server, sheet, $sheet-children-id) ~= #f end method duim-object-composite?; define method do-duim-object-children (function :: , server :: , object :: ) => () #f end method do-duim-object-children; define method do-duim-object-children (function :: , server :: , sheet :: ) => () let displays = user-object-slot-value(server, sheet, $port-displays-id); displays & do-collection-elements(function, server, displays); let frame-managers = user-object-slot-value(server, sheet, $port-frame-managers-id); frame-managers & do-collection-elements(function, server, frame-managers); end method do-duim-object-children; define method do-duim-object-children (function :: , server :: , sheet :: ) => () let children = user-object-slot-value(server, sheet, $frame-manager-frames-id); children & do-collection-elements(function, server, children) end method do-duim-object-children; define method do-duim-object-children (function :: , server :: , sheet :: ) => () let children = user-object-slot-value(server, sheet, $sheet-children-id); children & do-collection-elements(function, server, children) end method do-duim-object-children; define method do-duim-object-children (function :: , server :: , frame :: ) => () local method maybe-call (object :: false-or()) => () if (instance?(object, )) function(object) end end method maybe-call; maybe-call(user-object-slot-value(server, frame, $frame-menu-bar-id)); maybe-call(user-object-slot-value(server, frame, $frame-tool-bar-id)); maybe-call(user-object-slot-value(server, frame, $frame-layout-id)); maybe-call(user-object-slot-value(server, frame, $frame-status-bar-id)); end method do-duim-object-children; define method get-environment-object-primitive-name (project :: , frame :: ) => (name :: false-or()) #f end method get-environment-object-primitive-name; define method get-environment-object-primitive-name (project :: , frame :: ) => (name :: false-or()) let object = user-object-slot-value(project, frame, $frame-title-id); if (instance?(object, )) environment-object-primitive-name(project, object) end end method get-environment-object-primitive-name; define method get-environment-object-primitive-name (project :: , gadget :: ) => (name :: false-or()) let object = user-object-slot-value(project, gadget, $gadget-label-id); if (instance?(object, )) environment-object-primitive-name(project, object) end end method get-environment-object-primitive-name; /// Some convenience functions built on these protocols define function duim-object-children (server :: , object :: ) => (children :: ) collect-environment-objects(do-duim-object-children, server, object) end function duim-object-children; /// Printing support define method environment-object-type-name (object :: ) => (name :: ) "Sheet" end method environment-object-type-name; define method environment-object-type-name (object :: ) => (name :: ) "Frame" end method environment-object-type-name; define method environment-object-type-name (object :: ) => (name :: ) "Gadget" end method environment-object-type-name;