<<>> <> <> <> <> <> <> <> <> <<>> DIRECTORY Rope, ScreenCoordsTypes, ViewerClasses; ViewerOps: CEDAR DEFINITIONS SHARES ViewerClasses = BEGIN Column: TYPE = ViewerClasses.Column; Menu: TYPE = ViewerClasses.Menu; Viewer: TYPE = ViewerClasses.Viewer; ViewerRec: TYPE = ViewerClasses.ViewerRec; ViewerClass: TYPE = ViewerClasses.ViewerClass; ViewerFlavor: TYPE = ViewerClasses.ViewerFlavor; RegisterViewerClass: PROC [flavor: ViewerFlavor, class: ViewerClass]; <> FetchViewerClass: PROC [flavor: ViewerFlavor] RETURNS [ViewerClass]; <> CreateViewer: PROC [flavor: ViewerFlavor, info: ViewerRec ¬ [], paint: BOOL ¬ TRUE] RETURNS [new: Viewer]; <> OpenIcon: PROC [icon: Viewer, closeOthers: BOOL ¬ FALSE, bottom: BOOL ¬ TRUE, paint: BOOL ¬ TRUE]; <> CloseViewer: PROC [viewer: Viewer, paint: BOOL ¬ TRUE]; <> GrowViewer: PROC [viewer: Viewer, paint: BOOL ¬ TRUE]; <> TopViewer: PROC [viewer: Viewer, paint: BOOL ¬ TRUE]; <> BottomViewer: PROC [viewer: Viewer, paint: BOOL ¬ TRUE]; <> MoveAboveViewer: PROC [altered, static: Viewer, paint: BOOL ¬ TRUE]; <> MoveBelowViewer: PROC [altered, static: Viewer, paint: BOOL ¬ TRUE]; <> MoveViewer: PROC [viewer: Viewer, x, y: INTEGER, w, h: INTEGER, paint: BOOL ¬ TRUE]; <> DestroyViewer: PROC [viewer: Viewer, paint: BOOL ¬ TRUE]; <> PaintHint: TYPE = ViewerClasses.PaintHint; <> <> <> <> <> <<>> PaintViewer: PROC [viewer: Viewer, hint: PaintHint, clearClient: BOOL ¬ TRUE, whatChanged: REF ANY ¬ NIL]; <> NotifyViewer: PROC [viewer: Viewer, input: LIST OF REF ANY] = INLINE {IF viewer.class.notify#NIL THEN viewer.class.notify[viewer, input]}; <> SetViewer: PROC [viewer: Viewer, data: REF ANY, finalise: BOOL ¬ TRUE, op: ATOM ¬ NIL] = INLINE {IF viewer.class.set#NIL THEN viewer.class.set[viewer, data, finalise, op]}; <> GetViewer: PROC [viewer: Viewer, op: ATOM ¬ NIL] RETURNS [data: REF ANY] = INLINE {RETURN[IF viewer.class.get#NIL THEN viewer.class.get[viewer, op] ELSE NIL]}; <> SaveViewer: PROC [viewer: Viewer] RETURNS [ok: BOOL]; <> RestoreViewer: PROC [viewer: Viewer]; <> ReplaceViewer: PROC [new, old: Viewer]; <> SwapIconAndViewer: PROC [icon, openViewer: Viewer, paint: BOOL ¬ TRUE]; <> ChangeColumn: PROC [viewer: Viewer, newColumn: Column]; <> EnumProc: TYPE = PROC [v: Viewer] RETURNS [BOOL ¬ TRUE]; <> EnumerateViewers: PROC [enum: EnumProc]; <> EnumerateChildren: PROC [viewer: Viewer, enum: EnumProc]; <> FindViewer: PROC [name: Rope.ROPE] RETURNS [viewer: Viewer]; <> <<>> AddProp: PROC [viewer: Viewer, prop: ATOM, val: REF ANY]; <> FetchProp: PROC [viewer: Viewer, prop: ATOM] RETURNS [val: REF ANY]; <> UserToScreenCoords: PROC [self: Viewer, vx, vy: INTEGER ¬ 0] RETURNS [sx, sy: INTEGER]; <> MouseInViewer: PROC [tsc: ScreenCoordsTypes.TIPScreenCoords] RETURNS [viewer: Viewer, client: BOOL]; <> SetMenu: PROC [viewer: Viewer, menu: Menu ¬ NIL, paint: BOOL ¬ TRUE]; <> IndicateNewVersion: PRIVATE PROC [viewer: Viewer]; SetNewVersion: PROC [viewer: Viewer] ~ INLINE {IF ~(viewer.newVersion OR viewer.newFile) THEN IndicateNewVersion[viewer]}; <> SetNewFile: PROC [viewer: Viewer]; <> SetOpenHeight: PROC [viewer: Viewer, clientHeight: INTEGER]; <> EstablishViewerPosition: PROC [viewer: Viewer, x, y, w, h: INTEGER]; <> ComputeColumn: PROC [column: Column, paint: BOOL ¬ TRUE]; <> ViewerColumn: PROC [viewer: Viewer] RETURNS [column: Column] = INLINE {RETURN[IF viewer.iconic THEN static ELSE viewer.column]}; SaveAllEdits: PROC; <> MoveBoundary: PROC [newLeftWidth: INTEGER, newBottomY: INTEGER]; <> Adjust: PROC [viewer: Viewer, sticky: BOOL ¬ TRUE]; <> PaintEverything: PROC; <> BlinkViewer: PROC [viewer: Viewer, milliseconds: NAT ¬ 400]; <> BlinkIcon: PROC [viewer: Viewer, count: INT ¬ 1, secondsBetweenBlinks: NAT ¬ 2, millisecondsPerBlink: NAT ¬ 400]; <> <> BlinkDisplay: PROC; <> END.