2
0

Windows.txt 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. MODULE HostWindows;
  2. (* for Views *)
  3. IMPORT Windows, Controllers, Views, Files, Converters, Documents, Ports;
  4. TYPE
  5. Window = POINTER TO EXTENSIBLE RECORD (Windows.Window)
  6. next: Window; (* window ring, to prevent garbage collection of windows *)
  7. END;
  8. Directory = POINTER TO EXTENSIBLE RECORD (Windows.Directory)
  9. END;
  10. VAR
  11. dir: Directory;
  12. winAnchor: Window; (* list of all windows, from top to bottom, first is dumy header *)
  13. (** Window **)
  14. PROCEDURE (w: Window) ForwardCtrlMsg (VAR msg: Controllers.Message), EXTENSIBLE;
  15. BEGIN
  16. HALT(126)
  17. END ForwardCtrlMsg;
  18. PROCEDURE (w: Window) SetSize (width, height: INTEGER);
  19. BEGIN
  20. HALT(126)
  21. END SetSize;
  22. PROCEDURE (w: Window) SetTitle (title: Views.Title);
  23. BEGIN
  24. HALT(126)
  25. END SetTitle;
  26. PROCEDURE (w: Window) RefreshTitle;
  27. BEGIN
  28. HALT(126)
  29. END RefreshTitle;
  30. PROCEDURE (w: Window) GetTitle (OUT title: Views.Title);
  31. BEGIN
  32. HALT(126)
  33. END GetTitle;
  34. PROCEDURE (w: Window) SetSpec (loc: Files.Locator; name: Files.Name; conv: Converters.Converter);
  35. BEGIN
  36. HALT(126)
  37. END SetSpec;
  38. PROCEDURE (w: Window) MouseDown (x, y, time: INTEGER; modifiers: SET);
  39. BEGIN
  40. HALT(126)
  41. END MouseDown;
  42. PROCEDURE (w: Window) KeyDown (ch: CHAR; buttons: SET);
  43. BEGIN
  44. HALT(126)
  45. END KeyDown;
  46. PROCEDURE (w: Window) Close;
  47. BEGIN
  48. ASSERT(w.frame # NIL, 20);
  49. HALT(126);
  50. w.Close^;
  51. ASSERT(w.frame = NIL, 60)
  52. END Close;
  53. (* Directory *)
  54. PROCEDURE (d: Directory) Open (
  55. w: Windows.Window; doc: Documents.Document; flags: SET; name: Views.Title;
  56. loc: Files.Locator; fname: Files.Name; conv: Converters.Converter
  57. );
  58. VAR p: Ports.Port;
  59. BEGIN
  60. WITH w: Window DO
  61. END
  62. END Open;
  63. PROCEDURE (d: Directory) First (): Window;
  64. BEGIN
  65. RETURN winAnchor.next
  66. END First;
  67. PROCEDURE (d: Directory) Next (w: Windows.Window): Window;
  68. BEGIN
  69. IF w # NIL THEN RETURN w(Window).next ELSE RETURN NIL END
  70. END Next;
  71. PROCEDURE (d: Directory) New (): Window, EXTENSIBLE;
  72. VAR w: Window;
  73. BEGIN
  74. NEW(w); RETURN w
  75. END New;
  76. PROCEDURE (d: Directory) Focus (target: BOOLEAN): Window;
  77. BEGIN
  78. HALT(126);
  79. RETURN NIL
  80. END Focus;
  81. PROCEDURE (d: Directory) Select (w: Windows.Window; lazy: BOOLEAN);
  82. BEGIN
  83. WITH w: Window DO
  84. HALT(126)
  85. END
  86. END Select;
  87. PROCEDURE (d: Directory) GetThisWindow (p: Ports.Port; px, py: INTEGER;
  88. OUT x, y: INTEGER; OUT w: Windows.Window);
  89. BEGIN
  90. w := NIL
  91. END GetThisWindow;
  92. PROCEDURE (d: Directory) Close (w: Windows.Window);
  93. VAR v, u: Windows.Window; h: Window;
  94. BEGIN
  95. h := winAnchor; WHILE (h.next # NIL) & (h.next # w) DO h := h.next END;
  96. IF h.next = w THEN
  97. IF ~w.sub THEN
  98. v := w.link;
  99. WHILE v # w DO u := v.link; v.Close; v := u END
  100. END;
  101. w.Close
  102. END
  103. END Close;
  104. PROCEDURE (d: Directory) GetBounds (OUT w, h: INTEGER);
  105. BEGIN
  106. HALT(126)
  107. END GetBounds;
  108. PROCEDURE Init;
  109. VAR d: Directory;
  110. BEGIN
  111. NEW(d); d.l := -1; d.t := -1; d.r := -1; d.b := -1; dir := d; Windows.SetDir(d);
  112. NEW(winAnchor); winAnchor.next := NIL; (* dummy header *)
  113. END Init;
  114. BEGIN
  115. Init
  116. END HostWindows.