<> <> <> <> DIRECTORY Atom USING [GetPropFromList, PutPropOnList], Imager USING [Context], Rope USING [ROPE], TIPUser USING [TIPScreenCoords], ViewerClasses USING [Viewer, ViewerClass, ViewerFlavor, ViewerRec, Column], ViewerSpecs USING [openBottomY, openLeftWidth]; ViewerOps: CEDAR DEFINITIONS IMPORTS Atom, ViewerSpecs SHARES ViewerClasses = BEGIN OPEN ViewerClasses, ViewerSpecs; 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] ; <> CopyViewer: PROC [viewer: Viewer, x, y: INTEGER, w, h: INTEGER] RETURNS [new: Viewer] ; MoveViewer: PROC [viewer: Viewer, x, y: INTEGER, w, h: INTEGER, paint: BOOL _ TRUE] ; <> Adjust: PROC [viewer: ViewerClasses.Viewer] ; <> DestroyViewer: PROC [viewer: Viewer, paint: BOOL _ TRUE] ; <> PaintViewer: PROC [viewer: Viewer, hint: PaintHint, clearClient: BOOL _ TRUE, whatChanged: REF ANY _ NIL] ; <> <> <> <> <> <> PaintHint: TYPE = { all, client, menu, caption } ; 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] ; <> EnumerateViewers: PROC [enum: EnumProc] ; <> EnumerateChildren: PROC [viewer: Viewer, enum: EnumProc] ; <> EnumProc: TYPE = PROC [v: Viewer] RETURNS [BOOL _ TRUE] ; <> FindViewer: PROC [name: Rope.ROPE] RETURNS [viewer: Viewer] ; <> <<>> Visible: PROC[viewer: Viewer] RETURNS[BOOLEAN] ; <> InstallClientContext: PROC [viewer: Viewer, context: Imager.Context] = INLINE {viewer.clientContext _ TRUE; AddProp[viewer, $ViewerClientContext, context]} ; <> AddProp: PROC [viewer: Viewer, prop: ATOM, val: REF ANY] = INLINE {viewer.props _ Atom.PutPropOnList[viewer.props, prop, val]} ; <> FetchProp: PROC [viewer: Viewer, prop: ATOM] RETURNS [val: REF ANY] = INLINE {RETURN[Atom.GetPropFromList[viewer.props, prop]]} ; <> UserToScreenCoords: PROC [self: Viewer, vx, vy: INTEGER _ 0] RETURNS [sx, sy: INTEGER] ; <> MouseInViewer: PROC [tsc: TIPUser.TIPScreenCoords] RETURNS [viewer: Viewer, client: BOOL] ; <> Top2Bottom: PROC [v: Viewer, y: INTEGER] RETURNS [INTEGER] = INLINE {RETURN[v.ch - y]}; <> Bottom2Top: PROC [v: Viewer, y: INTEGER] RETURNS [INTEGER] = INLINE {RETURN[Top2Bottom[v, y]]}; <> SetNewVersion: PROC [viewer: Viewer] = INLINE {IF ~(viewer.newVersion OR viewer.newFile) THEN IndicateNewVersion[viewer]}; <> IndicateNewVersion: PRIVATE PROC [viewer: 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 _ openLeftWidth, newBottomY: INTEGER _ openBottomY] ; <> PaintEverything: PROC ; <> BlinkIcon: PROC [viewer: Viewer, count: NAT _ 1, interval: NAT _ 2000] ; <> <> <> <> DisablePainting: PRIVATE PROC [wait: BOOL _ TRUE] ; <> EnablePainting: PRIVATE PROC ; <> WaitForPaintingToFinish: PRIVATE PROC ; <> ResetPaintCache: PRIVATE PROC [viewer: Viewer _ NIL, wait: BOOL _ TRUE] ; < flush all cached contexts.>> InitialiseColorPainting: PRIVATE PROC ; <> InvertForMenus: PRIVATE PROC [viewer: Viewer, x,y: INTEGER, w,h: INTEGER] ; <> GreyScreen: PRIVATE PROC [x,y,w,h: INTEGER, color, icon: BOOL, stipple: REF CARDINAL _ NIL] ; <> AcquireContext: PRIVATE PROC [viewer: Viewer, color: BOOL _ FALSE] RETURNS [allocated: Imager.Context] ; <> InvisiblePaint: SIGNAL ; ReleaseContext: PRIVATE PROC [free: Imager.Context]; <> <<>> END.