GtkDemo.mod 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. IMPLEMENTATION MODULE GtkDemo ;
  2. FROM DemoImpl IMPORT DoLinks, DoListBox, DoFlowBox, DoExpander, DoCss;
  3. FROM SYSTEM IMPORT ADDRESS;
  4. TYPE
  5. Demo = RECORD
  6. title: ARRAY [0..63] OF CHAR;
  7. keywords: ARRAY [0..127] OF CHAR;
  8. build: BuildProc;
  9. END;
  10. VAR
  11. demos: ARRAY [0..31] OF Demo;
  12. n: CARDINAL;
  13. PROCEDURE Copy (VAR dst: ARRAY OF CHAR; src: ARRAY OF CHAR);
  14. VAR
  15. i: CARDINAL;
  16. BEGIN
  17. i := 0;
  18. WHILE (i < HIGH(dst)) AND (i <= HIGH(src)) AND (src[i] # 0C) DO
  19. dst[i] := src[i];
  20. INC(i)
  21. END;
  22. dst[i] := 0C
  23. END Copy;
  24. PROCEDURE Equal (a, b: ARRAY OF CHAR) : BOOLEAN;
  25. VAR
  26. i: CARDINAL;
  27. BEGIN
  28. i := 0;
  29. WHILE (a[i] # 0C) AND (b[i] # 0C) DO
  30. IF a[i] # b[i] THEN RETURN FALSE END;
  31. INC(i)
  32. END;
  33. RETURN a[i] = b[i]
  34. END Equal;
  35. PROCEDURE Register (title, keywords: ARRAY OF CHAR; build: BuildProc);
  36. BEGIN
  37. IF n <= HIGH(demos) THEN
  38. Copy(demos[n].title, title);
  39. Copy(demos[n].keywords, keywords);
  40. demos[n].build := build;
  41. INC(n)
  42. END
  43. END Register;
  44. PROCEDURE Count () : CARDINAL;
  45. BEGIN
  46. RETURN n
  47. END Count;
  48. PROCEDURE TitleOf (i: CARDINAL; VAR title: ARRAY OF CHAR);
  49. BEGIN
  50. IF i < n THEN Copy(title, demos[i].title) ELSE title[0] := 0C END
  51. END TitleOf;
  52. PROCEDURE KeywordsOf (i: CARDINAL; VAR keywords: ARRAY OF CHAR);
  53. BEGIN
  54. IF i < n THEN Copy(keywords, demos[i].keywords) ELSE keywords[0] := 0C END
  55. END KeywordsOf;
  56. PROCEDURE BuildByTitle (title: ARRAY OF CHAR; doWidget: ADDRESS) : ADDRESS;
  57. VAR
  58. i: CARDINAL;
  59. buf: ARRAY [0..63] OF CHAR;
  60. BEGIN
  61. i := 0;
  62. WHILE i < n DO
  63. TitleOf(i, buf);
  64. IF Equal(buf, title) THEN RETURN demos[i].build(doWidget) END;
  65. INC(i)
  66. END;
  67. RETURN NIL
  68. END BuildByTitle;
  69. BEGIN
  70. n := 0;
  71. Register("Links", "hyperlinks markup label uri anchor", DoLinks);
  72. Register("List Box", "list rows selection box", DoListBox);
  73. Register("Flow Box", "flow grid reflow colors swatches", DoFlowBox);
  74. Register("Expander", "disclosure triangle expand collapse", DoExpander);
  75. Register("CSS Basics", "css styling theme provider", DoCss)
  76. END GtkDemo.