[Oberon] FPGA - DIY Dialogs

Jörg joerg.straube at iaeth.ch
Sat Dec 15 11:45:10 CET 2018


I recommend to read and study this description:
https://www.inf.ethz.ch/personal/wirth/ProjectOberon/PO.System.pdf
Especially chapter 3 and 4

Br
Jörg

> Am 15.12.2018 um 11:31 schrieb Tomas Kral <thomas.kral at email.cz>:
> 
> 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>
> --
> Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related systems
> https://lists.inf.ethz.ch/mailman/listinfo/oberon
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.inf.ethz.ch/pipermail/oberon/attachments/20181215/636d40de/attachment.html>


More information about the Oberon mailing list