-- File: Palm.mesa -- Contents: Interface to Palm browser. -- Created by: Rick Cattell on 11-Dec-81 12:29:29 -- Last edited by: -- Rick on: March 18, 1982 1:46 pm -- Willie-Sue on: October 22, 1982 12:04 pm DIRECTORY DBView, MBQueue USING [Queue], Nut USING[CreateProc, DisplayProc, EditProc, QueryProc], Buttons, Menus, Rope, TypeScript, ViewerClasses, VFonts; Palm: DEFINITIONS IMPORTS VFonts = BEGIN OPEN DBView; Viewer: TYPE = ViewerClasses.Viewer; ROPE: TYPE = Rope.ROPE; Queue: TYPE = MBQueue.Queue; -- ******************************************************** -- Handy Procedures for dealing with viewers (NutViewerImpl.mesa) -- ******************************************************** NextTextViewer: PROC[sib: Viewer] RETURNS [nV: Viewer]; -- creates text viewer on line following sib, full width of sib.parent NextRightTextViewer: PROC[sib: Viewer, w: INTEGER] RETURNS [nV: Viewer]; -- creates a text viewer, next right on the same line as v FirstLabel: PROC[name: ROPE, parent: Viewer] RETURNS [nV: Viewer]; -- makes a label which is the first one in a viewer, at standard Y value AnotherLabel: PROC[name: ROPE, sib: Viewer, newLine: BOOL← FALSE] RETURNS [nV: Viewer]; -- sib is a viewer to the left or above the label to be made -- ALL menus/buttons are serialized now -- IF q=NIL THEN uses defaultDBQueue to serialize clicks FirstButton: PROC[q: Queue, name: ROPE, proc: Buttons.ButtonProc, parent: Viewer, data: REF ANY← NIL, border: BOOL← FALSE, guarded: BOOL← FALSE, font: VFonts.Font ← VFonts.defaultFont] RETURNS [nV: Viewer]; -- makes a button which is the first one in a viewer AnotherButton: PROC[q: Queue, name: ROPE, proc: Buttons.ButtonProc, sib: Viewer, data: REF ANY← NIL, border: BOOL← FALSE, width: INTEGER← 0, guarded: BOOL← FALSE, font: VFonts.Font ← VFonts.defaultFont, newLine: BOOL← FALSE] RETURNS [nV: Viewer]; -- sib is a viewer to the left or above the button to be made CreateMenuEntry: PROC[q: Queue, name: ROPE, proc: Menus.MenuProc, clientData: REF ANY← NIL, documentation: REF ANY← NIL, fork: BOOL← TRUE, guarded: BOOL← FALSE] RETURNS[Menus.MenuEntry]; GetDefaultDBQueue: PROC RETURNS[Queue]; -- returns Squirrel's default Queue -- The following three PROCs assume that sib.parent#NIL MakeTypescript: PROC[sib: Viewer] RETURNS [ts: TypeScript.TS]; -- sib is sibling to create TS after, this must be last child of sib.parent. MakeRuler: PROC[sib: Viewer, h: INTEGER← 1] RETURNS [r: Viewer]; -- Put a h-bit wide line after sib MakeBigTextBox: PUBLIC PROC[sib: Viewer, contents: ROPE] RETURNS [nV: Viewer]; -- Makes editable text viewer taking rest of sib.parent's viewer, suitable for msg body or whatever. -- sib is sibling to create text box after, this must be last child of sib.parent. FieldHandle: TYPE = REF FieldObject; FieldObject: TYPE = RECORD[ tuple: Relship, attribute: Attribute ]; ProcessSelection: Buttons.ButtonProc; -- A standard ButtonProc that assumes the button's REF ANY data is the FieldHandle above. -- Insures attribute of tuple is entity-valued and non-NIL, then calls Nut.Display on it. DefaultFreezeProc: Menus.MenuProc; -- A standard proc for freezing a Nut (make it not reuseable) -- ******************************************************** -- TYPEs used in editor windows -- ******************************************************** CommitEditableTuple: PROC[eti: EditableTupleInfo, eei: EditableEntityInfo] RETURNS[BOOLEAN]; EditableTupleInfoObject: TYPE = RECORD[ a: Attribute, -- Attribute that references entity we're editing r: Relation, -- relation this tuple comes from al: LIST OF Attribute, -- attributes of this relation existing: Relship, -- NIL if this doesn't represent existing tuple uniqueNess: Uniqueness, -- {None, Key, KeyPart, OptionalKey} lastAttributeViewerInfo: AttributeFieldInfo, -- last viewer horizontally nextETIO: EditableTupleInfo]; -- next line of viewers EditableTupleInfo: TYPE = REF EditableTupleInfoObject; AttributeFieldInfoObject: TYPE = RECORD[ a: Attribute, -- this Attribute v: ViewerClasses.Viewer, -- this viewer prev: AttributeFieldInfo]; -- previous viewer horizontally AttributeFieldInfo: TYPE = REF AttributeFieldInfoObject; EditableEntityInfoObject: TYPE = RECORD[ d: Domain, -- domain of this viewer eName: ROPE, -- name of new/existing entity e: Entity, -- new/existing entity of this viewer neV: ViewerClasses.Viewer, -- text viewer for nextEntity to edit etiChain: EditableTupleInfo]; EditableEntityInfo: TYPE = REF EditableEntityInfoObject; -- ******************************************************** -- TYPEs used in Displayer viewers -- ******************************************************** AttributeFieldObject: TYPE = RECORD[ attribute: Attribute, property: Property ]; AttributeFieldHandle: TYPE = REF AttributeFieldObject; EntityFieldObject: TYPE = RECORD[ entity: Entity]; EntityFieldHandle: TYPE = REF EntityFieldObject; -- ******************************************************** -- default nut procs -- ******************************************************** Display: Nut.DisplayProc; -- Creates a browser viewer display the given entity. Edit: Nut.EditProc; -- Creates a browser viewer display the given entity, and prompts for -- all the relationships an entity of this type can participate in. Query: Nut.QueryProc; -- Not yet implemented. Creates default queryer. Create: Nut.CreateProc; -- Creates a default viewer for a nut, a Container with default menu and title END.