[Oberon] FPGA - DIY Dialogs
Tomas Kral
thomas.kral at email.cz
Sat Dec 15 11:31:42 CET 2018
On Thu, 13 Dec 2018 22:13:43 +0100
Tomas Kral <thomas.kral at email.cz> wrote:
> Fun when I try to add some message loop (handler), as I do not
> understand this part much.
I have copied over `Handler' code from `GraphicFrames.Mod', and skinned it to a bare skeleton. It seems
that to tap into Oberon event loop, one needs to extend `DisplayFrame' and install own `Handle'.
It seems to avoid circular references, there is a need of three modules, Main, Control, and Frame.
Possibly the concept of MVC, as noted in OOP by H.P.Mossenbock.
I am now able to clear frame, on opening and resizing, plus calling Update to draw DLog elements.
How do I clear frame only on initial opening not closing or resizing?
Note actual M.Y, M.H, has to be picked from the frame message! I do not get(*understand*) all the
other events, except `Oberon.InputMsg'. What if, I needed to add a new
handler for each `DLog' element at runtime, how do I chain all handlers then?
Frame* = POINTER TO FrameDesc;
FrameDesc* = RECORD (Display.FrameDesc)
END ;
UpdateMsg = RECORD (Display.FrameMsg)
id: INTEGER;
END ;
PROCEDURE Handle*(F: Display.Frame; VAR M: Display.FrameMsg);
VAR x, y, h: INTEGER;
BEGIN
CASE F OF Frame:
CASE M OF
Oberon.InputMsg:
IF M.id = Oberon.track THEN
x := M.X; y := M.Y;
IF M.keys # {} THEN ELSE Oberon.DrawMouse(MyMouse, x, y) END
ELSIF M.id = Oberon.consume THEN
END
| UpdateMsg: (*my update, not sure what to do here*)
| Oberon.ControlMsg:
IF M.id = Oberon.neutralize THEN Oberon.RemoveMarks(F.X, F.Y, F.W, F.H);
Out.String("neutralize msg"); Out.Ln
ELSIF M.id = Oberon.defocus THEN END
| Oberon.SelectionMsg: Out.String("select msg"); Out.Ln
| Oberon.CopyMsg: Oberon.RemoveMarks(F.X, F.Y, F.W, F.H);
| MenuViewers.ModifyMsg:
Out.String("modify msg"); Out.Ln;
Display.ReplConst(Display.black, F.X, M.Y, F.W, M.H, Display.replace); (*clear frame*)
DLogs.Update (*redrawing dialog screen*)
END
END
END Handle;
--
Tomas Kral <thomas.kral at email.cz>
More information about the Oberon
mailing list