MODULE Menu EXPORTS Main;
IMPORT Trestle, VBT, TextVBT, RigidVBT, HVSplit;
IMPORT ButtonVBT, MenuBtnVBT, AnchorBtnVBT, BorderedVBT;
IMPORT PaintOp, Axis, Wr, Stdio;
PROCEDURE OpenAction (v: ButtonVBT.T; READONLY cd: VBT.MouseRec) =
BEGIN
Wr.PutText(Stdio.stdout, "Open\n");
END OpenAction;
PROCEDURE CloseAction (v: ButtonVBT.T; READONLY cd: VBT.MouseRec) =
BEGIN
Wr.PutText(Stdio.stdout, "Close\n");
END CloseAction;
PROCEDURE CutAction (v: ButtonVBT.T; READONLY cd: VBT.MouseRec) =
BEGIN
Wr.PutText(Stdio.stdout, "Cut\n");
END CutAction;
PROCEDURE PasteAction (v: ButtonVBT.T; READONLY cd: VBT.MouseRec) =
BEGIN
Wr.PutText(Stdio.stdout, "Paste\n");
END PasteAction;
CONST
horz = 30.0;
vert = 10.0; (* size of main window in millimeters *)
VAR
(* build up the menu items for pull down menu1 *)
open := MenuBtnVBT.TextItem("Open", OpenAction);
close := MenuBtnVBT.TextItem("Close", CloseAction);
(* build up the pull down menu1 *)
menu1 := BorderedVBT.New(HVSplit.Cons(Axis.T.Ver, open, close));
a1 := AnchorBtnVBT.New(ch := TextVBT.New("File"), menu := menu1);
(* build up the menu items for pull down menu2 *)
cut := MenuBtnVBT.TextItem("Cut", CutAction);
paste := MenuBtnVBT.TextItem("Paste", PasteAction);
(* build up the pulldown menu2 *)
menu2 := BorderedVBT.New(HVSplit.Cons(Axis.T.Ver, cut, paste));
a2 := AnchorBtnVBT.New(ch := TextVBT.New("Edit"), menu := menu2);
(* Build up the menu bar containing the two anchor buttons *)
blue := PaintOp.FromRGB(0.0, 0.0, 1.0);
bar := ButtonVBT.MenuBar(a1, a2, op := blue);
text := RigidVBT.FromHV(TextVBT.New("Menu demo"), horz, vert);
main := HVSplit.Cons(Axis.T.Ver, bar, text);
BEGIN
Trestle.Install(main);
Trestle.AwaitDelete(main);
END Menu.