ViewerTools.mesa, Written by S. McGregor
Edited by McGregor on July 21, 1983 10:50 am
Last Edited by: Maxwell, January 3, 1983 12:14 pm
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]]};
Returns NIL if none could be found. Use VirtualDesktops.FindExistingViewer to search past current desktop.
MakeNewTextViewer: PROC [info: ViewerClasses.ViewerRec ← [], paint: BOOLTRUE]
RETURNS [viewer: Viewer] =
INLINE {RETURN[CreateViewer[flavor: $Text, info: info, paint: paint]]};
If info.parent=NIL then creates a top-level viewer. Specify name and file in info. Otherwise, pass wx, wy, ww, wh in info for size. For initial contents, pass a rope as the data field in info, or pass a filename in the file field.
See Buttons.mesa for creating new buttons.
See Containers.mesa for creating new labels.
See Labels.mesa for creating new labels.
--------
---------- Operations on Selections ----------
SelPos: TYPE = REF SelPosRec;
SelPosRec: TYPE = RECORD [
start, length: LONG INTEGER ← 0,
pendingDelete: BOOLFALSE,
caretPos: {before, after} ← before];
SetSelection: PROC [viewer: Viewer, selection: SelPos ← NIL] = INLINE
{viewer.class.set[viewer, selection, TRUE, $SelPos]};
Set and scroll to a selection. For typescripts, NIL => 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]} ;
Returns the selected viewer.
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]]]};
Returns the contents of the selected viewer's selection. Works only when the input focus is in a Tioga and Typescript viewer.
GetSelection: PROC [viewer: Viewer] RETURNS [selection: SelPos] = INLINE
{RETURN[NARROW[viewer.class.get[viewer, $SelPos]]]};
Returns the selected viewer and the position of its selection. Works only for Tioga viewers!
--------
---------- Contents of Viewers ----------
Works for text and maybe some other classes
GetContents: PROC [viewer: Viewer] RETURNS [contents: Rope.ROPE] = INLINE {
RETURN[IF viewer.class.get=NIL THEN NIL ELSE NARROW[viewer.class.get[viewer]]]};
Returns the contents of a Tioga document (formatting information is omitted).
SetContents: PROC [viewer: Viewer, contents: Rope.ROPE, paint: BOOLTRUE] = INLINE {
IF viewer.class.set#NIL THEN viewer.class.set[viewer, contents, paint]};
Set the contents of a Tioga document.
TiogaContents: TYPE = REF TiogaContentsRec ;
TiogaContentsRec: TYPE = RECORD [
contents: Rope.ROPENIL,
formatting: Rope.ROPENIL
] ;
GetTiogaContents: PROC [viewer: Viewer] RETURNS [contents: TiogaContents] = INLINE {
RETURN[IF viewer.class.get=NIL THEN NIL ELSE NARROW[viewer.class.get[viewer,
$TiogaContents]]]};
Returns the contents and formatting of a Tioga document.
SetTiogaContents: PROC [viewer: Viewer, contents: TiogaContents, paint: BOOLTRUE] = INLINE {
IF viewer.class.set#NIL THEN viewer.class.set[viewer, contents, paint, $TiogaContents]};
Set the contents and formatting of a Tioga document.
InhibitUserEdits: PROC [viewer: Viewer] = INLINE {
viewer.class.set[viewer, NIL, TRUE, $ReadOnly]} ;
Prevent the user from editing a text viewer.
EnableUserEdits: PROC [viewer: Viewer] = INLINE {
viewer.class.set[viewer, NIL, TRUE, $ReadWrite]} ;
Allow the user to edit a text viewer.
--------
END.