Panels.Mod 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. MODULE Panels;
  2. IMPORT Gui, G := Graph, Strings, Out;
  3. CONST
  4. marTop = 8;
  5. indent = 6;
  6. TYPE
  7. Panel* = POINTER TO PanelDesc;
  8. PanelDesc* = RECORD(Gui.WidgetDesc) END;
  9. PROCEDURE DrawPanel*(W: Gui.Widget; x, y: INTEGER);
  10. VAR c: G.Color;
  11. f: G.Font;
  12. fw, fh, tLen: INTEGER;
  13. BEGIN
  14. f := Gui.GetFont(W);
  15. G.GetMonoFontSize(f, fw, fh);
  16. tLen := fw * Strings.Length(W.text.s(*!FIXME*)) + 4;
  17. G.MakeCol(c, 0, 0, 0);
  18. G.DrawString(W.text.s(*!FIXME*), x + indent + 2, y, f, c);
  19. G.MakeCol(c, 128, 128, 128);
  20. G.HLine(x, y + marTop, x + indent, c);
  21. G.HLine(x + indent + tLen, y + marTop, x + W.w - 2, c);
  22. G.VLine(x, y + marTop, y + W.h - 2, c);
  23. G.HLine(x, y + W.h - 2, x + W.w - 2, c);
  24. G.VLine(x + W.w - 2, y + marTop, y + W.h - 2, c);
  25. G.MakeCol(c, 255, 255, 255);
  26. G.HLine(x + 1, y + marTop + 1, x + indent, c);
  27. G.HLine(x + indent + tLen, y + marTop + 1, x + W.w - 3, c);
  28. G.VLine(x + 1, y + marTop + 1, y + W.h - 3, c);
  29. G.HLine(x, y + W.h - 1, x + W.w - 1, c);
  30. G.VLine(x + W.w - 1, y + marTop, y + W.h - 2, c);
  31. Gui.DrawBody(W, x, y)
  32. END DrawPanel;
  33. PROCEDURE InitPanel*(p: Panel; w, h: INTEGER; title: ARRAY OF CHAR);
  34. BEGIN
  35. Gui.InitWidget(p);
  36. p.w := w; p.h := h;
  37. Gui.SetText(p, title);
  38. p.draw := DrawPanel
  39. END InitPanel;
  40. PROCEDURE NewPanel*(w, h: INTEGER; title: ARRAY OF CHAR): Panel;
  41. VAR p: Panel;
  42. BEGIN NEW(p); InitPanel(p, w, h, title)
  43. RETURN p END NewPanel;
  44. END Panels.