window.mod 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. MODULE window;
  2. (* One window with text and a Close button. *)
  3. FROM InOut IMPORT WriteString, WriteLn;
  4. IMPORT tv;
  5. VAR e : tv.Event; quit : BOOLEAN; w, t, b, st : tv.ViewPtr; cmd : INTEGER;
  6. BEGIN
  7. IF NOT tv.Init() THEN WriteString("not a tty"); WriteLn; HALT END;
  8. st := tv.NewView(tv.VText, 0, tv.Rows() - 1, tv.Cols(), 1);
  9. tv.SetText(st, " Drag the title bar, click Close or press Esc");
  10. tv.AddView(tv.Desk(), st);
  11. w := tv.NewView(tv.VWindow, 6, 3, 46, 10);
  12. tv.SetText(w, "Hello");
  13. t := tv.NewView(tv.VText, 8, 5, 42, 1);
  14. tv.SetText(t, "This is a TVision-style window.");
  15. tv.AddView(w, t);
  16. t := tv.NewView(tv.VText, 8, 6, 42, 1);
  17. tv.SetText(t, "Move it with the mouse.");
  18. tv.AddView(w, t);
  19. b := tv.NewView(tv.VButton, 8, 9, 10, 1);
  20. tv.SetText(b, "Close"); tv.SetTag(b, tv.cmClose); tv.AddView(w, b);
  21. tv.AddView(tv.Desk(), w);
  22. tv.FocusView(b);
  23. tv.Finish;
  24. quit := FALSE;
  25. WHILE NOT quit DO
  26. IF tv.Resized() THEN tv.Finish END;
  27. IF tv.ReadEvent(e) THEN
  28. IF (e.kind = tv.evKey) AND (e.key = tv.kEsc) THEN quit := TRUE
  29. ELSE
  30. cmd := tv.HandleEvent(e);
  31. IF (cmd = tv.cmClose) OR (cmd = tv.cmOK) THEN quit := TRUE END
  32. END;
  33. IF NOT quit THEN tv.Finish END
  34. END
  35. END;
  36. tv.Done
  37. END window.