Module: environment-tools Synopsis: Project settings Author: Chris Page, Jason Trenouth 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 /// Project settings define constant $compilation-mode-descriptions = #["This setting controls trade-offs between speed and efficiency", "at compile-time and run-time."]; define constant $loose-mode-descriptions = #["Recommended during initial development of a project.", "Faster compilation, less efficient generated code.", "Fewer errors detected at compile-time.", "More information available when debugging.", "Allows both interactive evaluation and redefinition."]; define constant $tight-mode-descriptions = #["Recommended for delivered applications.", "Slower compilation, more efficient generated code.", "More error-detection at compile-time.", "Less information available when debugging.", "Allows limited interactive evaluation, but not redefinition."]; define pane () sealed constant slot %enabled? :: = #t, init-keyword: enabled?:; sealed slot %compilation-mode :: , required-init-keyword: compilation-mode:; pane %loose-mode-button-layout (pane) vertically () make(, enabled?: pane.%enabled?, id: #"loose", label: "Interactive development mode"); make-description-layout($loose-mode-descriptions) end; pane %tight-mode-button-layout (pane) vertically () make(, enabled?: pane.%enabled?, id: #"tight", label: "Production mode"); make-description-layout($tight-mode-descriptions) end; pane %compilation-mode-pane (pane) make(, child: vertically (spacing: 4) make-labels-layout($compilation-mode-descriptions); pane.%loose-mode-button-layout; pane.%tight-mode-button-layout; end, max-width: $fill, value: pane.%compilation-mode, value-changed-callback: method (box) pane.%compilation-mode := gadget-value(box) end); layout (pane) grouping ("Compilation mode", max-width: $fill) pane.%compilation-mode-pane end grouping; end pane ; define function make-description-layout (descriptions :: ) => (layout :: ) make(, children: vector(make(, width: 12, fixed-width?: #t), make-labels-layout(descriptions, prefix: "* ", y-spacing: 2, border: 2)), fixed-height?: #t) end function make-description-layout; define pane () sealed constant slot %enabled? :: = #t, init-keyword: enabled?:; sealed slot %target-name :: false-or(), required-init-keyword: target-name:; sealed slot %target-type :: , required-init-keyword: target-type:; sealed slot %interface-type :: , required-init-keyword: interface-type:; sealed slot %base-address :: false-or(), required-init-keyword: base-address:; sealed slot %major-version :: false-or(), required-init-keyword: major-version:; sealed slot %minor-version :: false-or(), required-init-keyword: minor-version:; pane %target-name-pane (pane) make(, enabled?: pane.%enabled?, value: as(, pane.%target-name), value-changed-callback: method (gadget :: ) let full-name = gadget.gadget-value; let locator = as(, full-name); let base = locator.locator-base; let type = locator.environment-locator-type; let type = select (type by \=) #"dll" => #"dll"; #"exe" => #"executable"; otherwise => pane.%target-type; end; update-link-settings(pane, full-name, type) end); pane %target-type-pane (pane) make(, enabled?: pane.%enabled?, items: #[#["&Executable", #"executable"], #["&Dynamic Link Library (DLL)", #"DLL"]], value: pane.%target-type, label-key: first, value-key: second, value-changed-callback: method (gadget :: ) let type = gadget.gadget-value; let old-name = pane.%target-name.locator-base; let type-name = select (type) #"dll" => ".dll"; #"executable" => ".exe"; end; let name = concatenate(old-name, type-name); update-link-settings(pane, name, type) end); pane %interface-type-pane (pane) make(, enabled?: pane.%enabled?, items: #[#["Windows GUI", #"gui"], #["Windows Console", #"console"]], value: pane.%interface-type, label-key: first, value-key: second, value-changed-callback: method (gadget) pane.%interface-type := gadget.gadget-value end); pane %base-address-pane (pane) make(, enabled?: pane.%enabled?, value-type: , value: pane.%base-address, value-changing-callback: method (gadget) pane.%base-address := gadget.gadget-value end); pane %major-version-pane (pane) make(, enabled?: pane.%enabled?, value-type: , value: pane.%major-version, value-changing-callback: method (gadget) pane.%major-version := gadget.gadget-value end); pane %minor-version-pane (pane) make(, enabled?: pane.%enabled?, value-type: , value: pane.%minor-version, value-changing-callback: method (gadget) pane.%minor-version := gadget.gadget-value end); layout (pane) vertically (spacing: 8) grouping ("Target file", max-width: $fill) make(, y-spacing: 2, contents: vector(vector(make(