gfx.mod 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. MODULE gfx;
  2. (* The tv toolkit running on the tigr graphics backend instead of a terminal.
  3. Build (from tvision-m2/examples):
  4. make gfx
  5. Needs tigr.o and helper.o built in ../modula2 (gcc -c ...). *)
  6. FROM InOut IMPORT WriteString, WriteLn;
  7. FROM SYSTEM IMPORT ADR, CAST;
  8. IMPORT tv, tvg;
  9. CONST
  10. mNew = 100;
  11. mQuit = 101;
  12. mAbout = 102;
  13. mCut = 103;
  14. mCopy = 104;
  15. VAR
  16. w1, w2, status : tv.ViewPtr;
  17. input, check, r1, r2, listv : tv.ViewPtr;
  18. t : tv.ViewPtr;
  19. listData : tv.ListData;
  20. e : tv.Event;
  21. quit : BOOLEAN;
  22. cmd : INTEGER;
  23. sender : tv.ViewPtr;
  24. discard : INTEGER;
  25. tmp, msgbuf : ARRAY [0..63] OF CHAR;
  26. PROCEDURE SetStatus(s : ARRAY OF CHAR);
  27. BEGIN tv.SetText(status, s); tvg.Finish END SetStatus;
  28. BEGIN
  29. IF NOT tvg.InitGfx("tvision-m2 - tigr backend", 90, 30) THEN
  30. WriteString("cannot open the graphics window"); WriteLn; HALT
  31. END;
  32. (* menu bar *)
  33. tv.MenuBarInit;
  34. tv.MenuAdd("File");
  35. tv.MenuItemAdd("New", mNew);
  36. tv.MenuSep;
  37. tv.MenuItemAdd("Quit", mQuit);
  38. tv.MenuAdd("Edit");
  39. tv.MenuItemAdd("Cut", mCut);
  40. tv.MenuItemAdd("Copy", mCopy);
  41. tv.MenuAdd("Help");
  42. tv.MenuItemAdd("About", mAbout);
  43. status := tv.NewView(tv.VText, 0, tv.Rows() - 1, tv.Cols(), 1);
  44. tv.SetText(status, " F10/click: menu Tab: next mouse: drag/click Esc: quit");
  45. tv.AddView(tv.Desk(), status);
  46. w1 := tv.NewView(tv.VWindow, 3, 2, 56, 16);
  47. tv.SetText(w1, "Editor");
  48. t := tv.NewView(tv.VText, 5, 4, 24, 1);
  49. tv.SetText(t, "Name:"); tv.AddView(w1, t);
  50. input := tv.NewView(tv.VInput, 12, 4, 32, 1);
  51. tv.SetText(input, "Modula-2"); tv.AddView(w1, input);
  52. check := tv.NewView(tv.VCheck, 12, 6, 24, 1);
  53. tv.SetText(check, "Enabled"); check^.flags := tv.vfSelected; tv.AddView(w1, check);
  54. t := tv.NewView(tv.VText, 5, 8, 6, 1);
  55. tv.SetText(t, "Mode:"); tv.AddView(w1, t);
  56. r1 := tv.NewView(tv.VRadio, 12, 8, 12, 1);
  57. tv.SetText(r1, "Fast"); r1^.flags := tv.vfSelected; tv.AddView(w1, r1);
  58. r2 := tv.NewView(tv.VRadio, 26, 8, 12, 1);
  59. tv.SetText(r2, "Safe"); tv.AddView(w1, r2);
  60. listData.items[0] := "Alpha"; listData.items[1] := "Bravo";
  61. listData.items[2] := "Charlie"; listData.items[3] := "Delta";
  62. listData.items[4] := "Echo"; listData.items[5] := "Foxtrot";
  63. listData.count := 6;
  64. listv := tv.NewView(tv.VList, 5, 10, 22, 5);
  65. listv^.list := CAST(tv.ListDataPtr, ADR(listData));
  66. tv.AddView(w1, listv);
  67. t := tv.NewView(tv.VButton, 30, 15, 8, 1);
  68. tv.SetText(t, "OK"); tv.SetTag(t, tv.cmOK); tv.AddView(w1, t);
  69. t := tv.NewView(tv.VButton, 41, 15, 10, 1);
  70. tv.SetText(t, "Close"); tv.SetTag(t, tv.cmCancel); tv.AddView(w1, t);
  71. tv.AddView(tv.Desk(), w1);
  72. w2 := tv.NewView(tv.VWindow, 42, 8, 34, 7);
  73. tv.SetText(w2, "About");
  74. t := tv.NewView(tv.VText, 44, 10, 30, 1);
  75. tv.SetText(t, "tvision-m2 on tigr"); tv.AddView(w2, t);
  76. t := tv.NewView(tv.VText, 44, 11, 30, 1);
  77. tv.SetText(t, "Same view tree, windowed output."); tv.AddView(w2, t);
  78. tv.AddView(tv.Desk(), w2);
  79. tv.BringToFront(w1);
  80. tv.FocusView(input);
  81. tvg.Finish;
  82. quit := FALSE;
  83. WHILE NOT quit DO
  84. IF tvg.ReadEvent(e) THEN
  85. IF (e.kind = tv.evKey) AND (e.key = tv.kEsc) THEN
  86. quit := TRUE
  87. ELSE
  88. cmd := tv.HandleEvent(e);
  89. sender := tv.Sender();
  90. IF cmd = mQuit THEN
  91. quit := TRUE
  92. ELSIF cmd = mAbout THEN
  93. discard := tv.MessageBox("About", "tvision-m2 - tigr backend", tv.mbOK);
  94. SetStatus(" About closed")
  95. ELSIF cmd = tv.cmOK THEN
  96. discard := tv.MessageBox("Info", "You pressed OK.", tv.mbOK)
  97. ELSIF cmd = tv.cmCancel THEN
  98. tv.DelView(w1)
  99. ELSIF cmd >= 100 THEN
  100. tv.CopyText(msgbuf, "Command #");
  101. tv.IntToText(tmp, cmd, 0);
  102. tv.AppendText(msgbuf, tmp);
  103. SetStatus(msgbuf)
  104. END
  105. END;
  106. IF NOT quit THEN tvg.Finish END
  107. END;
  108. IF tvg.Closed() THEN quit := TRUE END
  109. END;
  110. tvg.Done
  111. END gfx.