<> <> <> <> <> <<>> DIRECTORY Menus USING [Menu], Rope USING [ROPE], TIPUser USING [TIPScreenCoords], ViewerClasses USING [Viewer, ViewerClass, ViewerFlavor, ViewerRec, Column]; ViewerOps: CEDAR DEFINITIONS SHARES ViewerClasses ~ BEGIN OPEN ViewerClasses; 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 = { all, client, menu, caption }; <> <> <> <> <> <<>> 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]; <> 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: TIPUser.TIPScreenCoords] RETURNS [viewer: Viewer, client: BOOL]; <> SetMenu: PROC [viewer: Viewer, menu: Menus.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.