<> <> <> <<>> DIRECTORY InputFocus USING [GetInputFocus], Rope USING [ROPE], ViewerClasses USING [Viewer, ViewerRec], ViewerOps USING [CreateViewer, FindViewer]; ViewerTools: CEDAR DEFINITIONS IMPORTS InputFocus, ViewerOps = BEGIN OPEN ViewerClasses, ViewerOps; ---------- Finding and Creating Viewers ---------- FindExistingViewer: PROC [fileName: Rope.ROPE] RETURNS [viewer: Viewer] = INLINE {RETURN[FindViewer[fileName]]}; <> MakeNewTextViewer: PROC [info: ViewerClasses.ViewerRec _ [], paint: BOOL _ TRUE] RETURNS [viewer: Viewer] = INLINE {RETURN[CreateViewer[flavor: $Text, info: info, paint: paint]]}; <> <> <> <> <<-------->> ---------- Operations on Selections ---------- SelPos: TYPE = REF SelPosRec; SelPosRec: TYPE = RECORD [ start, length: LONG INTEGER _ 0, pendingDelete: BOOL _ FALSE, caretPos: {before, after} _ before]; SetSelection: PROC [viewer: Viewer, selection: SelPos _ NIL] = INLINE {viewer.class.set[viewer, selection, TRUE, $SelPos]}; < caret at end. For other text viewers, NIL => entire contents in pending-delete mode. Works only for Tioga and Typescript viewers.>> GetSelectedViewer: PROC RETURNS [viewer: Viewer] = INLINE {RETURN[InputFocus.GetInputFocus[].owner]} ; <> GetSelectionContents: PROC RETURNS [contents: Rope.ROPE] = INLINE { v: Viewer = GetSelectedViewer[]; RETURN[IF v=NIL OR v.class.get=NIL THEN NIL ELSE NARROW[v.class.get[v, $SelChars]]]}; <> GetSelection: PROC [viewer: Viewer] RETURNS [selection: SelPos] = INLINE {RETURN[NARROW[viewer.class.get[viewer, $SelPos]]]}; <> <<-------->> ---------- Contents of Viewers ---------- <> GetContents: PROC [viewer: Viewer] RETURNS [contents: Rope.ROPE] = INLINE { RETURN[IF viewer.class.get=NIL THEN NIL ELSE NARROW[viewer.class.get[viewer]]]}; <> SetContents: PROC [viewer: Viewer, contents: Rope.ROPE, paint: BOOL _ TRUE] = INLINE { IF viewer.class.set#NIL THEN viewer.class.set[viewer, contents, paint]}; <> TiogaContents: TYPE = REF TiogaContentsRec ; TiogaContentsRec: TYPE = RECORD [ contents: Rope.ROPE _ NIL, formatting: Rope.ROPE _ NIL ] ; GetTiogaContents: PROC [viewer: Viewer] RETURNS [contents: TiogaContents] = INLINE { RETURN[IF viewer.class.get=NIL THEN NIL ELSE NARROW[viewer.class.get[viewer, $TiogaContents]]]}; <> SetTiogaContents: PROC [viewer: Viewer, contents: TiogaContents, paint: BOOL _ TRUE] = INLINE { IF viewer.class.set#NIL THEN viewer.class.set[viewer, contents, paint, $TiogaContents]}; <> InhibitUserEdits: PROC [viewer: Viewer] = INLINE { viewer.class.set[viewer, NIL, TRUE, $ReadOnly]} ; <> EnableUserEdits: PROC [viewer: Viewer] = INLINE { viewer.class.set[viewer, NIL, TRUE, $ReadWrite]} ; <> <<-------->> END.