<* PRAGMA LL *>A
View.T is the common supertype used by the source and drawing views.
INTERFACEIfView ; IMPORT Editor, CurrCmd, Marquee; IMPORT FormsVBT; IMPORT Filter, ButtonVBT; TYPE T = Filter.T OBJECT root: Root METHODS <* LL.sup <= VBT.mu *> update(); <* LL.sup < SELF *> modified(how: ModKind); END; ModKind = { Explicit, ImplicitConsistent, ImplicitOutOfDate };
t is a View.T, then t.update is responsible for making the view
t contain the truth according to the current command t.root.ccmd; the
method requires t.root.astTrue.
The method t.modified is called whenever the view is modified. If the
how argument is Explicit, then t was edited explicitly through t.
Otherwise, t was edited implicitly through some other view. If how is
ImplicitConsistent, then the view through which the edit was actually
made is consistent with the change to t. If how is ImplicitOutOfDate,
then the view through which the edit was actually made is out-of-date with
respect to t.
PSImpl <: T;
Drawing <: PSImpl;
Root = OBJECT
ccmd: CurrCmd.T;
drawing: Drawing;
animView, currView: PSImpl;
source: T;
editor: Editor.T;
modules: EditorList := NIL;
currButton: ButtonVBT.T;
dTrue, astTrue, sTrue, eTrue: BOOLEAN;
skipify := FALSE;
marquee: Marquee.T;
END;
A View.Root contains the shared data visible to all the views and the
top-level Juno window. The fields drawing, source, editor, and
modules point to the drawing view, source view, anonymous module editor,
and named module editors, respectively.
When Juno is used as a remote Zeus animation view, animView is the
animation view. In any case, currView is either drawing or animView,
and is the view all graphics are drawn to by the implementation of the PS
module.
CurrButton is the current ToolBox.Button.
The booleans dTrue, sTrue, astTrue, and eTrue reflect whether the
drawing, source, AST, and compiled editor scope contain the truth,
respectively.
If skipify is TRUE, we will solve only (and not run) when the current
command is run implicitly (e.g., for repaints and during drags).
EditorList = REF RECORD
view: Editor.T;
form: FormsVBT.T := NIL; (* actually of type "Juno.Toolbox" *)
mod: TEXT;
next: EditorList
END;
An EditorList is a list of open module editors. If e: EditorList, then
e.view is the module editor, e.form is the toolbox form for the module
(or NIL if none has been created yet for this module), and e.mod is the
name of the module.
END View.