<> <> <> DIRECTORY Buttons USING [ButtonProc], Rope USING [ROPE], VFonts USING [Font], ViewerClasses USING [Viewer]; VTables: CEDAR DEFINITIONS = BEGIN OPEN Rope, ViewerClasses; VTable: TYPE = Viewer; Border: TYPE = RECORD [up,down,left,right: BOOL]; FullBorder: Border = [TRUE, TRUE, TRUE, TRUE]; NullBorder: Border = [FALSE, FALSE, FALSE, FALSE]; Create: PROC [ columns, rows: INTEGER _ 1, name: ROPE _ NIL, parent: Viewer _ NIL, xRuleWidth: INTEGER _ 1, yRuleWidth: INTEGER _ 1, x, y, w, h: INTEGER _ 0, scrollable: BOOL _ FALSE] RETURNS [table: VTable]; <> <> <> <<(and will be used as the parent)>> <> <> Install: PROC [table: VTable, paint: BOOL _ TRUE]; <> <> <> <> <<(SetEntryBorder, SetRowsAndColumns, SetTableEntry, SetEntryOffset)>> GetTableEntry: PROC [table: VTable, row, column: NAT _ 0] RETURNS [Viewer]; <> SetTableEntry: PROC [ table: VTable, row, column: NAT _ 0, name: ROPE _ NIL, flavor: ATOM _ NIL, proc: Buttons.ButtonProc _ NIL, clientData: REF _ NIL, w, h: NAT _ 0, xoff, yoff: INTEGER _ 0, border: Border _ FullBorder, font: VFonts.Font _ NIL, displayStyle: ATOM _ NIL, useMaxSize: BOOL _ FALSE]; <<... sets a table entry (requires installation afterwards). Invalid row and column specs cause bounds faults.>> <> < clientData is a pre-existing viewer (which had better have table as a parent!). >> < a new viewer of the appropriate flavor is created (appropriate arguments are passed through to CreateChild).>> < flavor = $Button will be forced>> <> <> SwapTableEntries: PUBLIC PROC [table: VTable, row1, column1, row2, column2: NAT _ 0, swapBorders: BOOL _ FALSE]; <> <> GetEntryBorder: PROC [table: VTable, row, column: NAT _ 0] RETURNS [Border]; <> <> <> SetEntryBorder: PROC [table: VTable, row, column: NAT _ 0, border: Border _ FullBorder]; <> <> GetEntryOffset: PROC [table: VTable, row, column: NAT _ 0] RETURNS [xoff,yoff: INTEGER]; <> SetEntryOffset: PROC [table: VTable, row, column: NAT _ 0, xoff,yoff: INTEGER _ 0]; <> <> GetRowsAndColumns: PROC [table: VTable] RETURNS [rows, columns: NAT]; <> SetRowsAndColumns: PROC [table: VTable, rows, columns: NAT _ 0]; <> <> <> ExchangeRows: PROC [table: VTable, row1,row2: NAT _ 0]; <> <> ExchangeColumns: PROC [table: VTable, column1,column2: NAT _ 0]; <> <> END.