Module: database-viewer Author: Andy Armstrong, Keith Playford Synopsis: A simple database viewer 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 //// Parameters. // define constant $default-database-viewer-database = "Northwind"; define constant $default-database-viewer-database = "testDB"; define constant $default-database-viewer-width = 700; define constant $default-database-viewer-height = 500; //// Select viewer frame. define frame () // I don't seem to able to introspect to find this out from DUIM... slot connection :: , required-init-keyword: connection:; slot columns-displayed :: = 0; pane file-menu (frame) make(, label: "&File", children: vector(make(, label: "New Select Viewer", activate-callback: method (#rest args) let name = choose-string(title: "Database name", owner: frame); name & spawn-database-viewer(name) end), make(, label: "Close", activate-callback: method (sheet) exit-frame(sheet-frame(sheet)) end))); pane tree-pane (frame) make(, roots: vector(frame.connection), depth: 2, value: frame.connection, /* icon-function: method (info) select (info by instance?) => $examples-bitmap; => $examples-bitmap; => $project-bitmap; end select; end method, */ children-predicate: method (node) select (node by instance?) => #t; otherwise => #f; end end, children-generator: method (node) select (node by instance?) => list-all-catalogs(node); otherwise => #[]; end end, use-buttons-only?: #f, /* activate-callback: method (gadget) let dialog = sheet-frame(gadget); exit-dialog(dialog) end, value-changed-callback: method (gadget) let dialog = sheet-frame(gadget); let info = gadget-value(gadget); note-example-selected(dialog, info) end method, */ label-key: method (node) select (node by instance?) => datasource-name(database(node)); => database-object-name(node); otherwise => format-to-string("%=", node); end end); pane sql-pane (frame) make(, items: #(), activate-callback: sql-entry-callback); pane results-pane (frame) make(, headings: #[], generators: #[], items: #[]); pane splitter-pane (frame) make(, ratios: #[1, 2], children: vector(frame.tree-pane, frame.results-pane)); layout (frame) vertically (spacing: 2) make(); horizontally (spacing: 2, y-alignment: #"center") make(