Copyright (C) 1992, Digital Equipment Corporation
All rights reserved.
See the file COPYRIGHT for a full description.
Last modified on Sun Apr 14 14:47:23 PDT 1996 by heydon
modified on Sun Jun 11 17:28:23 PDT 1995 by gnelson
MODULE JunoUIImpl;
IMPORT View, Drawing, Drag, JunoPt, ExternalProc;
FROM ExternalProc IMPORT Closure, Bind;
IMPORT JunoScope;
IMPORT JunoArgs, RTVal;
IMPORT Filter;
IMPORT Atom;
VAR (*CONST*)
DragNameSym := Atom.FromText("DragName");
DragLocSym := Atom.FromText("DragLoc");
PROCEDURE New(rt: View.Root): JunoScope.Mod =
VAR
scp := JunoScope.New(NIL, size := 2);
res := NEW(JunoScope.Mod, public_scp := scp, scp := scp);
BEGIN
ExternalProc.SetupBind(ModSym, scp, rt);
Bind(DragNameSym, NEW(Closure, invoke := DragNameProc),
in := 0, out := 1);
Bind(DragLocSym, NEW(Closure, invoke := DragLocProc),
in := 0, out := 1);
Bind(DragSym, NEW(Closure, invoke := Drag.CallbackProc),
in := 1, out := 1);
RETURN res
END New;
PROCEDURE DragNameProc(cl: Closure): BOOLEAN =
VAR drag: Drag.T := cl.rt.drawing; val: RTVal.T; BEGIN
IF drag.dragging
THEN val := RTVal.FromText(drag.dragName)
ELSE val := RTVal.nil
END;
JunoArgs.WriteValue(1, val);
RETURN TRUE
END DragNameProc;
PROCEDURE DragLocProc(cl: Closure): BOOLEAN =
VAR drag: Drag.T := cl.rt.drawing; val: RTVal.T; BEGIN
IF drag.dragging THEN
VAR
child: Drawing.Child := Filter.Child(cl.rt.drawing);
xypt := JunoPt.FromHV(drag.draggee, child.xform);
BEGIN
val := RTVal.FromPair(RTVal.FromReal(xypt.x), RTVal.FromReal(xypt.y))
END
ELSE
val := RTVal.nil
END;
JunoArgs.WriteValue(1, val);
RETURN TRUE
END DragLocProc;
BEGIN
(* initialize globals *)
ModSym := Atom.FromText("JunoUI");
DragSym := Atom.FromText("_DRAG");
END JunoUIImpl.